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<WfDefDao, WfDef> {
|
@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<WfDef> wfDefList(QueryFilter queryFilter) {
|
List<WfDef> wfDef = wfDefDao.wfDefList(queryFilter.getQueryParams());
|
return wfDef;
|
}
|
|
public List<WfDef> getFlowList() {
|
return wfDefDao.getFlowList();
|
}
|
|
public List<WfDefStep> getFlowStepList(String flowId) {
|
return wfDefDao.getFlowStepList(flowId);
|
}
|
|
public WfDef getFlowStatusJson(String flowCode, Long bizId) {
|
Map<String, Object> params = new HashMap<String, Object>();
|
params.put("projectId", 10000);
|
params.put("diagramId", 10000);
|
List<WfDef> 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<WfDef> wfDefList = wfDefDao.wfDefList2(params);
|
WfDef wfDef = new WfDef();
|
if (wfDefList.size() > 0) {
|
wfDef = wfDefList.get(0);
|
Map<String, WfRunTask> 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;
|
}
|
}
|