package com.terra.system.service.show; import com.terra.common.entity.all.StaticData; import com.terra.system.entity.ctrl.DownloadReqEntity; import com.terra.system.entity.data.MetaEntity; import com.terra.system.entity.show.ApplyEntity; import com.terra.system.entity.show.FlowEntity; import com.terra.system.entity.sys.UserEntity; import com.terra.system.helper.AesHelper; import com.terra.common.helper.StringHelper; import com.terra.system.mapper.show.ApplyMapper; import com.terra.system.service.data.MetaService; import com.terra.system.service.sys.UserService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.annotation.Resource; import org.springframework.stereotype.Service; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 数据申请 * @author WWW */ @Service public class ApplyService implements ApplyMapper { @Resource ApplyMapper applyMapper; @Resource FlowService flowService; @Resource UserService userService; @Resource MetaService metaService; @Resource DataLibService dataLibService; private final static Log log = LogFactory.getLog(ApplyService.class); @Override public Integer selectCount(String uname, Integer status, Timestamp start, Timestamp end) { uname = StringHelper.getLikeUpperStr(uname); return applyMapper.selectCount(uname, status, start, end); } @Override public List selectByPage(Integer userid, String uname, Integer status, Timestamp start, Timestamp end, Integer limit, Integer offset) { uname = StringHelper.getLikeUpperStr(uname); return applyMapper.selectByPage(userid, uname, status, start, end, limit, offset); } @Override public List selectAll() { return applyMapper.selectAll(); } @Override public ApplyEntity selectById(int id) { return applyMapper.selectById(id); } @Override public UserEntity selectUserByDepcode(String depcode) { return applyMapper.selectUserByDepcode(depcode); } @Override public Integer selectSubmits(Integer userid) { return applyMapper.selectSubmits(userid); } @Override public List selectFlows(Integer applyid) { return applyMapper.selectFlows(applyid); } @Override public Integer insert(ApplyEntity entity) { return applyMapper.insert(entity); } @Override public Integer inserts(List list) { return applyMapper.inserts(list); } @Override public Integer delete(int id) { return applyMapper.delete(id); } @Override public Integer deletes(List ids) { return applyMapper.deletes(ids); } @Override public Integer update(ApplyEntity entity) { return applyMapper.update(entity); } @Override public Integer updates(List list) { return applyMapper.updates(list); } @Override public Integer updateForDiscard(Integer userid, Integer id) { return applyMapper.updateForDiscard(userid, id); } @Override public Integer updateForResubmit(Integer userid, Integer id) { return applyMapper.updateForResubmit(userid, id); } @Override public Integer updateForSubmit(Integer userid, Integer applyid, Integer flowId) { return applyMapper.updateForSubmit(userid, applyid, flowId); } @Override public Integer updateForReject(Integer userid, Integer applyid, Integer flowId) { return applyMapper.updateForReject(userid, applyid, flowId); } /** * 插入数据申请 */ public Integer insertApply(UserEntity ue, DownloadReqEntity dr) throws Exception { ApplyEntity apply = getApplyEntity(ue, dr); int rows = applyMapper.insert(apply); if (0 == rows) { return 0; } List list = getFlowEntities(apply.getId(), ue, dr); if (list.isEmpty()) { applyMapper.delete(apply.getId()); throw new Exception("找不到待审核人"); } return flowService.inserts(list); } /** * 获取数据申请实体类 */ private ApplyEntity getApplyEntity(UserEntity ue, DownloadReqEntity dr) throws Exception { // String dbPwd = Md5Helper.reverse(Md5Helper.generate(dr.getPwd())) String aesPwd = AesHelper.encrypt(dr.getPwd()); String gids = null == dr.getIds() || dr.getIds().isEmpty() ? null : StringHelper.join(dr.getIds(), ","); ApplyEntity apply = new ApplyEntity(); apply.setUserid(ue.getId()); apply.setDepids(StringHelper.join(dr.getDepcodes(), ",")); apply.setTabs(getTabs(dr)); apply.setEntities(StringHelper.join(dr.getEntities(), ",")); apply.setWkt(dr.getWkt()); apply.setPwd(aesPwd); apply.setStatus(0); apply.setCount(dr.getDepcodes().size()); apply.setDescr(dr.getDescr()); apply.setCreateUser(ue.getId()); apply.setDepcode(dr.getDepcode()); apply.setDircodes(dr.getDirs()); apply.setGids(gids); apply.setFilters(dr.getFilter()); return apply; } /** * 获取表名 */ private String getTabs(DownloadReqEntity dr) { if (!StaticData.SYS_META.equals(dr.getEntities().get(0))) { return StringHelper.join(dr.getTabs(), ","); } List list = metaService.selectMetaFiles(dr.getIds()); if (null == list || list.isEmpty()) { return "元数据表"; } StringBuilder sb = new StringBuilder(); for (MetaEntity me : list) { sb.append(me.getName()).append(","); if (sb.length() > StaticData.I1000) { break; } } if (sb.length() > 1) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } /** * 获取申请流程实体类集合 */ private List getFlowEntities(Integer applyId, UserEntity ue, DownloadReqEntity dr) { List list = new ArrayList<>(); for (String depcode : dr.getDepcodes()) { UserEntity user = selectUserByDepcode(depcode); if (null == user) { user = userService.selectByUid(StaticData.ADMIN); } FlowEntity flow = new FlowEntity(); flow.setApplyid(applyId); flow.setDepcode(depcode); flow.setUserid(user.getId()); flow.setStatus(0); flow.setDescr(null); flow.setCreateUser(ue.getId()); list.add(flow); } return list; } /** * 打包DB数据 */ public void zipDbData(UserEntity ue, ApplyEntity entity) { try { List entities = Arrays.asList(entity.getEntities().split(StaticData.COMMA)); String pwd = AesHelper.decrypt(entity.getPwd()); DownloadReqEntity dr = new DownloadReqEntity(); dr.setEntities(entities); dr.setWkt(dr.getWkt()); dr.setPwd(pwd); dr.setDepcode(entity.getDepcode()); dr.setDirs(entity.getDircodes()); dr.setIds(getIds(entity.getGids())); dr.setFilter(entity.getFilters()); String guid = StaticData.SYS_META.equals(entity.getEntities()) ? metaService.downloadMeteReq(ue, dr) : dataLibService.downloadDbReq(ue, dr); if (!StringHelper.isEmpty(guid)) { entity.setGuid(guid); update(entity); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } } /** * 获取ID集合 */ private List getIds(String gids) { if (StringHelper.isEmpty(gids)) { return null; } List list = new ArrayList<>(); for (String str : gids.split(StaticData.COMMA)) { list.add(Integer.parseInt(str)); } return list; } }