package cn.com.goldenwater.dcproj.service.impl.mend; import cn.com.goldenwater.dcproj.constValue.SplitValue; import cn.com.goldenwater.dcproj.dao.BisInspPblmPlistDao; import cn.com.goldenwater.dcproj.model.*; import cn.com.goldenwater.dcproj.param.BisInspLocalConfigParam; import cn.com.goldenwater.dcproj.param.BisInspPblmPlistParam; import cn.com.goldenwater.dcproj.service.*; import cn.com.goldenwater.dcproj.util.CheckUtil; import cn.com.goldenwater.target.CheckException; import com.workflow.bpm.api.bpmservices.ActionConstant; import com.workflow.bpm.api.bpmservices.BpmProcessInstService; import com.workflow.bpm.api.bpmservices.BpmTaskService; import com.workflow.bpm.api.bpmservices.co.processinstance.ProcessStartCO; import com.workflow.bpm.api.bpmservices.co.taskinst.QueryTaskActionCO; import com.workflow.common.struct.res.impl.APIResult; import org.apache.commons.collections.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author lhc * @date 2020-11-4 */ @Service @Transactional public class BisInspPblmPlistFormServiceImpl implements BisInspPblmPlistFormService { @Autowired private BisInspPblmPlistService plistService; @Autowired private DicService dicService; @Autowired private BpmProcessInstService bpmProcessInstService; @Autowired private BpmTaskService bpmTaskService; @Autowired private BisInspBpmOrgService bisInspBpmOrgService; @Autowired private BisInspPblmPlistDao bisInspPblmPlistDao; @Autowired private BisInspLocalConfigService bisInspLocalConfigService; private Logger logger = LoggerFactory.getLogger(getClass()); @Override public boolean saveFormsAndStartFlow(BisInspPblmPlistFormDTO form, String userId, String orgId, String province) { // 获取工作流对应类型,如果没有配置则返回失败 BisInspBpmOrg bisInspBpmOrg = getBpmCode(province, form.getPblmPlist().getPblmClassify()); CheckUtil.notNull(bisInspBpmOrg, "发起流程失败,请联系管理员配置流程:13401079738 "); BisInspPblmPlist bisInspPblmPlist = plistService.get(form.getPblmPlist().getId()); CheckUtil.notNull(bisInspPblmPlist, "数据异常!"); CheckUtil.check(!"1".equals(bisInspPblmPlist.getIsStart()), "工作流已经启动,请勿重复启动!"); CheckUtil.check(!"1".equals(bisInspPblmPlist.getPblmOut()), "整改问题已销号!"); form.getPblmPlist().setIsStart("1"); if (null == form.getPblmPlist().getPblmCrtm()) { //当前时间加一个月 Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, 1); form.getPblmPlist().setPblmCrtm(cal.getTime()); } plistService.update(form.getPblmPlist()); ProcessStartCO processStartCO = new ProcessStartCO(); processStartCO.setBizKey(form.getPblmPlist().getId()); processStartCO.setFormUrl("pdcApi/bis/insp/pblm/plist/form/" + form.getPblmPlist().getId()); processStartCO.setProcessName(getBpmName(form)); processStartCO.setProcessTypeCode(bisInspBpmOrg.getBpmCode()); // 根据当前用户所属省份和督查类型 取出对应工作流 id processStartCO.setTenantId("1"); processStartCO.setUserId(userId); processStartCO.setProvince(province); processStartCO.setCompleteFirstTaskFlag(true); Map sendVar = new HashMap<>(); sendVar.put("sendVar", "city"); sendVar.put("sendBus", "1"); logger.info("------------------------BisInspPblmPlistFormServiceImpl:province:" + province + "------------------------------"); if (province.equals("370000000000")) { if (null == form.getPblmPlist().getProvincial()) { sendVar.put("sendLocal", "fzg"); } else { logger.info("------------------------BisInspPblmPlistFormServiceImpl:getProvincial:" + form.getPblmPlist().getProvincial() + "------------------------------"); //判断是否省属工程 if (form.getPblmPlist().getProvincial().equals("1")) { logger.info("------------------------BisInspPblmPlistFormServiceImpl:getProvincial:province------------------------------"); //是省属工程,直接转发到省级单位整改 sendVar.put("sendLocal", "province"); } else { //非直管县 logger.info("------------------------BisInspPblmPlistFormServiceImpl:getProvincial:fzg------------------------------"); sendVar.put("sendLocal", "fzg"); } } } else { logger.info("------------------------BisInspPblmPlistFormServiceImpl:province:<>37-----------------------------"); if (isLocalAd(form.getPblmPlist().getObjAdCode())) { //直管县 sendVar.put("sendLocal", "zg"); } else { //非直管县 sendVar.put("sendLocal", "fzg"); } } sendVar.put("sendSpc", "spc");// 山东省 --监督处是否专家审核 processStartCO.setVariables(sendVar); //直管县 名称要去掉直管层级,设置参数如果是直管县,设置参数直接走到县反馈,后续继续审核 整改 APIResult apiResult = bpmProcessInstService.startProcInst(processStartCO, userId, orgId); if (apiResult.isRetStatus()) { return true; } else { throw new CheckException("发起流程失败!"); } } /** * 是否直管县 * * @param objAdCode * @return */ public Boolean isLocalAd(String objAdCode) { BisInspLocalConfigParam bisInspLocalConfigParam = new BisInspLocalConfigParam(); bisInspLocalConfigParam.setAdCode(objAdCode); List bisInspLocalConfigs = bisInspLocalConfigService.findList(bisInspLocalConfigParam); if (bisInspLocalConfigs != null && bisInspLocalConfigs.size() > 0) { return true; } else { return false; } } public String getBpmName(BisInspPblmPlistFormDTO form) { String nameString = "督查整改-"; logger.info("获取工作流名称前:" + form.getPblmPlist().toString()); if (form.getPblmPlist().getPblmAdName().contains(SplitValue.HENG_SPLIT)) { String[] split = form.getPblmPlist().getPblmAdName().split(SplitValue.HENG_SPLIT); if (split.length == 3) { form.getPblmPlist().setProvince(split[0]); form.getPblmPlist().setCity(split[1]); form.getPblmPlist().setCounty(split[2]); } if (split.length == 2) { form.getPblmPlist().setProvince(split[0]); form.getPblmPlist().setCity(split[1]); } if (split.length == 1) { form.getPblmPlist().setProvince(split[0]); form.getPblmPlist().setCity(""); } } //获取对象所属行政区代码 String objAdCode = form.getPblmPlist().getObjAdCode(); //查询此行政是否是直辖县 nameString = nameString + form.getPblmPlist().getProvince(); if (isLocalAd(form.getPblmPlist().getObjAdCode())) { if (form.getPblmPlist().getCounty() != null) { nameString = nameString + "-" + form.getPblmPlist().getCounty(); } if (null != form.getPblmPlist().getInspPblmDesc()) { nameString = nameString + "-" + form.getPblmPlist().getObjName() + ":" + form.getPblmPlist().getInspPblmDesc(); } else { nameString = nameString + "-" + form.getPblmPlist().getObjName(); } } else { if (null != form.getPblmPlist().getCity()) { nameString = nameString + "-" + form.getPblmPlist().getCity(); } if (null != form.getPblmPlist().getCounty()) { nameString = nameString + "-" + form.getPblmPlist().getCounty(); } if (null != form.getPblmPlist().getInspPblmDesc()) { nameString = nameString + "-" + form.getPblmPlist().getObjName() + ":" + form.getPblmPlist().getInspPblmDesc(); } else { nameString = nameString + "-" + form.getPblmPlist().getObjName(); } } logger.info("获取工作流名称后:" + nameString); return nameString; } @Override public void allStartup(BisInspPblmPlistParam bisInspPblmPlistParam, Map params) { List list = this.bisInspPblmPlistDao.sendOrgGetList(bisInspPblmPlistParam); if (list == null || list.size() == 0) { return; } for (BisInspPblmPlist bisInspPblmPlist : list) { // // 已启动的整改,直接跳过 if ("1".equals(bisInspPblmPlist.getIsStart())) { continue; } if (bisInspPblmPlist.getPblmAdName().contains(SplitValue.HENG_SPLIT)) { String[] split = bisInspPblmPlist.getPblmAdName().split(SplitValue.HENG_SPLIT); if (split.length == 3) { bisInspPblmPlist.setProvince(split[0]); bisInspPblmPlist.setCity(split[1]); bisInspPblmPlist.setCounty(split[2]); } if (split.length == 2) { bisInspPblmPlist.setProvince(split[0]); bisInspPblmPlist.setCity(split[1]); } if (split.length == 1) { bisInspPblmPlist.setProvince(split[0]); bisInspPblmPlist.setCity(""); } } BisInspPblmPlistFormDTO formDTO = new BisInspPblmPlistFormDTO(); formDTO.setPblmPlist(bisInspPblmPlist); // 发起流程 saveFormsAndStartFlow(formDTO, MapUtils.getString(params, "persId"), MapUtils.getString(params, "orgId"), MapUtils.getString(params, "province")); } } public BisInspBpmOrg getBpmCode(String province, String ptype) { BisInspBpmOrg bisInspBpmOrg = bisInspBpmOrgService.getBpmCodeBypp(province, ptype); return bisInspBpmOrg; } @Override public boolean submitForm(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendVar = new HashMap<>(); sendVar.put("sendSpc", "zj");// 山东省 --监督处发专家 task.setVariables(sendVar); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean backwardForm(BisInspPblmPlistFormDTO form, String userId, String orgId) { QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_BACK); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean feedbackForm(BisInspPblmPlistFormDTO form, String userId, String orgId) { form.getPblmPlist().setIsRect("1");//是否反馈 plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean feedbackCityForm(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendVar = new HashMap<>(); sendVar.put("sendVar", "city"); task.setVariables(sendVar); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendCountyForm(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); Map sendVar = new HashMap<>(); sendVar.put("sendVar", "county"); task.setVariables(sendVar); task.setActionType(ActionConstant.ACTION_SUBMIT); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendProvinceForm(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); Map sendVar = new HashMap<>(); sendVar.put("sendLocal", "province"); task.setVariables(sendVar); task.setActionType(ActionConstant.ACTION_SUBMIT); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean complete(BisInspPblmPlistFormDTO form, String userId, String orgId) { form.getPblmPlist().setPblmOut("1");//已销号 plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); Map sendVar = new HashMap<>(); sendVar.put("sendSpc", "xh");// 山东省 --监督处直接销号 task.setVariables(sendVar); task.setActionType(ActionConstant.ACTION_SUBMIT); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean holdSave(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); return true; } @Override public BisInspPblmPlist getProblemListInfo(String plistId) { return plistService.get(plistId); } @Override public Map getPblmClassifyMap(List businessKeys) { if (businessKeys == null || businessKeys.size() == 0) { return new HashMap<>(); } return bisInspPblmPlistDao.getPblmClassifyMap(businessKeys); } @Override public boolean sendBuild(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "build"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendRunMgr(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "runmgr"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendFloods(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "floods"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendWater(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "water"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendSupervise(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "supervise"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendSouth(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "south"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendLakes(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "lakes"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } @Override public boolean sendPermissions(BisInspPblmPlistFormDTO form, String userId, String orgId) { plistService.update(form.getPblmPlist()); QueryTaskActionCO task = form.getQueryTaskActionCO(); task.setActionType(ActionConstant.ACTION_SUBMIT); Map sendBus = new HashMap<>(); sendBus.put("sendBus", "permissions"); task.setVariables(sendBus); task.setClaimTaskDirectExeFlag(true); APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId); return apiResult.isRetStatus(); } }