package com.zt.modules.workflowconfig.service; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.zt.common.db.query.QueryFilter; import com.zt.common.service.BaseService; import com.zt.common.utils.JsonUtils2; import com.zt.core.context.UserContext; import com.zt.modules.workflow.model.WfRunTask; import com.zt.modules.workflow.service.WorkflowService; import com.zt.modules.workflowconfig.dao.WfDefDao; import com.zt.modules.workflowconfig.model.WfDef; import com.zt.modules.workflowconfig.model.WfDefStep; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.geom.AffineTransform; import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; @Service public class WfDefService extends BaseService { @Autowired private WfDefDao wfDefDao; @Autowired WorkflowService workflowService; public int listWfDef(Long id) { return wfDefDao.listWfdef(id); } public int listWfDefcode(String code) { return wfDefDao.listWfdefcode(code); } enum StatusEnum {zy, jxz, lq, yq, zcwc, cqwc} String[] fillColorArr = {"#e5e5e5", "#e5e5e5", "#e5e5e5", "#e5e5e5", "#e5e5e5", "#e5e5e5"}; String[] fontColorArr = {"#e5e5e5", "#e5e5e5", "#e5e5e5", "#e5e5e5", "#e5e5e5", "#e5e5e5"}; public List wfDefList(QueryFilter queryFilter) { List wfDef = wfDefDao.wfDefList(queryFilter.getQueryParams()); return wfDef; } public List getFlowList() { return wfDefDao.getFlowList(); } public List getFlowStepList(String flowId) { return wfDefDao.getFlowStepList(flowId); } public WfDef getFlowStatusJson(String flowCode, Long bizId) { Map params = new HashMap(); params.put("projectId", 10000); params.put("diagramId", 10000); List list_style = baseDao.getStyleList(params); if (list_style.size() > 0) { String modelStr = list_style.get(0).getDiagram(); JSONObject modelJson = new JSONObject(modelStr); JSONArray modelJsonArray = modelJson.getJSONArray("cells"); for (int i = 0; i < modelJsonArray.size(); i++ ) { JSONObject jsonObject = modelJsonArray.getJSONObject(i); if (jsonObject.get("shape").equals("custom-circle")) { if ("专业".equals(JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")))) { fillColorArr[StatusEnum.zy.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString(); fontColorArr[StatusEnum.zy.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString(); } if ("进行中".equals(JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")))) { fillColorArr[StatusEnum.jxz.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString(); fontColorArr[StatusEnum.jxz.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString(); } if ("临期".equals(JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")))) { fillColorArr[StatusEnum.lq.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString(); fontColorArr[StatusEnum.lq.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString(); } if ("逾期".equals(JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")))) { fillColorArr[StatusEnum.yq.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString(); fontColorArr[StatusEnum.yq.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString(); } if ("完成".equals(JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")))) { fillColorArr[StatusEnum.zcwc.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString(); fontColorArr[StatusEnum.zcwc.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString(); } if ("超期完成".equals(JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")))) { fillColorArr[StatusEnum.cqwc.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString(); fontColorArr[StatusEnum.cqwc.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString(); } } } } if ("yearPlan".equals(flowCode) || "yearPlan2".equals(flowCode)) params.put("flowCode", "yearPlan"); else params.put("flowCode", flowCode); List wfDefList = wfDefDao.wfDefList2(params); WfDef wfDef = new WfDef(); if (wfDefList.size() > 0) { wfDef = wfDefList.get(0); Map statusMap = new Hashtable<>(); String dialgramJsonStr = wfDef.getDiagram(); { if ("yearPlan".equals(flowCode)) { WfRunTask item_zl = new WfRunTask(); WfRunTask item_cz = new WfRunTask(); int count = baseDao.getRoleCount(UserContext.getUser().getId(), "zlbm"); if (count > 1) { item_zl.setStatus(1); item_cz.setStatus(0); } else { item_zl.setStatus(20); item_cz.setStatus(1); } statusMap.put("yearPlan_zl", item_zl); statusMap.put("yearPlan_cz", item_cz); } else if ("yearPlan2".equals(flowCode)) { WfRunTask item_zl = new WfRunTask(); WfRunTask item_cz = new WfRunTask(); int status = baseDao.getPlanStatus(bizId); if (status == 10) { item_zl.setStatus(20); item_cz.setStatus(20); } else if (status == 5) { item_zl.setStatus(20); item_cz.setStatus(1); } else { item_zl.setStatus(1); item_cz.setStatus(0); } statusMap.put("yearPlan_zl", item_zl); statusMap.put("yearPlan_cz", item_cz); }else { if ("xqzbFlow".equals(flowCode) || "zkxlFlow".equals(flowCode) || "syshFlow".equals(flowCode) || "xjysFlow".equals(flowCode) || "gcbxFlow".equals(flowCode) ) { statusMap = workflowService.getPhaseFlowStatus(flowCode,bizId); } else if ("3".equals(wfDef.getType())) { statusMap = workflowService.getSingleFlowStatus(flowCode, bizId); } else { statusMap = workflowService.getFlowStatus("", bizId); } } int showStatus = 1; JSONObject dialgramJson = new JSONObject(dialgramJsonStr); JSONArray dialgramJsonArray = dialgramJson.getJSONArray("cells"); for (int i = 0; i < dialgramJsonArray.size(); i++ ) { JSONObject jsonObject = dialgramJsonArray.getJSONObject(i); String shape = jsonObject.get("shape").toString(); StatusEnum status = StatusEnum.zy;//StatusEnum.wqd; if (shape.equals("text-block") || shape.equals("custom-polygon")) { Object text = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/")); Object stepMark = JsonUtils2.getJsonValueByPath(jsonObject, "data/stepMarker".split("/")); String receiveName = null; if (text != null && "开始".equals(text)) { status = StatusEnum.zcwc; } else if (stepMark != null && !"".equals(stepMark)) { if (statusMap.get(stepMark) != null) { receiveName = statusMap.get(stepMark).getReceiveName(); showStatus = statusMap.get(stepMark).getStatus(); if (showStatus == 1) status = StatusEnum.lq; else if (showStatus == 20) status = StatusEnum.zcwc; } } else { status = null; } if (status != null) { JsonUtils2.setJsonValueByPath(jsonObject, "attrs/body/fill".split("/"), fillColorArr[status.ordinal()]); JsonUtils2.setJsonValueByPath(jsonObject, "attrs/text/fill".split("/"), fontColorArr[status.ordinal()]); if (receiveName != null) { JsonUtils2.setJsonValueByPath(jsonObject, "data/receiveName".split("/"), receiveName); AffineTransform affinetransform = new AffineTransform(); FontRenderContext frc = new FontRenderContext(affinetransform, true, true); Font font = new Font("Helvetica Neue", Font.PLAIN, 14); JsonUtils2.setJsonValueByPath(jsonObject, "data/tipsWidth".split("/"), (int) font.getStringBounds(receiveName, frc).getWidth()); } } } } wfDef.setDiagram(dialgramJson.toString()); } } return wfDef; } }