package com.gustz.dove.api.app.service.impl; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.sinovatech.fw.api.vo.Order; import com.sinovatech.fw.dao.SqlDao; import com.sinovatech.fw.query.util.QueryInfo; import com.sinovatech.fw.query.util.QueryInfoBuilder; import com.sinovatech.fw.service.impl.AbstractDataService; import com.sinovatech.rd.wcsb.api.app.service.ClientAppService; import com.sinovatech.rd.wcsb.api.app.vo.ClientAppVo; import com.sinovatech.rd.wcsb.api.dict.service.DictService; import com.gustz.dove.api.service.util.CommConstants; import com.sinovatech.rd.wcsb.repo.app.AppConstants; import com.sinovatech.rd.wcsb.repo.app.dao.ClientAppDao; import com.sinovatech.rd.wcsb.repo.app.po.ClientAppPo; import com.sinovatech.rd.wcsb.repo.dict.DictConstants; /** * * TODO: 客户端应用服务接口的实现 * * @author ZHENFENG ZHANG * @since [Jan 19, 2015] */ @Service public class ClientAppServiceImpl extends AbstractDataService<ClientAppVo, ClientAppPo, String> implements ClientAppService { @Autowired private SqlDao sqlDao; private ClientAppDao dao; private final Lock lock = new ReentrantLock(); @Autowired private DictService dictService; @Autowired public void needDao(ClientAppDao dao) { super.setDao(dao); this.dao = dao; } @Override public String getId(ClientAppVo vo) { return vo.getId(); } /** * 保存 * * @param vo * @return */ @Override public String save(ClientAppVo vo) { ClientAppPo _po = this.vo2Po(vo); _po.setIsDelete(CommConstants.NO); _po.setCreateTime(new Date()); _po.setStatus(AppConstants.StatusGc.S1.name()); try { // APP编码 _po.setCliAppCode(AppConstants.getCliAppCode(vo.getAccountCode())); // APP密码 _po.setCliAppPwd(AppConstants.getCliAppPwd(vo.getAccountCode())); } catch (Exception e) { throw new IllegalStateException(e); } return this.dao.save(_po); } /** * 更新 * * @param vo */ @Override public void update(ClientAppVo vo) { ClientAppPo _newPo = this.vo2Po(vo); // 页面新值 ClientAppPo _oldPo = this.dao.get(vo.getId()); // 数据库旧值 //不能改变的值 _newPo.setCreateTime(_oldPo.getCreateTime()); _newPo.setIsDelete(CommConstants.NO); _newPo.setCliAppPwd(_oldPo.getCliAppPwd()); _newPo.setAccountCode(_oldPo.getAccountCode()); _newPo.setCliAppCode(_oldPo.getCliAppCode()); _newPo.setStatus(_oldPo.getStatus()); this.dao.update(_newPo); } /** * 批量删除字典组别 * * @param ids */ @Override public void batchDelete(Iterable<String> ids) { for (String _id : ids) { ClientAppPo _po = this.dao.get(_id); _po.setIsDelete(CommConstants.YES); this.dao.update(_po); } } /** * 查询全部 * * @param search * @return */ @Override public List<ClientAppVo> listAll(ClientAppVo search) { QueryInfo info = this.prepareQuery(search).build(); // List<ClientAppVo> _list = sqlDao.listAll(info.getSql(), ClientAppVo.class, info.getParArr()); return _list; } /** * 分页查询 * * @param search * @param start * @param limit * @param orders * @return */ @Override public List<ClientAppVo> ecList(ClientAppVo search, int start, int limit, List<Order> orders) { QueryInfo queryInfo = prepareQuery(search).order(orders).build(); // List<ClientAppVo> _list = sqlDao.list(queryInfo.getSql(), start, limit, ClientAppVo.class, queryInfo.getParArr()); if (_list != null && _list.size() > 0) { for (ClientAppVo vo : _list) { this.setDict(vo); } } return _list; } /** * 查询总记录数 * * @param search * @return */ @Override public int ecCount(ClientAppVo search) { QueryInfo queryInfo = prepareQuery(search).build(); // return sqlDao.count(queryInfo.getCountSql(), queryInfo.getParArr()); } private QueryInfoBuilder prepareQuery(ClientAppVo search) { String hql = "select t.*,t1.ACCOUNT_NAME,t1.WEC_APP_ID,t1.WEC_APP_SECRET from WCSB_CLIENT_APP t,WCSB_ACCOUNT t1 where t.ACCOUNT_CODE=t1.ACCOUNT_CODE "; QueryInfoBuilder builder = QueryInfoBuilder.ins(hql) // .andEq("t.IS_DELETE", CommConstants.NO) // .andEq("t.CLI_APP_CODE", search.getCliAppCode()) // 编码 .andContains("t.CLI_APP_CODE", search.getCliAppCodeLk()) // // .andContains("t.CLI_APP_NAME", search.getCliAppName()) // 名称 .andIn("t.WEBS_CODES", search.getWebsCodesIn()) // 服务编码集 .andEq("t.STATUS", search.getStatus()) // 状态 .andIn("t.STATUS", search.getStatusIn()) // 状态多个 .andEq("t.ACCOUNT_CODE", search.getAccountCode()) // 账号 .andEq("t.IS_REPLY_MSG", search.getIsReplyMsg()) // .andEq("t1.IS_DELETE", CommConstants.NO) // .andEq("t1.STATUS", DictConstants.RunStateGc.S0.name()) // 账户状态:S0已启用 // .orderDesc("t.CREATE_TIME"); return builder; } private void setDict(ClientAppVo vo) { // 是否回复 vo.setIsReplyMsgText(dictService.text(DictConstants.YnTypeGc.COMM_YN_TYPE, vo.getIsReplyMsg())); // 状态 vo.setStatusText(dictService.text(AppConstants.StatusGc.APP_STATUS, vo.getStatus())); } /** * 改变状态 * * @param id * @param status */ @Override public void chgStatus(String id, String status) { lock.lock(); try { ClientAppPo po = this.dao.get(id); // S1停用 S99接入 if (AppConstants.StatusGc.S1.name().equals(status) || AppConstants.StatusGc.S99.name().equals(status)) { po.setStatus(AppConstants.StatusGc.S0.name()); } else { po.setStatus(AppConstants.StatusGc.S1.name()); } this.dao.update(po); } finally { lock.unlock(); } } /** * 改变为开发接入状态 * * @param id */ @Override public void chgDevStatus(String id) { ClientAppPo po = this.dao.get(id); po.setStatus(AppConstants.StatusGc.S99.name()); this.dao.update(po); } /** * 获取有效的客户端应用名称 * * @return key=CliAppCode value=cliAppName */ @Override public Map<String, String> getActiCliAppName() { Map<String, String> _map = new HashMap<String, String>(); // List<ClientAppVo> _appMap = this.listAll(new ClientAppVo(null, AppConstants.StatusGc.S0.name())); for (ClientAppVo vo : _appMap) { _map.put(vo.getCliAppCode(), vo.getCliAppName()); } return _map; } }