|
@@ -1,13 +1,16 @@
|
|
|
package com.persagy.fm.sop.controller;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.persagy.fm.common.response.FmResponseMsg;
|
|
|
import com.persagy.fm.common.response.FmResponseUtil;
|
|
|
-import com.persagy.fm.sop.model.dto.RefSopInfo;
|
|
|
+import com.persagy.fm.sop.model.dto.*;
|
|
|
import com.persagy.fm.sop.model.vo.*;
|
|
|
-import com.persagy.fm.sop.service.GroupSopService;
|
|
|
-import com.persagy.old.common.CommonConst;
|
|
|
-import com.persagy.old.common.ToolsUtil;
|
|
|
+import com.persagy.fm.sop.service.*;
|
|
|
+import com.persagy.old.common.*;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.apache.commons.lang.BooleanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
@@ -15,9 +18,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
@RestController
|
|
|
@RequestMapping("restGroupSopService")
|
|
@@ -29,14 +30,15 @@ public class GroupSopController {
|
|
|
|
|
|
/**
|
|
|
* 集团sop-新增页-添加发布状态sop
|
|
|
- *
|
|
|
+ * <p>
|
|
|
* 重构完成
|
|
|
+ *
|
|
|
* @param saveSopVo
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@PostMapping("/addPublishedSop")
|
|
|
- public FmResponseMsg addPublishedSop(@RequestBody SaveSopVo saveSopVo) throws Exception {
|
|
|
+ public FmResponseMsg addPublishedSop(@RequestBody SaveSopVo saveSopVo) throws Exception {
|
|
|
//设置查询的项目类型为集团类型的
|
|
|
saveSopVo.setProject_id(CommonConst.group_sop_id);
|
|
|
groupSopService.addPublishedSop(saveSopVo);
|
|
@@ -46,14 +48,15 @@ public class GroupSopController {
|
|
|
|
|
|
/**
|
|
|
* 集团sop-新增页-验证sop
|
|
|
- *
|
|
|
+ * <p>
|
|
|
* 重构完成
|
|
|
+ *
|
|
|
* @param saveSopVo
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@PostMapping("/verifySopBeforePublish")
|
|
|
- public FmResponseMsg verifySopBeforePublish(@RequestBody SaveSopVo saveSopVo) throws Exception{
|
|
|
+ public FmResponseMsg verifySopBeforePublish(@RequestBody SaveSopVo saveSopVo) throws Exception {
|
|
|
saveSopVo.setProject_id(CommonConst.group_sop_id);
|
|
|
groupSopService.verifySopForPublish(saveSopVo);
|
|
|
return FmResponseUtil.successMsg("验证成功");
|
|
@@ -61,88 +64,633 @@ public class GroupSopController {
|
|
|
|
|
|
/**
|
|
|
* 集团sop-新增页-添加草稿状态sop
|
|
|
- *
|
|
|
+ * <p>
|
|
|
* 重构完成
|
|
|
+ *
|
|
|
* @param
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@PostMapping("/addDraftSop")
|
|
|
- public String addDraftSop(@RequestBody SaveSopEditVo saveSopEditVo) throws Exception{
|
|
|
+ public String addDraftSop(@RequestBody SaveSopEditVo saveSopEditVo) throws Exception {
|
|
|
saveSopEditVo.setProject_id(CommonConst.group_sop_id);
|
|
|
String sopId = groupSopService.addDraftSop(saveSopEditVo);
|
|
|
Map<String, Object> ret = new HashMap<>();
|
|
|
- ret.put("sop_id",sopId);
|
|
|
+ ret.put("sop_id", sopId);
|
|
|
return ToolsUtil.successJsonMsg(ret);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 集团sop-编辑页-编辑sop时验证sop名称
|
|
|
* 重构完成
|
|
|
+ *
|
|
|
* @param verifySopNameVo
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@PostMapping("/verifySopNameForUpdate")
|
|
|
- public String verifySopNameForUpdate(@RequestBody @Validated VerifySopNameVo verifySopNameVo) throws Exception{
|
|
|
+ public String verifySopNameForUpdate(@RequestBody @Validated VerifySopNameVo verifySopNameVo) throws Exception {
|
|
|
boolean isCan = groupSopService.verifySopBeforePublish(verifySopNameVo);
|
|
|
- return ToolsUtil.successJsonMsg(JSONObject.parseObject("{\"can_use\":"+isCan+"}"));
|
|
|
+ return ToolsUtil.successJsonMsg(JSONObject.parseObject("{\"can_use\":" + isCan + "}"));
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 详细页-查询当前sop被引用的sop列表
|
|
|
* 重构完成
|
|
|
+ *
|
|
|
* @param querySopReferenceVo
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
|
|
|
@PostMapping("/queryReferencedSopListById")
|
|
|
- public String queryReferencedSopListById(@RequestBody QuerySopReferenceVo querySopReferenceVo) throws Exception{
|
|
|
+ public String queryReferencedSopListById(@RequestBody QuerySopReferenceVo querySopReferenceVo) throws Exception {
|
|
|
List<RefSopInfo> refSopInfos = groupSopService.queryReferencedSopListById(querySopReferenceVo);
|
|
|
- return ToolsUtil.successJsonMsg(refSopInfos);
|
|
|
+ return ToolsUtil.successJsonMsg(refSopInfos);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 新增页:查询可供选择的sop,复制、引用时用
|
|
|
+ *
|
|
|
* @param jsonStr
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@PostMapping("/verifySopNameForAdd")
|
|
|
- public String verifySopNameForAdd(@RequestBody VerifySopNameVo verifySopNameVo) throws Exception{
|
|
|
+ public String verifySopNameForAdd(@RequestBody VerifySopNameVo verifySopNameVo) throws Exception {
|
|
|
boolean isCan = groupSopService.verifySopBeforePublish(verifySopNameVo);
|
|
|
- return ToolsUtil.successJsonMsg(JSONObject.parseObject("{\"can_use\":"+isCan+"}"));
|
|
|
+ return ToolsUtil.successJsonMsg(JSONObject.parseObject("{\"can_use\":" + isCan + "}"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 集团sop-编辑页-保存草稿状态sop
|
|
|
+ *
|
|
|
* @param saveSopVo
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@PostMapping("/saveDraftSop")
|
|
|
- public String saveDraftSop(@RequestBody SaveDraftSopVo saveSopVo) throws Exception{
|
|
|
+ public String saveDraftSop(@RequestBody SaveDraftSopVo saveSopVo) throws Exception {
|
|
|
saveSopVo.setProject_id(CommonConst.group_sop_id);
|
|
|
return ToolsUtil.successJsonMsg("");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 新增页:查询可供选择的sop,复制、引用时用
|
|
|
+ * @param jsonStr
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @PostMapping("/querySopListForSel")
|
|
|
+ public String querySopListForSel(@RequestBody QuerySopListForSelVo sopListForSelVo) throws Exception{
|
|
|
+
|
|
|
+ String sopId = sopListForSelVo.getSop_id();
|
|
|
+ String projectId = CommonConst.group_sop_id;
|
|
|
+ String sop_name = sopListForSelVo.getSop_name();
|
|
|
+ //是否返回包含大类对象的sop true:返回 false:不返回 (默认返回)
|
|
|
+ Boolean flag = true;
|
|
|
+ if(BooleanUtils.isFalse(sopListForSelVo.isIs_contains_classObj())) {
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+ //1.根据update和项目id查询
|
|
|
+ List<Sop> sops = queryPublishedSopsByProjectIdAndUpdatetime(sopListForSelVo, projectId);
|
|
|
+ //2筛选sop
|
|
|
+
|
|
|
+ /*
|
|
|
+ removeReviseSop(sops);//已经直接放到sql 语句中查询了
|
|
|
+ if (!jsonObject.getString("project_id").equals(CommonConst.group_sop_id)) {
|
|
|
+ String rootProjFuncType = objectService.queryRootProjFuncTypeById(jsonObject.getString("project_id"));
|
|
|
+ removeWithoutProJFuncType(sops, rootProjFuncType);
|
|
|
+ }
|
|
|
+ */
|
|
|
+ removeRelSop(sops,projectId,sopId);
|
|
|
+
|
|
|
+ if (!flag) {
|
|
|
+ Iterator<Sop> iterator = sops.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ Sop sopItem = iterator.next();
|
|
|
+ if (isContainsClassObj(sopItem)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //sops = filterSopByName(sop_name, sops); 直接在sql 中解决
|
|
|
+ sops = filterSopByFitScope(sopListForSelVo, sops);
|
|
|
+
|
|
|
+ //=========3设置返回字段======
|
|
|
+ sops = additionalSopDetail(sops,jsonObject.getString("project_id"),"2");
|
|
|
+
|
|
|
+ //------------设置过滤项-----
|
|
|
+ if (sopListForSelVo.isNeed_return_criteria()) {
|
|
|
+ JSONObject criteria = getSopListCriteria(sops);
|
|
|
+ item.put("criteria", criteria);
|
|
|
+ }
|
|
|
+ JSONArray content = new JSONArray();
|
|
|
+ for (Object object : sops) {
|
|
|
+ content.add(JSONUtil.getJsonObjectWithKeys((JSONObject)object, querySopListForSel_keys));
|
|
|
+ }
|
|
|
+ item.put("content", content);
|
|
|
+ item.put("count", content.size());
|
|
|
+ return ToolsUtil.successJsonMsg(item);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return groupSopService.querySopListForSel(jsonObject.toJSONString());
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ private JSONObject getSopListCriteria(JSONArray content) throws Exception {
|
|
|
+ // 遍历结果过滤字段、组合返回查询参数
|
|
|
+ JSONObject sopItem, equipModel;
|
|
|
+ JSONObject criteria = new JSONObject();
|
|
|
|
|
|
+ if (content != null) {
|
|
|
+
|
|
|
+ HashMap<String, String> equipModelMap = collectEquipModeFromSops(content);
|
|
|
+ JSONArray equipModels = new JSONArray();
|
|
|
+ for (String equipModelId : equipModelMap.keySet()) {
|
|
|
+ equipModel = new JSONObject();
|
|
|
+ equipModel.put("equip_model_id", equipModelId);
|
|
|
+ equipModel.put("equip_model_name", equipModelMap.get(equipModelId));
|
|
|
+ equipModels.add(equipModel);
|
|
|
+ }
|
|
|
+
|
|
|
+ HashMap<String, Object> fitObjMap = collectFitObjsFromSops(content);
|
|
|
+ JSONArray fitObjs = new JSONArray();
|
|
|
+ for (String fitObjId : fitObjMap.keySet()) {
|
|
|
+ fitObjs.add(fitObjMap.get(fitObjId));
|
|
|
+ }
|
|
|
+
|
|
|
+ HashMap<String, Object> OrderTypeMap = collectOrderTypeFromSops(content);
|
|
|
+ JSONArray orderTypes = new JSONArray();
|
|
|
+ for (String OrderTypeId : OrderTypeMap.keySet()) {
|
|
|
+ orderTypes.add(OrderTypeMap.get(OrderTypeId));
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONArray labels = new JSONArray();
|
|
|
+ for (int i = 0; i < content.size(); i++) {
|
|
|
+ sopItem = content.getJSONObject(i);
|
|
|
+ JSONArray labelsItem = sopItem.getJSONArray("labels");
|
|
|
+ if (labelsItem == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (int j = 0; j < labelsItem.size(); j++) {
|
|
|
+ if (!labels.contains(labelsItem.getString(j))) {
|
|
|
+ labels.add(labelsItem.getString(j));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ HashMap<String, Object> signMap = getBathchMergeRecordBySign(content);
|
|
|
+ JSONArray signs = new JSONArray();
|
|
|
+// signs.addAll(signMap.values());
|
|
|
+ for (String signCode : signMap.keySet()) {
|
|
|
+ signs.add(signMap.get(signCode));
|
|
|
+ }
|
|
|
+ criteria.put("equip_models", equipModels);
|
|
|
+ criteria.put("labels", labels);
|
|
|
+ criteria.put("order_type", orderTypes);
|
|
|
+ criteria.put("fit_objs", fitObjs);
|
|
|
+ criteria.put("signs", signs);
|
|
|
+ }
|
|
|
+
|
|
|
+ return criteria;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SopLabelRelService sopLabelRelService;
|
|
|
+ @Autowired
|
|
|
+ private SopObjRelService sopObjRelService;
|
|
|
+ @Autowired
|
|
|
+ private SopOrderTypeRelService sopOrderTypeRelService;
|
|
|
+ @Autowired
|
|
|
+ private SopEquipModelRelService sopEquipModelRelService;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private List<Sop> filterSopByFitScope(QuerySopListForSelVo sopListForSelVo, List<Sop> sops) throws Exception {
|
|
|
+ JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(sopListForSelVo));
|
|
|
+
|
|
|
+ param.remove("project_id");
|
|
|
+ JSONObject epuipModelsResJson = null, labelsResJson = null, orderTypeResJson = null, fitObjResJson = null;
|
|
|
+ if (StringUtil.isEmptyList(param, "equip_model_ids")
|
|
|
+ && StringUtil.isEmptyList(param, "labels")
|
|
|
+ && StringUtil.isEmptyList(param, "order_type")
|
|
|
+ && StringUtil.isEmptyList(param, "fit_obj_ids")) {
|
|
|
+ return sops;
|
|
|
+ }else {
|
|
|
+ //查询条件后的交集
|
|
|
+ Set<String> sopId = new HashSet<>();
|
|
|
+ Map<String, Sop> sopMap = getSopMap(sops);
|
|
|
+ //1.根据适用返回查询sopid
|
|
|
+ //1.1根据设备型号查询
|
|
|
+ if(!StringUtil.isEmptyList(param, "equip_model_ids")){
|
|
|
+ QueryWrapper<SopEquipModelRel> sopEquipModelRelQueryWrapper = new QueryWrapper<>();
|
|
|
+ sopEquipModelRelQueryWrapper.in("equip_model_id",sopListForSelVo.getEquip_model_ids());
|
|
|
+ List<SopEquipModelRel> list = sopEquipModelRelService.list(sopEquipModelRelQueryWrapper);
|
|
|
+
|
|
|
+ Set<String> tmp = new HashSet<>();
|
|
|
+ for (SopEquipModelRel sopEquipModelRel : list) {
|
|
|
+ tmp.add(sopEquipModelRel.getSopId());
|
|
|
+ }
|
|
|
+ sopId.addAll(tmp);
|
|
|
+ }
|
|
|
+ //1.2根据自定义标签查询
|
|
|
+ if( !StringUtil.isEmptyList(param, "labels")){
|
|
|
+ QueryWrapper<SopLabelRel> query = new QueryWrapper<>();
|
|
|
+ query.in("label",sopListForSelVo.getLabels());
|
|
|
+ List<SopLabelRel> list = sopLabelRelService.list(query);
|
|
|
+ Set<String> tmp = new HashSet<>();
|
|
|
+ for (SopLabelRel sopLabelRel : list) {
|
|
|
+ tmp.add(sopLabelRel.getSopId());
|
|
|
+ }
|
|
|
+ sopId.retainAll(tmp);
|
|
|
+ }
|
|
|
+ //1.3根据工单类型查询
|
|
|
+ if(!StringUtil.isEmptyList(param, "order_type")){
|
|
|
+ QueryWrapper<SopOrderTypeRel> query = new QueryWrapper<>();
|
|
|
+ query.in("order_type",sopListForSelVo.getOrder_type());
|
|
|
+ List<SopOrderTypeRel> list = sopOrderTypeRelService.list(query);
|
|
|
+ Set<String> tmp = new HashSet<>();
|
|
|
+ for (SopOrderTypeRel sopOrderTypeRel : list) {
|
|
|
+ tmp.add(sopOrderTypeRel.getSopId());
|
|
|
+ }
|
|
|
+ sopId.retainAll(tmp);
|
|
|
+ }
|
|
|
+ //1.4根据适用对象查询
|
|
|
+ if( !StringUtil.isEmptyList(param, "fit_obj_ids")){
|
|
|
+ QueryWrapper<SopObjRel> query = new QueryWrapper<>();
|
|
|
+ query.in("obj_id",sopListForSelVo.getFit_obj_ids());
|
|
|
+ List<SopObjRel> list = sopObjRelService.list(query);
|
|
|
+ Set<String> tmp = new HashSet<>();
|
|
|
+ for (SopObjRel sopObjRel : list) {
|
|
|
+ tmp.add(sopObjRel.getSopId());
|
|
|
+ }
|
|
|
+ sopId.retainAll(tmp);
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询出每张表中的id 然后求出一个交集来
|
|
|
+
|
|
|
+ List<Sop> resultSops = new ArrayList<>();
|
|
|
+ for (String s : sopId) {
|
|
|
+ if (sopMap.containsKey(s)) {
|
|
|
+ resultSops.add(sopMap.get(sopId));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultSops;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
+ *
|
|
|
+ * Description:
|
|
|
+ * @param sops
|
|
|
+ * @return HashMap<String,Sop> key:sop_id ; value: sop
|
|
|
+ * @author yuecaipu
|
|
|
+ * @since 2018年7月10日: 下午5:50:41
|
|
|
+ * Update By yuecaipu 2018年7月10日: 下午5:50:41
|
|
|
+ */
|
|
|
+ private Map<String, Sop> getSopMap(List<Sop> sops) {
|
|
|
+ Map<String, Sop> resultMap = new HashMap<>();
|
|
|
+ for (Sop sop : sops) {
|
|
|
+ resultMap.put(sop.getSopId(),sop);
|
|
|
+ }
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SopService sopService;
|
|
|
+ @Autowired
|
|
|
+ private SopSopRelService sopSopRelService;
|
|
|
+
|
|
|
+ public boolean isContainsClassObj(Sop sop) throws Exception {
|
|
|
+ List<SopStepsBean> steps = sop.getSteps();
|
|
|
+ for (SopStepsBean step : steps) {
|
|
|
+ Boolean from_sop = step.isFrom_sop();
|
|
|
+ //非引用
|
|
|
+ if(!from_sop) {
|
|
|
+ List<SopStepsBean.StepContentBean> step_content = step.getStep_content();
|
|
|
+ for (SopStepsBean.StepContentBean stepContentBean : step_content) {
|
|
|
+ Boolean from_sop1 = stepContentBean.isFrom_sop();
|
|
|
+ //非引用
|
|
|
+ if(!from_sop1) {
|
|
|
+ List<SopStepsBean.StepContentBean.ContentObjsBean> content_objs = stepContentBean.getContent_objs();
|
|
|
+ for (SopStepsBean.StepContentBean.ContentObjsBean content_obj : content_objs) {
|
|
|
+ String obj_type = content_obj.getObj_type();
|
|
|
+ if (obj_type.contains("_")) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //如果是引用的haul
|
|
|
+ String sop_id = stepContentBean.getSop_id();
|
|
|
+ Sop sop1 = new Sop();
|
|
|
+ Sop query = sop1.selectById(sop_id);
|
|
|
+ if(query != null) {
|
|
|
+ return isContainsClassObj(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }else {
|
|
|
+ //如果是引用的haul
|
|
|
+ String sop_id = step.getSop_id();
|
|
|
+ Sop sop1 = new Sop();
|
|
|
+ Sop query = sop1.selectById(sop_id);
|
|
|
+ if(query != null) {
|
|
|
+ return isContainsClassObj(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void removeRelSop( List<Sop> sops, String projectId, String sopId) {
|
|
|
+ Set<String> relSopIds = querySopRel(projectId, sopId);
|
|
|
+ relSopIds.add(sopId);
|
|
|
+ Iterator<Sop> iterator = sops.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ Sop next = iterator.next();
|
|
|
+ String nodeId = next.getSopId();
|
|
|
+ if (relSopIds.contains(nodeId)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public Set<String> querySopRel(String projectId,String sopId) {
|
|
|
+ //key:被引用SOP的主键id value:引用该SOP的SOP主键id
|
|
|
+ Map<String, Set<String>> relSopId2sopId = new HashMap<>();
|
|
|
+
|
|
|
+ QueryWrapper<SopSopRel> query = new QueryWrapper();
|
|
|
+ query.eq("'",projectId).eq("",sopId).eq("valid",true);
|
|
|
+
|
|
|
+ List<SopSopRel> list = sopSopRelService.list(query);
|
|
|
+ for (SopSopRel sopSopRel : list) {
|
|
|
+ String rel_sop_id = sopSopRel.getRelSopId();
|
|
|
+ String sop_id = sopSopRel.getSopId();
|
|
|
+ Set<String> sopIds = relSopId2sopId.getOrDefault(rel_sop_id, new HashSet<String>());
|
|
|
+ sopIds.add(sop_id);
|
|
|
+ relSopId2sopId.put(rel_sop_id, sopIds);
|
|
|
+ }
|
|
|
+ return getRelSopRecursively(relSopId2sopId,sopId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private Set<String> getRelSopRecursively(Map<String, Set<String>> relSopId2sopId, String sopId) {
|
|
|
+ Set<String> relSopIds = new HashSet<>();
|
|
|
+ if (CollectionUtils.isEmpty(relSopId2sopId.get(sopId))) {
|
|
|
+ return relSopIds;
|
|
|
+ }
|
|
|
+ Set<String> set = relSopId2sopId.get(sopId);
|
|
|
+ relSopIds.addAll(set);
|
|
|
+ for (String string : set) {
|
|
|
+ relSopIds.addAll(getRelSopRecursively(relSopId2sopId, string));
|
|
|
+ }
|
|
|
+ return relSopIds;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private List<Sop> queryPublishedSopsByProjectIdAndUpdatetime(QuerySopListForSelVo sopListForSelVo,String projectId) throws Exception {
|
|
|
+ String sop_name = sopListForSelVo.getSop_name();
|
|
|
+ /*
|
|
|
+ //如果项目id 不是集团特有的id的话进入
|
|
|
+ if (!CommonConst.group_sop_id.equals(requestJson.getString("project_id"))) {
|
|
|
+ //如果sign_codes 数时空的话 或者sign_codes 码中包含public 的话
|
|
|
+ if (StringUtil.isEmptyList(requestJson, "sign_codes") || requestJson.getJSONArray("sign_codes").contains("public")) {
|
|
|
+ //设置为group_sop_id
|
|
|
+ projectIds.add(CommonConst.group_sop_id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ */
|
|
|
+ //查询条件为 projectIds valid sop_status SOP_STATUS_PUBLISH,
|
|
|
+ // 大于等于 小于等于 不包含待修订
|
|
|
+
|
|
|
+ QueryWrapper<Sop> query = new QueryWrapper();
|
|
|
+ query.eq("project_id",projectId)
|
|
|
+ .eq("valid",true)
|
|
|
+ .eq("sop_status", SopConst.SOP_STATUS_PUBLISH)
|
|
|
+ .ge("update_time",sopListForSelVo.getUpdate_time_from())
|
|
|
+ .le("update_time",sopListForSelVo.getUpdate_time_to())
|
|
|
+ .ne("publish_status",SopConst.PUBLISH_STATUS_REVISE)
|
|
|
+ .like("sop_name",sop_name);
|
|
|
+
|
|
|
+
|
|
|
+ return sopService.list(query);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /* @Autowired
|
|
|
+ private SopService sopService;
|
|
|
+
|
|
|
+ *//**
|
|
|
* 集团sop-编辑页-发布sop
|
|
|
+ *
|
|
|
* @param saveSopVo
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
- */
|
|
|
+ *//*
|
|
|
@PostMapping("/publishSop")
|
|
|
- public String publishSop(@RequestBody SaveSopVo saveSopVo) throws Exception{
|
|
|
+ public String publishSop(@RequestBody SaveSopVo saveSopVo) throws Exception {
|
|
|
saveSopVo.setProject_id(CommonConst.group_sop_id);
|
|
|
+ //根据sopid 和valid
|
|
|
+
|
|
|
+ QueryWrapper<Sop> query = new QueryWrapper<>();
|
|
|
+ String sop_id = saveSopVo.getSop_id();
|
|
|
+ query.eq("sop_id", sop_id).eq("valid", true);
|
|
|
+ Sop one = sopService.getOne(query);
|
|
|
+
|
|
|
+ Integer versionCount = null;
|
|
|
+ boolean isUpdate = true;
|
|
|
+
|
|
|
+ //此处不是很明白,明明都是空了为啥还有获取
|
|
|
+ if (one == null) {
|
|
|
+ isUpdate = false;
|
|
|
+ } else {
|
|
|
+ versionCount = one.getVersionCount();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Map<String, Object>> sopId_RefProfile = proccessSopIdRefProfile(one.getRefSopIds());
|
|
|
+ if(sopId_RefProfile != null) {
|
|
|
+ if(isUpdate) {
|
|
|
+ proccessSopItem(one,sopId_RefProfile,null);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ *//**
|
|
|
+ * 处理sop详情 补充引用sop简介,添加内容对象变化标识
|
|
|
+ * @param sop
|
|
|
+ * @param refSopProfile
|
|
|
+ * @Param changedObjIds objId //对象变化数据key:objId value:{"objId":objId, "objName":objName, "objType":objType}
|
|
|
+ * @return
|
|
|
+ *//*
|
|
|
+ public JSONObject proccessSopItem(Sop sop, Map<String, Map<String, Object>> refSopProfile, Set<String> changedObjIds) {
|
|
|
+ *//*
|
|
|
+ if(changedObjIds != null) {
|
|
|
+ fitObjs = (JSONArray)sop.getOrDefault("fit_objs", new JSONArray());
|
|
|
+ fitObjs = fitObjs == null ? new JSONArray() : fitObjs;
|
|
|
+ for (int i = 0; i < fitObjs.size(); i++) {
|
|
|
+ fitObj = fitObjs.getJSONObject(i);
|
|
|
+ if(changedObjIds.contains(fitObj.getString("obj_id"))){
|
|
|
+ fitObj.put("is_revise", true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ *//*
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //处理步骤
|
|
|
+ List<SopStepsBean> steps = sop.getSteps();
|
|
|
+ if(CollectionUtils.isNotEmpty(steps)) {
|
|
|
+ for (SopStepsBean step : steps) {
|
|
|
+ if(step.isFrom_sop()) {
|
|
|
+ //大步为引用sop
|
|
|
+ String refSopId = step.getSop_id();
|
|
|
+ Map<String, Object> stringObjectMap = refSopProfile.get(refSopId);
|
|
|
+ if(stringObjectMap != null) {
|
|
|
+ *//**********************************//*
|
|
|
+ //step.putAll(profile);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ List<SopStepsBean.StepContentBean> step_content = step.getStep_content();
|
|
|
+ if(CollectionUtils.isNotEmpty(step_content)) {
|
|
|
+ for (SopStepsBean.StepContentBean stepContentBean : step_content) {
|
|
|
+ if(stepContentBean.isFrom_sop()) {
|
|
|
+ String refSopId = stepContentBean.getSop_id();
|
|
|
+ Map<String, Object> stringObjectMap = refSopProfile.get(refSopId);
|
|
|
+ if(stringObjectMap != null) {
|
|
|
+ *//**********************************//*
|
|
|
+ //step.putAll(profile);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ *//*
|
|
|
+ {
|
|
|
+ if(!stepContent.getBooleanValue("from_sop")){
|
|
|
+ //非引用sop操作
|
|
|
+ //操作内容
|
|
|
+ contentObjs = (JSONArray)stepContent.getOrDefault("content_objs", new JSONArray());
|
|
|
+ if(contentObjs != null){
|
|
|
+ for(int k=0; k<contentObjs.size(); k++){
|
|
|
+ contentObj = contentObjs.getJSONObject(k);
|
|
|
+ if(changedObjIds.contains(contentObj.getString("obj_id"))){
|
|
|
+ //内容对象变化
|
|
|
+ contentObj.put("is_revise", true);
|
|
|
+ }else{
|
|
|
+ parents = (JSONArray)contentObj.getOrDefault("parents", new JSONArray());
|
|
|
+ if(parents != null){
|
|
|
+ for(int l=0; l<parents.size(); l++){
|
|
|
+ parent = parents.getJSONObject(l);
|
|
|
+ parentIds = (JSONArray)parent.getOrDefault("parent_ids", new JSONArray());
|
|
|
+ if(parentIds != null){
|
|
|
+ for(int m=0; m<parentIds.size(); m++){
|
|
|
+ parentId = parentIds.getString(m);
|
|
|
+ if(changedObjIds.contains(parentId)){
|
|
|
+ //内容对象所属大类变化
|
|
|
+ contentObj.put("is_revise", true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //确认结果
|
|
|
+ if(changedObjIds != null && changedObjIds.size() > 0){
|
|
|
+ confirmResults = (JSONArray)stepContent.getOrDefault("confirm_result", new JSONArray());
|
|
|
+ if(confirmResults != null){
|
|
|
+ for(int k=0; k<confirmResults.size(); k++){
|
|
|
+ confirmResult = confirmResults.getJSONObject(k);
|
|
|
+ if(changedObjIds.contains(confirmResult.getString("obj_id"))){
|
|
|
+ //确认结果对象变化
|
|
|
+ confirmResult.put("is_revise", true);
|
|
|
+ }else{
|
|
|
+ parents = confirmResult.getJSONArray("parents");
|
|
|
+ if(parents != null){
|
|
|
+ for(int l=0; l<parents.size(); l++){
|
|
|
+ parent = parents.getJSONObject(l);
|
|
|
+ parentIds = parent.getJSONArray("parent_ids");
|
|
|
+ if(parentIds != null){
|
|
|
+ for(int m=0; m<parentIds.size(); m++){
|
|
|
+ parentId = parentIds.getString(m);
|
|
|
+ if(changedObjIds.contains(parentId)){
|
|
|
+ //确认结果所属大类变化
|
|
|
+ confirmResult.put("is_revise", true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //信息点
|
|
|
+ infoPoints = (JSONArray)confirmResult.getOrDefault("info_points", new JSONArray());
|
|
|
+ infoPoints = infoPoints == null ? new JSONArray() : infoPoints;
|
|
|
+ for(int l=0; l<infoPoints.size(); l++){
|
|
|
+ infoPoint = infoPoints.getJSONObject(l);
|
|
|
+ if(changedObjIds.contains(infoPoint.getString("id"))){
|
|
|
+ //信息点变化
|
|
|
+ infoPoint.put("is_revise", true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ *//*
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+*/
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理引用的sop id与简介(sop_name,version,step_count,status_explain,update_time)
|
|
|
+ *
|
|
|
+ * @param refSopIds 被引用sopId集合
|
|
|
+ * @return map key:sopId value:sop对象
|
|
|
+ * @throws Exception
|
|
|
+ * @Param userId 调用者
|
|
|
+ */
|
|
|
+ public Map<String, Map<String, Object>> proccessSopIdRefProfile(List<String> refSopIds) throws Exception {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|