package com.goafanti.order.service.impl; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.mail.MessagingException; import com.goafanti.common.dao.*; import org.apache.commons.collections4.map.HashedMap; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.goafanti.common.bo.EmailBo; import com.goafanti.common.bo.Error; import com.goafanti.common.bo.OrderOperator; import com.goafanti.common.bo.UserOrderTask; import com.goafanti.common.bo.paymentNodeEmailBo; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.constant.ErrorConstants; import com.goafanti.common.enums.ChannelStatus; import com.goafanti.common.enums.NoticeStatus; import com.goafanti.common.enums.OrderLogProcess; import com.goafanti.common.error.BusinessException; import com.goafanti.common.model.Admin; import com.goafanti.common.model.BusinessProject; import com.goafanti.common.model.Notice; import com.goafanti.common.model.OrganizationContactBook; import com.goafanti.common.model.OrganizationIdentity; import com.goafanti.common.model.ProjcetCheckLog; import com.goafanti.common.model.TArrearsDun; import com.goafanti.common.model.TOrderBonus; import com.goafanti.common.model.TOrderLog; import com.goafanti.common.model.TOrderMid; import com.goafanti.common.model.TOrderNew; import com.goafanti.common.model.TOrderTask; import com.goafanti.common.model.TTaskHours; import com.goafanti.common.model.TTaskLog; import com.goafanti.common.model.TTaskMid; import com.goafanti.common.model.TaskAttributionLog; import com.goafanti.common.model.TaskHoursCount; import com.goafanti.common.model.TaskLog; import com.goafanti.common.model.TaskProgress; import com.goafanti.common.model.TaskProgressLog; import com.goafanti.common.model.UserBusiness; import com.goafanti.common.model.UserChannel; import com.goafanti.common.model.UserLockRelease; import com.goafanti.common.utils.AsyncUtils; import com.goafanti.common.utils.DateUtils; import com.goafanti.common.utils.LoggerUtils; import com.goafanti.common.utils.SendEmailUtil; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.bo.OutNewOrderDunBo; import com.goafanti.order.bo.OutProjectCheck; import com.goafanti.order.bo.OutProjectCheckLog; import com.goafanti.order.bo.OutTaskProgressLog; import com.goafanti.order.bo.TOrderTaskBo; import com.goafanti.order.bo.TOrderTaskDetailBo; import com.goafanti.order.bo.TOrderTaskListBo; import com.goafanti.order.bo.TaskLogBo; import com.goafanti.order.bo.TaskProgressBo; import com.goafanti.order.bo.UpdateProjectStatusBo; import com.goafanti.order.bo.inuptTaskHoursListBo; import com.goafanti.order.bo.inuptTaskListBo; import com.goafanti.order.bo.managerListBo; import com.goafanti.order.bo.taskAttributionLogBo; import com.goafanti.order.controller.InputProjectCheck; import com.goafanti.order.enums.BonusSubject; import com.goafanti.order.enums.NewOrderDunType; import com.goafanti.order.enums.NewProjectStatus; import com.goafanti.order.enums.OrderDunProjectType; import com.goafanti.order.enums.ProcessStatus; import com.goafanti.order.service.OrderNewService; import com.goafanti.order.service.OrderProjectService; import com.goafanti.organization.bo.OutPaymentNode; import com.goafanti.techproject.enums.TaskState; @Service public class OrderProjectServiceImpl extends BaseMybatisDao implements OrderProjectService { @Autowired private TOrderTaskMapper tOrderTaskMapper; @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private TTaskHoursMapper tTaskHoursMapper; @Autowired private TOrderBonusMapper tOrderBonusMapper; @Autowired private TTaskLogMapper tTaskLogMapper; @Autowired private TOrderLogMapper tOrderLogMapper; @Autowired private TaskProgressMapper taskProgressMapper; @Autowired private TaskProgressLogMapper taskProgressLogMapper; @Autowired private OrganizationContactBookMapper organizationContactBookMapper; @Autowired private OrganizationIdentityMapper organizationIdentityMapper; @Autowired private TaskLogMapper taskLogMapper; @Autowired private OrderNewService orderNewService; @Autowired private TaskHoursCountMapper taskHoursCountMapper; @Autowired private AdminMapper adminMapper; @Autowired private BusinessProjectMapper businessProjectMapper; @Autowired private NewOrderDunMapper newOrderDunMapper; @Autowired private TOrderMidMapper tOrderMidMapper; @Autowired private TArrearsDunMapper tArrearsDunMapper; @Autowired private PaymentNodeMapper paymentNodeMapper; @Autowired private TTaskMidMapper tTaskMidMapper; @Autowired private UserMapper userMapper; @Autowired private UserLockReleaseMapper userLockReleaseMapper; @Autowired private UserBusinessMapper userBusinessMapper; @Autowired private UserChannelMapper userChannelMapper; @Autowired private TaskAttributionLogMapper taskAttributionLogMapper; @Autowired private ProjcetCheckLogMapper projcetCheckLogMapper; @Autowired private TOrderPaymentMapper tOrderPaymentMapper; @Autowired private PublicReleaseMapper publicReleaseMapper; @Autowired private AsyncUtils asyncUtils; @Value(value = "${upload.path}") private String uploadPath = null; Logger logger = LoggerFactory.getLogger(OrderProjectServiceImpl.class); @Override public int updateProjectDistribution(Integer taskId, String taskReceiverId,String remarks,Integer type) { TOrderTask t=tOrderTaskMapper.selectByPrimaryKey(taskId); TOrderNew tn=checkDeleteSign(t.getOrderNo()); Date date=new Date(); t.setTaskStatus(TaskState.DISTRIBUTION.getCode()); t.setTaskAllocator(TokenManager.getAdminId()); t.setTaskReceiver(taskReceiverId); t.setTaskDistributionTime(date); Admin a=adminMapper.selectByPrimaryKey(taskReceiverId); insetLog(taskId, taskReceiverId); addtaskAttributionLog(taskId,taskReceiverId,remarks,type,date); if (a==null||a.getId()==null) { throw new BusinessException(new Error("分配人员不存在!","分配人员不存在!")); } if (type==0) { addOrderLog(t.getOrderNo(), OrderLogProcess.XMDDPD.getCode(),remarks); t.setManagerId(taskReceiverId); t.setConsultantId(null); //设置催款触发 orderNewService.pushOrderDun(t.getOrderNo()); //未锁定客户就锁定客户 pushUser(t, tn, date); }else if(type==1) { t.setManagerId(taskReceiverId); t.setConsultantId(null); }else if(type==2) { addOrderLog(t.getOrderNo(), OrderLogProcess.XMJLPD.getCode(),remarks); t.setConsultantId(taskReceiverId); }else if(type==4) { t.setConsultantId(null); } t.setReceiverName(a.getName()); tOrderTaskMapper.updateByPrimaryKey(t); List aids = new ArrayList<>(); aids.add(taskReceiverId); orderNewService.pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_TASK_TO.getCode(),t.getOrderNo(), TokenManager.getAdminId(),0); checkProjiectAllocation(t.getOrderNo()); return 1; } /** * 推动客户、业务渠道的锁定 * @param t * @param tn * @param date */ private void pushUser(TOrderTask t, TOrderNew tn, Date date) { if (userMapper.checkLock(tn.getBuyerId())<1) { userLockReleaseMapper.updateByAidAndUid(tn.getSalesmanId(),tn.getBuyerId()); userMapper.updateShareType(tn.getBuyerId(),tn.getSalesmanId()); } //未锁定业务就锁定业务 if (userLockReleaseMapper.checkLock(tn.getSalesmanId(),tn.getBuyerId(),t.getCommodityId())<1) { UserLockRelease ulr=new UserLockRelease(); ulr.setId(UUID.randomUUID().toString()); ulr.setBusinessProjectId(t.getCommodityId()); ulr.setType(1); ulr.setUid(tn.getBuyerId()); ulr.setAid(tn.getSalesmanId()); ulr.setStatus(0); ulr.setLockTime(date); userLockReleaseMapper.insertSelective(ulr); } UserBusiness ub=new UserBusiness(); ub.setId(UUID.randomUUID().toString()); ub.setUid(tn.getBuyerId()); ub.setAid(tn.getSalesmanId()); ub.setFollowSituation(5); ub.setCustomerStatus(4); ub.setCreateTime(date); ub.setUpdateTime(date); ub.setRemarks("派单自动锁定客户"); ub.setBusinessProjectId(t.getCommodityId()); userBusinessMapper.insertSelective(ub); //如果是渠道客户更新渠道表 UserChannel uc=new UserChannel(); uc.setUid(tn.getBuyerId()); uc.setStatus(ChannelStatus.YQD.getCode()); uc.setSignTime(date); userChannelMapper.updateByUid(uc); //标记最新的打卡 publicReleaseMapper.updateSignByAidAndUid(tn.getBuyerId(),tn.getSalesmanId()); } private void addtaskAttributionLog(Integer taskId, String taskReceiverId, String remarks, Integer type, Date date) { TaskAttributionLog log=new TaskAttributionLog(taskId,TokenManager.getAdminId(),taskReceiverId,remarks,type,date); taskAttributionLogMapper.insertSelective(log); } public TOrderNew checkDeleteSign(String orderNo) { TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo); if(t.getDeleteSign()==2||t.getDeleteSign()==3) throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, t.getOrderNo(),"")); return t; } public void addOrderLog(String orderNo, Integer code,String remarks) { TOrderLog tl=new TOrderLog(); tl.setOrderNo(orderNo); tl.setProcess(code); tl.setAid(TokenManager.getAdminId()); if(null!=remarks)tl.setRemarks(remarks); tOrderLogMapper.insertSelective(tl); } public void checkProjiectAllocation(String orderNo) { List taskBos=tOrderTaskMapper.selectOrderTask(orderNo); TOrderNew tNew=new TOrderNew(); tNew.setOrderNo(orderNo); int i=0; for (TOrderTaskBo to : taskBos) { if (to.getTaskStatus()>TaskState.UN_DISTRIBUTION.getCode()&&to.getTaskStatus()0&&i orderTaskList(inuptTaskListBo ib) { Map params = new HashMap(); if(ib.getPageSize()==null||ib.getPageSize()<0)ib.setPageSize(10); if(ib.getPageNo()==null||ib.getPageNo()<0)ib.setPageNo(1); params.put("outsource", ib.getOutsource()==null?0:ib.getOutsource()); if (null!=ib.getSpecially()) params.put("specially", ib.getSpecially()); if (StringUtils.isNotBlank(ib.getName())) params.put("name", ib.getName()); if (StringUtils.isNotBlank(ib.getDepId())) params.put("depId", ib.getDepId()); if (StringUtils.isNotBlank(ib.getOrderNo())) params.put("orderNo", ib.getOrderNo()); if (StringUtils.isNotBlank(ib.getContractNo())) params.put("contractNo", ib.getContractNo()); if (ib.getProjectStatus() !=null ) params.put("projectStatus", ib.getProjectStatus()); if (StringUtils.isNotBlank(ib.getTaskId())) params.put("taskId", ib.getTaskId()); if (ib.getApproval() !=null) params.put("approval", ib.getApproval()); if (StringUtils.isNotBlank(ib.getAdminName())) params.put("adminName", ib.getAdminName()); if (StringUtils.isNotBlank(ib.getStartTime())) params.put("startTime", ib.getStartTime()); if (StringUtils.isNotBlank(ib.getEndTime())) params.put("endTime", ib.getEndTime()); if (null != ib.getTaskStatus()) params.put("taskStatus", ib.getTaskStatus()); if (ib.getOutsourceStatus() !=null) params.put("outsourceStatus", ib.getOutsourceStatus()); List fids=new ArrayList<>(); if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN) ||TokenManager.hasRole(AFTConstants.SUPERADMIN)|| TokenManager.hasRole(AFTConstants.CED)||TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)|| TokenManager.hasRole(AFTConstants.VICE_CEO)) { params.put("role", 2); }else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) { params.put("role", 1); fids =adminMapper.selectBySuperId(TokenManager.getAdminId()); params.put("fids",fids); }else if (TokenManager.hasRole(AFTConstants.FINANCE)) { params.put("role", 1); fids.add(TokenManager.getAdminId()); params.put("fids",fids); } else { params.put("role", 0); params.put("aid", TokenManager.getAdminId()==null?"1":TokenManager.getAdminId()); } Pagination p = (Pagination)findPage("selectOrderTaskListByPage", "selectOrderTaskListCount", params, ib.getPageNo(), ib.getPageSize()); List list=(List) p.getList(); for (TOrderTaskListBo t : list) { if(t.getSplitStatus()==1) { List l=splitProjectList(t.getId()); t.setSplitList(l); } } return p; } @Override public TOrderTaskDetailBo orderTaskDetail(String id) { TOrderTaskDetailBo t=tOrderTaskMapper.getOrderTaskDetail(id); if (TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.APPROVAL_DECISION) ||TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)||TokenManager.hasRole(AFTConstants.TECH_ADMIN) ||TokenManager.getAdminId().equals(t.getTaskReceiver())) { return t; }else { t.setOutsourceName("****"); t.setOutsourcePrice("****"); t.setDeclareUser("****"); t.setDeclarePwd("****"); t.setCertificateNumber("****"); return t; } } @Override @Transactional public int updateOrderTask(TOrderTaskDetailBo t) { TOrderTask task=new TOrderTask(); TOrderNew tn=checkDeleteSign(t.getOrderNo()); task.setAttachmentUrl(t.getAttachmentUrl()); task.setId(Integer.valueOf(t.getId())); task.setTaskComment(t.getTaskComment()); task.setCertificateNumber(t.getCertificateNumber()); task.setStatus(t.getStatus()); task.setFormRetrieve(t.getFormRetrieve()); task.setTaskRefund(t.getTaskRefund()); task.setRefundContent(t.getRefundContent()); task.setRetrieveContent(t.getRetrieveContent()); task.setDeclareUser(t.getDeclareUser()); task.setDeclarePwd(t.getDeclarePwd()); task.setArrivalMoney(t.getArrivalMoney()); task.setSetUpAmount(t.getSetUpAmount()); task.setOutsourceName(t.getOutsourceName()); task.setDeclarationBatch(t.getDeclarationBatch()); task.setSetUpStatus(t.getSetUpStatus()); if(t.getSetUpTime()!=null)task.setSetUpTime(DateUtils.StringToDate(t.getSetUpTime(), AFTConstants.YYYYMMDD)); task.setSpotCheckStatus(t.getSpotCheckStatus()); task.setHighTechStatus(t.getHighTechStatus()); task.setSpecialComment(t.getSpecialComment()); if(StringUtils.isNotBlank(t.getOutsourcePrice()))task.setOutsourcePrice(new BigDecimal(t.getOutsourcePrice())); if (t.getIfCertificationFee()!=null&&t.getIfCertificationFee()==1) { task.setCertificationCorporate(t.getCertificationCorporate()); task.setCertificationFee(t.getCertificationFee()); } //根据修改的修改订单法人与联系人 if(StringUtils.isNotEmpty(t.getContacts()))tn.setContacts(t.getContacts()); if(StringUtils.isNotEmpty(t.getContactMobile())) tn.setContactMobile(t.getContactMobile()); if(StringUtils.isNotEmpty(t.getLegalPerson()))tn.setLegalPerson(t.getLegalPerson()); if(StringUtils.isNotEmpty(t.getLegalPersonTel()))tn.setLegalPersonTel(t.getLegalPersonTel()); tOrderNewMapper.updateByPrimaryKeySelective(tn); //修改公司地址信息 if (null!=t.getLocationProvince()||null!=t.getLocationArea()||null!=t.getLocationCity()||null!=t.getPostalAddress()) { OrganizationIdentity org=new OrganizationIdentity(); org.setUid(tn.getBuyerId()); org.setLocationProvince(t.getLocationProvince()); org.setLocationArea(t.getLocationArea()); org.setLocationCity(t.getLocationCity()); org.setPostalAddress(t.getPostalAddress()); organizationIdentityMapper.updateServiceByUid(org); } //修改公司联系人 int adcount=organizationContactBookMapper.checkContacts(tn.getBuyerId(), t.getContactMobile(),tn.getSalesmanId()); if (StringUtils.isNotBlank(t.getContacts())&&StringUtils.isNotBlank(t.getContactMobile())&&adcount<1) { OrganizationContactBook contactBook=new OrganizationContactBook(); contactBook.setId(UUID.randomUUID().toString()); contactBook.setAid(tn.getSalesmanId()); contactBook.setUid(tn.getBuyerId()); contactBook.setName(t.getContacts()); contactBook.setMobile(t.getContactMobile()); organizationContactBookMapper.insertSelective(contactBook); } //新增结算奖金信息 checkSettlementAward(tn,task); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { if(StringUtils.isNotBlank(t.getStartDate()))task.setTaskStartTime(sdf.parse(t.getStartDate())); if(StringUtils.isNotBlank(t.getEndDate()))task.setTaskEndTime(sdf.parse(t.getEndDate())); if(StringUtils.isNotBlank(t.getAcceptDate()))task.setAcceptTime(sdf.parse(t.getAcceptDate())); if(StringUtils.isNotBlank(t.getReviewDate()))task.setReviewTime(sdf.parse(t.getReviewDate())); if(StringUtils.isNotBlank(t.getPublicityDate()))task.setPublicityTime(sdf.parse(t.getPublicityDate())); if(StringUtils.isNotBlank(t.getLicenceDate()))task.setLicenceTime(sdf.parse(t.getLicenceDate())); } catch (ParseException e) { e.printStackTrace(); } tOrderTaskMapper.updateByPrimaryKeySelective(task); //订单中间表修改 if (t.getUrgentDay()!=null||t.getIfMaterial()!=null||t.getRejectCount()!=null|| t.getAcceptCount()!=null||t.getAuthorizeCount()!=null) { TTaskMid tm=new TTaskMid(); tm.setTid(task.getId()); tm.setUrgentDay(t.getUrgentDay()); tm.setIfMaterial(t.getIfMaterial()); tm.setRejectCount(t.getRejectCount()); tm.setAcceptCount(t.getAcceptCount()); tm.setAuthorizeCount(t.getAuthorizeCount()); tTaskMidMapper.updateByTid(tm); } TaskLog tl=new TaskLog(); tl.setCreateTime(new Date()); tl.setTaskId(t.getId()); tl.setAid(TokenManager.getAdminId()); //项目触发发催款 return 1; } public int updateProjectStatus(UpdateProjectStatusBo b) { TOrderTask t=new TOrderTask(); t.setId(b.getTid()); t.setProjectStatus(b.getProjectStatus()); t.setTimeRecord(b.getTimeRecord()); t.setCertificateNumber(b.getCertificateNumber()); t.setSetUpAmount(b.getSetUpAmount()); TOrderTask task2=tOrderTaskMapper.selectByPrimaryKey(b.getTid());//查询出项目信息 if(b.getProjectStatus()!=task2.getProjectStatus()){ if(b.getProjectStatus()==NewProjectStatus.YLX.getCode()) t.setSetUpStatus(1); if(b.getProjectStatus()==NewProjectStatus.YNGS.getCode()) t.setSetUpStatus(1); tOrderTaskMapper.updateByPrimaryKeySelective(t); projectSplitPush(b.getTid(), b.getProjectStatus(),task2); pushTaskLog(b.getTid(), b.getProjectStatus()); } return 1; } private void pushTaskLog(Integer tid,Integer projectStatus) { TaskLog tl = new TaskLog(); tl.setCreateTime(new Date()); tl.setTaskId(tid); tl.setAid(TokenManager.getAdminId()); StringBuffer s = new StringBuffer("项目状态修改为:"); s.append(NewProjectStatus.getValueByCode(projectStatus)); tl.setContent(s.toString()); taskLogMapper.insertSelective(tl); } private void projectSplitPush(Integer tid, Integer projectStatus,TOrderTask task2) { //0否 1父拆分 2子拆分 如果没有拆分 if (task2.getSplitStatus()==0) { pushOrderDunAndPaymentNode(tid,projectStatus,task2); //如果是子项目 }else if (task2.getSplitStatus()==2){ //查出父项目 List list=tOrderTaskMapper.splitProjectList(task2.getSplitSuper()); //设置一个比较大的流程数字,然后取最小的 Integer i=28; for (TOrderTaskListBo tt : list) { if (tt.getProjectStatus() list=newOrderDunMapper.selectByTid(tid); for (OutNewOrderDunBo ob : list) { if (ob!=null) { boolean flag=false; if((ob.getProjectType()==OrderDunProjectType.CGZH.getCode()&&ob.getDunType()==2&&//成果转化 验收 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.COMMON.getCode()&&ob.getDunType()==2&&//通用 公示 projectStatus==NewProjectStatus.YTJ.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.COMMON.getCode()&&ob.getDunType()==3&&//通用 下证 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.KJXM.getCode()&&ob.getDunType()==2&&//科技项目 立项或者公示 projectStatus==NewProjectStatus.YLX.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.KJXM.getCode()&&ob.getDunType()==3&&//科技项目 拨款 projectStatus==NewProjectStatus.LXYBK.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.KJJR.getCode()&&ob.getDunType()==2&&//科技金融 拨款 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.RJKF.getCode()&&ob.getDunType()==2&&//软件开发 立项 projectStatus==NewProjectStatus.YTJ.getCode()))flag=true; else if((ob.getProjectType()==OrderDunProjectType.RJKF.getCode()&&ob.getDunType()==3&&//软件开发 验收 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; else if(ob.getProjectType()==OrderDunProjectType.ZSCQ.getCode()){//知识产权 公示 专利受理、转让(项目已提交),软著下证 if(ob.getDunType()==3&&projectStatus==NewProjectStatus.YWCXZ.getCode()) { flag=true; }else if (ob.getDunType()==2) { BusinessProject bp=businessProjectMapper.selectByPrimaryKey(task2.getCommodityId()); if (bp.getType()==0&&projectStatus==NewProjectStatus.YWCXZ.getCode()) { flag=true; } if (bp.getType()==1&&projectStatus==NewProjectStatus.YTJ.getCode()) { flag=true; } if (bp.getType()==2&&projectStatus==NewProjectStatus.YWCXZ.getCode()) { flag=true; } } }else if(ob.getProjectType()==OrderDunProjectType.GX.getCode()) { if (ob.getDunType()==2&&projectStatus>=NewProjectStatus.YNGS.getCode() &&projectStatus<=NewProjectStatus.YXZ.getCode()) { flag=true; } else if (ob.getDunType()==3&&projectStatus==NewProjectStatus.YXZ.getCode()){ flag=true; } } if(flag) { //如果启动催款,则新增欠款与应收款 tOrderMidMapper.addOrderReceivables(task2.getOrderNo(), ob.getMoney()); TOrderMid tm=tOrderMidMapper.selectByOrderNo(task2.getOrderNo()); TArrearsDun td=new TArrearsDun(); td.setOrderArrears(tm.getOrderArrears()); td.setOrderReceivables(tm.getOrderReceivables()); if (tArrearsDunMapper.checkOrderNo(task2.getOrderNo(),null)<1) { td.setOrderNo(task2.getOrderNo()); tArrearsDunMapper.insertSelective(td); }else if(tArrearsDunMapper.checkOrderNo(task2.getOrderNo(),0)>0){ Integer i=tArrearsDunMapper.selectByStatus(task2.getOrderNo(), 0); td.setId(i); tArrearsDunMapper.updateByPrimaryKeySelective(td); } orderNewService.addNewDunNoticAndSendEmail(task2.getOrderNo(),ob); ob.setStatus(1); ob.setStartTime(new Date()); newOrderDunMapper.updateByPrimaryKeySelective(ob); } } } List list2=paymentNodeMapper.selectByTid(tid,0); for (OutPaymentNode op : list2) { if (op!=null) { boolean flag=false; if((op.getProjectType()==OrderDunProjectType.CGZH.getCode()&&op.getDunType()==2&&//成果转化 验收 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.COMMON.getCode()&&op.getDunType()==2&&//通用 公示 projectStatus==NewProjectStatus.YTJ.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.COMMON.getCode()&&op.getDunType()==3&&//通用 下证 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.KJXM.getCode()&&op.getDunType()==2&&//科技项目 立项或者公示 projectStatus==NewProjectStatus.YLX.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.KJXM.getCode()&&op.getDunType()==3&&//科技项目 拨款 projectStatus==NewProjectStatus.LXYBK.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.KJJR.getCode()&&op.getDunType()==2&&//科技金融 拨款 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.RJKF.getCode()&&op.getDunType()==2&&//软件开发 立项 projectStatus==NewProjectStatus.YTJ.getCode()))flag=true; if((op.getProjectType()==OrderDunProjectType.RJKF.getCode()&&op.getDunType()==3&&//软件开发 验收 projectStatus==NewProjectStatus.YWCXZ.getCode()))flag=true; if(op.getProjectType()==OrderDunProjectType.ZSCQ.getCode()){//知识产权 公示 专利受理、转让(项目已提交),软著下证 if(op.getDunType()==3&&projectStatus==NewProjectStatus.YWCXZ.getCode()) { flag=true; }else if (op.getDunType()==2) { BusinessProject bp=businessProjectMapper.selectByPrimaryKey(task2.getCommodityId()); if (bp.getType()==0&&projectStatus==NewProjectStatus.YWCXZ.getCode()) { flag=true; } if (bp.getType()==1&&projectStatus==NewProjectStatus.YTJ.getCode()) { flag=true; } if (bp.getType()==2&&projectStatus==NewProjectStatus.YWCXZ.getCode()) { flag=true; } } } if(flag)addNoticAndEmail( op,NoticeStatus.PAYMENT_DUN.getCode()); } } } public void addNoticAndEmail(OutPaymentNode pn,Integer type) { paymentNodeEmailBo pnb=paymentNodeMapper.selectBytidGetEmail(pn.getTid()); String str=NoticeStatus.getValueByCode(type)+": 订单编号 -"+pnb.getOrderNo()+", 操作人:平台超管中心-管理员。"; Notice n =new Notice(); n.setId(UUID.randomUUID().toString()); n.setAid(pnb.getSalesmanId()); n.setNoticeType(type); n.setContent(str); n.setReaded(0);//未读 asyncUtils.addNotice(n); pn.setDunStatus(1); paymentNodeMapper.updateByPrimaryKeySelective(pn); //营销员名称、邮箱、订单编号、客户名称 String dunTypeName=NewOrderDunType.getValueByCode(Integer.valueOf(""+pn.getProjectType()+pn.getDunType())); //发送驳回邮件 if(SendEmailUtil.isEmail(pnb.getEmail())) { EmailBo bo = new EmailBo("付款通知", pnb.getEmail(), "平台超管中心", "管理员", "", pnb.getOrderNo(),pnb.getContractNo(),pn.getPartyTimes(), dunTypeName,pnb.getSalesmanName(),pnb.getUserName(),2,0); if(StringUtils.isNotBlank(pnb.getEmail())) { try { asyncUtils.patentSend(bo); } catch (UnsupportedEncodingException | MessagingException e) { LoggerUtils.debug(logger, "=========================================发送邮件异常"); e.printStackTrace(); } } } } private void checkSettlementAward(TOrderNew tn,TOrderTask task) { if(task.getTaskStatus()==TaskState.COMPLETE.getCode()&&tn.getTotalAmount().compareTo(tn.getSettlementAmount())==0) { List l = tOrderTaskMapper.getReceiverByOid(tn.getOrderNo()); for (TOrderTask tOrderTask : l) { if(null != tOrderTask &&null != tOrderTask.getTaskReceiver()){ TOrderBonus bonus = new TOrderBonus(); bonus.setId(UUID.randomUUID().toString()); bonus.setOrderNo(tn.getOrderNo()); bonus.setGrantBy(tn.getFinanceId()); bonus.setBonusSubject(BonusSubject.WK.getCode());//12 bonus.setTaskId(tOrderTask.getId());//任务id bonus.setGrantTarget(tOrderTask.getTaskReceiver()); bonus.setGrantType(1); int c = tOrderBonusMapper.checkByOnoAndSub(bonus); //不存在就设置 if(c==0){ bonus.setId(UUID.randomUUID().toString()); tOrderBonusMapper.insertSelective(bonus); } } } } } private void meanwhileUpdateOrder(TOrderTask task) { //是否是主要项目 if (task.getMain()==1) { //更改订单项目状态 TOrderNew tNew = new TOrderNew(); tNew.setProjectStatus(task.getProjectStatus()); tNew.setOrderNo(task.getOrderNo()); tOrderNewMapper.updateByPrimaryKeySelective(tNew); } if (task.getProjectStatus()==NewProjectStatus.YTJ.getCode()||task.getProjectStatus()==NewProjectStatus.YLX.getCode()|| task.getProjectStatus()==NewProjectStatus.YNGS.getCode()) { TOrderBonus tb=new TOrderBonus(); TOrderNew t=tOrderNewMapper.selectByPrimaryKey(task.getOrderNo()); tb.setId(UUID.randomUUID().toString()); tb.setOrderNo(task.getOrderNo()); if (task.getProjectStatus()==NewProjectStatus.YTJ.getCode()) { tb.setBonusSubject(21);//项目已提交 addOrderLog(task.getOrderNo(),OrderLogProcess.XMWC.getCode(),null); } if (task.getProjectStatus()==NewProjectStatus.YLX.getCode())tb.setBonusSubject(23);//项目立项 if (task.getProjectStatus()==NewProjectStatus.YNGS.getCode())tb.setBonusSubject(24);//项目公示 tb.setGrantType(1);//技术员 //新增奖金之前检查这个奖金数据是否存在 tb.setGrantTarget(task.getTaskReceiver()); int c = tOrderBonusMapper.checkByOnoAndSub(tb); if(c==0){ tb.setGrantBy(t.getFinanceId()); tb.setTaskId(task.getId()); tOrderBonusMapper.insertSelective(tb); } } } @Override public int addTaskHours(TTaskHours t) { TOrderTask tt=tOrderTaskMapper.selectByPrimaryKey(Integer.valueOf(t.getTaskId())); checkDeleteSign(tt.getOrderNo()); t.setAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId()); t.setId(UUID.randomUUID().toString()); t.setCreateTime(new Date()); if(taskHoursCountMapper.selectByAidAndTid(TokenManager.getAdminId(),t.getTaskId())>0) { taskHoursCountMapper.updateByAidAndTid(TokenManager.getAdminId(),t.getTaskId(),t.getHours()); }else { TaskHoursCount tc=new TaskHoursCount(); tc.setAid(TokenManager.getAdminId()); tc.setTid(Integer.valueOf(t.getTaskId())); tc.setHours(t.getHours()); taskHoursCountMapper.insertSelective(tc); } return tTaskHoursMapper.insertSelective(t); } @SuppressWarnings("unchecked") @Override public Pagination taskHoursList(inuptTaskHoursListBo ib, Integer pageNo, Integer pageSize) { Map params = new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; if (StringUtils.isNotBlank(ib.getName())) params.put("name", ib.getName()); if (StringUtils.isNotBlank(ib.getOrderNo())) params.put("orderNo", ib.getOrderNo()); if (StringUtils.isNotBlank(ib.getTaskId())) params.put("taskId", ib.getTaskId()); if (StringUtils.isNotBlank(ib.getStarTime())) params.put("starTime", ib.getStarTime()); if (StringUtils.isNotBlank(ib.getEndTime())) params.put("endTime", ib.getEndTime()+" 23:59:59"); if(StringUtils.isNotBlank(ib.getContractNo()))params.put("contractNo", ib.getContractNo()); if(StringUtils.isNotBlank(ib.getDepId()))params.put("depId", ib.getDepId()); if(StringUtils.isNotBlank(ib.getCid()))params.put("cid", ib.getCid()); if(null!=ib.getOutsource())params.put("outsource", ib.getOutsource()); Integer i=null; if (TokenManager.hasRole(AFTConstants.FINANCE))i=1; if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER))i=2; if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)|| TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CED)|| TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))i=3; if(TokenManager.getAdminId()!=null)params.put("aid", TokenManager.getAdminId()); if(i!=null)params.put("shiroType", i); Pagination p = (Pagination)findPage("selectTaskHoursListByPage", "selectTaskHoursListCount", params, pageNo, pageSize); return p; } @SuppressWarnings("unchecked") @Override public Pagination selectTaskList(String name, String orderNo, String taskId, Integer taskStatus, String adminName, Integer specially,String depId , Integer pageNo, Integer pageSize) { Map params = new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; params.put("aid", TokenManager.getAdminId()==null?"":TokenManager.getAdminId()); if (StringUtils.isNotBlank(name)) params.put("name", name); if (StringUtils.isNotBlank(depId)) params.put("depId", depId); if (StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo); if (StringUtils.isNotBlank(taskId)) params.put("taskId", taskId); if (StringUtils.isNotBlank(adminName)) params.put("adminName", adminName); if (null != taskStatus) params.put("taskStatus", taskStatus); Pagination p = (Pagination)findPage("selectTaskListByPage", "selectTaskListCount", params, pageNo, pageSize); return p; } @Override public List TaskLogList(Integer id) { return taskLogMapper.selectTaskLogList(id); } @Override public int createTaskProgress(TaskProgressBo t) { TaskProgress tp=new TaskProgress(); TOrderTask tt=tOrderTaskMapper.selectByPrimaryKey(t.getTaskId()); int count =taskProgressMapper.AlreadyNuberCount(t.getTaskId()); count +=t.getAlreadyNumber(); if(tt.getCommodityQuantity() selectTaskProgress(Integer tid) { List l=taskProgressMapper.selectTaskProgress(tid); int notcount=0; for (TaskProgressBo t : l) { notcount+=t.getAlreadyNumber(); t.setNotCount(t.getIngCount()-notcount); } return l; } @Override public List taskHoursDetailsList(String taskId) { String aid=TokenManager.getAdminId(); return tTaskHoursMapper.taskHoursDetailsList(taskId,aid); } @Override public int pushSplitProject(Integer tid, String splitList) { String[] str=splitList.split(","); TOrderTask task=tOrderTaskMapper.selectByPrimaryKey(tid); checkDeleteSign(task.getOrderNo()); TOrderTask usedTask=new TOrderTask(); usedTask.setId(tid); usedTask.setSplitStatus(1); //计算拆分数量 Integer x=0; for (String string : str) { x+=Integer.parseInt(string); } if (!task.getCommodityQuantity().equals(x)||str.length==1) { return -1; } tOrderTaskMapper.updateByPrimaryKeySelective(usedTask); int i=1; TOrderTask newTask=task; newTask.setCommodityPrice(new BigDecimal(0)); newTask.setSplitAid(TokenManager.getAdminId()); newTask.setSplitStatus(2); newTask.setSplitSuper(tid); newTask.setSplitTime(new Date()); for (String string : str) { newTask.setId(null); newTask.setCommodityQuantity(Integer.parseInt(string)); newTask.setSplitId(i); i++; tOrderTaskMapper.insertSelectiveGetId(newTask); TTaskMid tm=new TTaskMid(newTask.getId(),null); tTaskMidMapper.insertSelective(tm); } return 1; } @Override public List splitProjectList(Integer tid) { return tOrderTaskMapper.splitProjectList(tid); } @Override public List selectTaskProgressLog(Integer tid) { return taskProgressLogMapper.selectTaskProgressLog(tid); } @Override public Pagination managerSelect(String name, String orderNo, String contractNo, String cid, String projectType, String depId, String techDepId, Integer declarationBatch, String commodityPrice, String startTime,String endTime ,Integer pageNo, Integer pageSize) { Map params = new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; params.put("aid", TokenManager.getAdminId()==null?"":TokenManager.getAdminId()); if (StringUtils.isNotBlank(name))params.put("name", name); else params.put("name", ""); if (StringUtils.isNotBlank(depId)) params.put("depId", depId); if (StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo); if (StringUtils.isNotBlank(contractNo)) params.put("contractNo", contractNo); if (StringUtils.isNotBlank(cid)) params.put("cid", cid); if (StringUtils.isNotBlank(projectType)) params.put("projectType", projectType); if (StringUtils.isNotBlank(depId)) params.put("depId", depId); if (StringUtils.isNotBlank(techDepId)) params.put("techDepId", techDepId); if (StringUtils.isNotBlank(commodityPrice)) params.put("commodityPrice", commodityPrice); if (StringUtils.isNotBlank(startTime)) params.put("startTime", startTime); if (StringUtils.isNotBlank(endTime)) params.put("endTime", endTime+" 23:59:59"); if (null != declarationBatch) params.put("declarationBatch", declarationBatch); @SuppressWarnings("unchecked") Pagination p = (Pagination)findPage("managerSelectByPage", "managerSelectCount", params, pageNo, pageSize); return p; } @Override public List taskAttributionLog(Integer tid) { return taskAttributionLogMapper.selectByTid(tid); } @Override public List selectUidByproject(String uid) { return tOrderTaskMapper.selectUidByproject(uid); } @Override public int addProjectCheck(Integer tid) { TOrderTask t=new TOrderTask(); t.setCheckStatus(1); t.setId(tid); ProjcetCheckLog log=new ProjcetCheckLog(); log.setAid(TokenManager.getAdminId()); log.setRemarks("发起核对"); log.setTid(tid); log.setStatus(0); OrderOperator oo=tOrderTaskMapper.selectAidByParam(tid); if (oo!=null&&oo.getOrderNo()!=null&&oo.getSalesmanId()!=null) { Notice n =new Notice(); String str=String.format("[%s]发起项目核对,订单编号[%s]项目编号[%s]。", oo.getTechName(),oo.getOrderNo(),oo.getTid()); n.setId(UUID.randomUUID().toString()); n.setAid(oo.getSalesmanId()); n.setNoticeType(NoticeStatus.ITEM_CHECK_START.getCode()); n.setContent(str); n.setReaded(0);//未读 asyncUtils.addNotice(n); } projcetCheckLogMapper.insertSelective(log); tOrderPaymentMapper.deleteByParam(tid,2); return tOrderTaskMapper.updateByPrimaryKeySelective(t); } @Override public List projectCheckLog(Integer tid) { return projcetCheckLogMapper.projectCheckLog(tid); } @SuppressWarnings("unchecked") @Override public Object selectProjectCheck(InputProjectCheck in) { Map map=new HashedMap(); if (in.getName()!=null) map.put("name", in.getName()); if (in.getOrderNo()!=null) map.put("orderNo", in.getOrderNo()); if (in.getContractNo()!=null) map.put("contartNo", in.getContractNo()); if (in.getPname()!=null) map.put("pname", in.getPname()); if (in.getDepId()!=null) map.put("depId", in.getDepId()); map.put("aid", TokenManager.getAdminId()); return (Pagination)findPage("selectProjectCheck", "countProjectCheck", map, in.getPageNo(), in.getPageSize()); } }