package cn.com.lzt.maintainbill.service.impl; import cn.com.lzt.common.util.DictUtil; import cn.com.lzt.maintainbill.dao.MaintainBillDao; import cn.com.lzt.maintainbill.entity.MaintainBillEntity; import cn.com.lzt.maintainbill.service.MaintainBillServiceI; import cn.com.lzt.maintainplan.entity.MaintainPlanEntity; import cn.com.lzt.maintainplantimes.entity.MaintainPlanTimesEntity; import cn.com.lzt.message.send.entity.MMessageEntity; import cn.com.lzt.message.send.entity.MessageWxTemplateConfig; import cn.com.lzt.message.send.service.MMessageSendServiceI; import cn.com.lzt.useractiviti.data.service.UseractivitiDataServiceI; import com.xcgl.projecttask.entity.ProjecttaskEntity; import com.xcgl.projecttask.service.ProjecttaskServiceI; import com.xcgl.taskplatform.dao.TaskPlatformDao; import com.xcgl.taskplatform.service.TaskServiceI; import com.xcgl.taskresult.entity.TaskResultEntity; import com.xcgl.utils.XcglConstant; import org.apache.commons.collections.list.SetUniqueList; import org.apache.commons.lang3.StringUtils; import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.*; import org.jeecgframework.p3.core.common.utils.DateUtil; import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter; import org.jeecgframework.web.system.pojo.base.TSUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.*; @Service("maintainBillService") @Transactional public class MaintainBillServiceImpl extends CommonServiceImpl implements MaintainBillServiceI { @Autowired TaskPlatformDao taskPlatformDao; @Autowired TaskServiceI taskService; @Autowired MaintainBillDao billdao; @Autowired ProjecttaskServiceI projecttaskService; @Autowired UseractivitiDataServiceI useractivitiDataService; @Autowired MMessageSendServiceI mMessageSendService; public void delete(MaintainBillEntity entity) throws Exception{ super.delete(entity); //执行删除操作增强业务 this.doDelBus(entity); } public ProjecttaskEntity saveAndGenTask(MaintainBillEntity entity) throws Exception{ Serializable s = save(entity); ProjecttaskEntity task = taskService.createTask(entity); return task; } public Serializable save(MaintainBillEntity entity) throws Exception{ //如果编码为空,则按照编码规则设置默认编码(编码可编辑) if(StringUtil.isEmpty(entity.getCode())) { entity.setCode(com.xcgl.utils.OrderNumTools.generateNextBillCode(getMaxLocalCode("t_b_maintain_bill"),Globals.CODE_PREFIX_MAINTAINBILL,4)); } //设置项目负责人 Map leader = findProjectLeader(entity.getProjectid()); if(leader.size() == 1) { for(java.util.Map.Entry en:leader.entrySet()) { entity.setTaskuserid(en.getKey()); entity.setTaskusername(en.getValue()); } } // 设置合同信息 /*Map contract = findContract(entity); if (contract.size() == 1) { for(java.util.Map.Entry en:contract.entrySet()) { entity.setContractid(en.getKey()); entity.setContractname(en.getValue()); } }*/ entity.setCreateDate(new Date()); Serializable t = super.save(entity); //执行新增操作增强业务 this.doAddBus(entity); return t; } public void saveOrUpdate(MaintainBillEntity entity) throws Exception{ super.saveOrUpdate(entity); //执行更新操作增强业务 this.doUpdateBus(entity); } /** * 新增操作增强业务 * @param t * @return */ private void doAddBus(MaintainBillEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } /** * 更新操作增强业务 * @param t * @return */ private void doUpdateBus(MaintainBillEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } /** * 删除操作增强业务 * @return */ private void doDelBus(MaintainBillEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } private Map populationMap(MaintainBillEntity t){ Map map = new HashMap(); map.put("id", t.getId()); map.put("create_name", t.getCreateName()); map.put("create_by", t.getCreateBy()); map.put("create_date", t.getCreateDate()); map.put("update_name", t.getUpdateName()); map.put("update_by", t.getUpdateBy()); map.put("update_date", t.getUpdateDate()); map.put("sys_org_code", t.getSysOrgCode()); map.put("sys_company_code", t.getSysCompanyCode()); map.put("bpm_status", t.getBpmStatus()); map.put("name", t.getName()); map.put("code", t.getCode()); map.put("servicedate", t.getServicedate()); map.put("projectid", t.getProjectid()); map.put("projectname", t.getProjectname()); map.put("servicetypedetail", t.getServicetypedetail()); map.put("projectservcieid", t.getProjectserviceid()); map.put("projectservicename", t.getProjectservicename()); map.put("relatedunitid", t.getRelatedunitid()); map.put("relatedunitname", t.getRelatedunitname()); map.put("step_name", t.getStepName()); map.put("proc_inst_id", t.getProcInstId()); map.put("description", t.getDescription()); map.put("sourcetype", t.getSourcetype()); map.put("score", t.getScore()); map.put("averaged", t.getAveraged()); map.put("valuate", t.getValuate()); map.put("busistatus", t.getBusistatus()); map.put("taskuserid", t.getTaskuserid()); map.put("taskusername", t.getTaskusername()); map.put("contractid", t.getContractid()); map.put("contractname", t.getContractname()); return map; } /** * 替换sql中的变量 * @param sql * @param t * @return */ public String replaceVal(String sql,MaintainBillEntity t){ sql = sql.replace("#{id}",String.valueOf(t.getId())); sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName())); sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy())); sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate())); sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName())); sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy())); sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate())); sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode())); sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode())); sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus())); sql = sql.replace("#{name}",String.valueOf(t.getName())); sql = sql.replace("#{code}",String.valueOf(t.getCode())); sql = sql.replace("#{servicedate}",String.valueOf(t.getServicedate())); sql = sql.replace("#{projectid}",String.valueOf(t.getProjectid())); sql = sql.replace("#{projectname}",String.valueOf(t.getProjectname())); sql = sql.replace("#{servicetypedetail}",String.valueOf(t.getServicetypedetail())); sql = sql.replace("#{projectservcieid}",String.valueOf(t.getProjectserviceid())); sql = sql.replace("#{projectservicename}",String.valueOf(t.getProjectservicename())); sql = sql.replace("#{relatedunitid}",String.valueOf(t.getRelatedunitid())); sql = sql.replace("#{relatedunitname}",String.valueOf(t.getRelatedunitname())); sql = sql.replace("#{step_name}",String.valueOf(t.getStepName())); sql = sql.replace("#{proc_inst_id}",String.valueOf(t.getProcInstId())); sql = sql.replace("#{description}",String.valueOf(t.getDescription())); sql = sql.replace("#{sourcetype}",String.valueOf(t.getSourcetype())); sql = sql.replace("#{score}",String.valueOf(t.getScore())); sql = sql.replace("#{averaged}",String.valueOf(t.getAveraged())); sql = sql.replace("#{valuate}",String.valueOf(t.getValuate())); sql = sql.replace("#{busistatus}",String.valueOf(t.getBusistatus())); sql = sql.replace("#{taskuserid}",String.valueOf(t.getTaskuserid())); sql = sql.replace("#{taskusername}",String.valueOf(t.getTaskusername())); sql = sql.replace("#{contractid}",String.valueOf(t.getContractid())); sql = sql.replace("#{contractname}",String.valueOf(t.getContractname())); sql = sql.replace("#{UUID}",UUID.randomUUID().toString()); return sql; } /** * 执行JAVA增强 */ private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map data) throws Exception { if(StringUtil.isNotEmpty(cgJavaValue)){ Object obj = null; try { if("class".equals(cgJavaType)){ //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断 obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance(); }else if("spring".equals(cgJavaType)){ obj = ApplicationContextUtil.getContext().getBean(cgJavaValue); } if(obj instanceof CgformEnhanceJavaInter){ CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj; javaInter.execute("t_b_maintain_bill",data); } } catch (Exception e) { e.printStackTrace(); throw new Exception("执行JAVA增强出现异常!"); } } } private String getMaxLocalCode(String tablename){ StringBuilder sb = new StringBuilder(); sb.append("SELECT code FROM "); sb.append(tablename); sb.append(" where left(create_date,10) = '"+ DateUtils.date_sdf.format(new Date())+"' "); sb.append(" ORDER BY code DESC"); List> objMapList = findForJdbc(sb.toString(), 1, 1); String returnCode = null; if(objMapList!=null && objMapList.size()>0){ returnCode = (String)objMapList.get(0).get("code"); } return returnCode; } /** * 查询项目负责人 * */ private Map findProjectLeader(String projectid) { Map leader = new HashMap(); List> userList = taskPlatformDao.getUserByProjectAndRoleCode(projectid, Globals.roleCode_ProjectManager); if(userList.size()>0) { leader.put(userList.get(0).get("userid").toString(),userList.get(0).get("realname").toString()); } return leader; } /** * 匹配到合同 * */ private Map findContract(MaintainBillEntity entity) { Map contract = new HashMap(); String sqlContract = "select distinct(con.id),con.name " + "from t_b_contract_item item " + "left join t_b_contract con on item.contractid = con.id " + "where con.projectid =? " + "and item.serviceid =? " + "and con.startdate <=? " + "and con.enddate >=? " + "and con.bpm_status = '3'" + "and con.busstatus <> '9'"; List> contractList = findForJdbc(sqlContract, entity.getProjectid(),entity.getProjectserviceid(),entity.getPlandatestart(),entity.getPlandateend()); if(contractList.size()>0) { contract.put(contractList.get(0).get("id").toString(),contractList.get(0).get("name").toString()); } return contract; } /** * 根据计划,整理出服务记录单数据,然后调用保存方法 * 保存后,自动生成任务 * */ public void genTaskFromPlan() throws Exception{ Calendar c= Calendar.getInstance(); c.add(Calendar.DAY_OF_MONTH,60); String firstDay = DateUtil.formatDateTime(c.getTime(),"yyy-MM-dd")+" 23:59:59"; List billList = billdao.getMaintainBillFromPlan(firstDay,null); String code = getMaxLocalCode("t_b_maintain_bill"); for(MaintainBillEntity entity : billList) { code = com.xcgl.utils.OrderNumTools.generateNextBillCode(code,Globals.CODE_PREFIX_MAINTAINBILL,4); entity.setCode(code); List years = SetUniqueList.decorate(new ArrayList()); List months = SetUniqueList.decorate(new ArrayList()); Date start = entity.getPlandatestart(); Date end = entity.getPlandateend(); Calendar c1 = Calendar.getInstance(); c1.setTime(start); c1.set(Calendar.DAY_OF_MONTH,1); do{ int year = c1.get(Calendar.YEAR); years.add(String.valueOf(year)); months.add(DateUtil.formatDateTime(c1.getTime(),"yyyy-MM")); c1.add(Calendar.MONTH,1); }while(c1.getTime().getTime()<=end.getTime()); entity.setMaintainYear(StringUtils.join(years,",")); entity.setMaintainMonth(StringUtils.join(months,",")); ProjecttaskEntity task = saveAndGenTask(entity); entity.setTaskId(task.getId()); String timeId = entity.getMaintainPlanTimeId(); MaintainPlanTimesEntity timesEntity = getEntity(MaintainPlanTimesEntity.class,timeId); timesEntity.setIsGenTask(Globals.YES); //发消息 String owner = task.getOwner(); TSUser ownerUser = getEntity(TSUser.class, owner); task.setWxMsgTitle(ownerUser.getRealName()+",您有一个维保计划已生成,请及时关注。"); String serviceType = DictUtil.formatToTypeName(entity.getServicetypedetail(),"servicetypedetail"); task.setWxTaskName(ownerUser.getRealName()+","+serviceType+"的维保计划已生成,请查收"); String remark = "发起人:%s\r\n发起时间:%s"; remark = String.format(remark,entity.getCreateName(), DateUtils.formatDate(entity.getCreateDate(),"yyyy-MM-dd HH:mm:ss" )); task.setWxRemark(remark); projecttaskService.sendMsg(task); } } @Override /** * maintainIdStr == null 则为删除支付信息 */ public void updatePaymentInfo(String maintainIdStr,String paymentid) throws Exception { String sql; if(StringUtils.isNotEmpty(maintainIdStr)) { maintainIdStr.replaceAll(",", "','"); maintainIdStr = "'"+maintainIdStr + "'"; sql = " update t_b_maintain_bill set paymentid =? where id in ("+maintainIdStr+")"; }else { sql = " update t_b_maintain_bill set paymentid = null where paymentid =? "; } this.executeSql(sql, paymentid); } public void afterTaskFinish(ProjecttaskEntity task) { TaskResultEntity result ; List list = findByProperty(TaskResultEntity.class, "taskid", task.getId()); if(list.size() > 0) { result = list.get(0); if(task.getTasktype().equals("maintainbill")) { MaintainBillEntity maintain = get(MaintainBillEntity.class, task.getSourceid()); maintain.setScore(result.getTaskObjectScore()); maintain.setValuate(result.getMemo()); maintain.setBusistatus(Globals.MAINTAIN_STATUS_FINISH); maintain.setServicedate(new Date()); } } } @Override public void checkNoContractPlan() { Calendar c =Calendar.getInstance(); c.add(Calendar.MONTH,3); Date findDate = c.getTime(); List list = billdao.findNoContractPlan(findDate); List cgjlList = useractivitiDataService.getUserByDepartIdAndRoleCode(null,Collections.singletonList(Globals.POSITION_TYPE_XZBJL)); TSUser cgjl=null; if(cgjlList.size()>0){ cgjl = cgjlList.get(0); } for(MaintainPlanEntity planEntity :list){ String serviceType = DictUtil.formatToTypeName(planEntity.getServicetype(),"servicetypedetail"); if(cgjl!=null){//采购经理发消息 String first ="%s您好,%s%s计划已生成,但合同未签订,请及时续签。"; first = String.format(first,cgjl.getRealName(),planEntity.getDepName(),serviceType); String remark = "提示"; sendWxMessage(cgjl.getId(),first,first,remark,null); } List managerList = useractivitiDataService.getDepManager(planEntity.getDepartId()); if(managerList.size()>0){ TSUser manager = managerList.get(0); String first ="%s您好,预计%s进行%s,但维保合同未签订。"; first = String.format(first,manager.getRealName(),DateUtils.formatDate(planEntity.getFirstTimeStart(),"yyyy-MM-dd"),serviceType); String remark = "点击查看"; String host = ResourceUtil.getConfigByName(Globals.SERVER_WXMSG); String managerUrl = host+"/maintainPlanController.do?planViewMobile&id="+planEntity.getId(); sendWxMessage(manager.getId(),first,first,remark,managerUrl); } } } @Override public void checkMatchContract() { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK,2); c.set(Calendar.HOUR_OF_DAY,0); c.set(Calendar.MINUTE,0); c.set(Calendar.SECOND,0); c.set(Calendar.MILLISECOND,0); c.add(Calendar.MILLISECOND,-1); Date end =c.getTime(); c.add(Calendar.DAY_OF_MONTH,-7); c.add(Calendar.MILLISECOND,1); Date start = c.getTime(); List> list = billdao.findMatchContract(start,end); if(list.size()>0){ List userList = useractivitiDataService.getUserByDepartIdAndRoleCode(null,Collections.singletonList(Globals.POSITION_TYPE_PZBZY)); if(userList.size()>0){ TSUser user = userList.get(0); String msg = "%s新签订%s合同,可能与该项目%s匹配,请关注。"; for(Map map :list){ String depName = StringUtil.getObject(map.get("dep_name")); String planName = StringUtil.getObject(map.get("planName")); String contractName = StringUtil.getObject(map.get("contractName")); String servicetype =StringUtil.getObject( map.get("servicetype")); servicetype = DictUtil.formatToTypeName(servicetype,"servicetypedetail"); String first = String.format(msg,depName,servicetype,planName); String remark=""; sendWxMessage(user.getId(),first,first,remark,null); } } } } private void sendWxMessage(String userId,String first,String keyword1,String remark,String url){ Map userMsgParms = new HashMap(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); userMsgParms.put("first", first); userMsgParms.put("keyword1", keyword1);//工作内容 userMsgParms.put("keyword2", format.format(new Date()));//创建时间 userMsgParms.put("remark", remark); MessageWxTemplateConfig config = new MessageWxTemplateConfig(); config.setTemplateId(XcglConstant.TEMPLATE_WXMSG_TASK); config.setUserMsgParms(userMsgParms); config.setShowUrl(url!=null); mMessageSendService.sendMessage(Collections.singletonList(userId),url,"","",config,new MMessageEntity.MessageSendWay[]{MMessageEntity.MessageSendWay.wx}); } }