浏览代码

更新计划列表显示,计划新增和编辑,小程序审核按角色

baihe 3 年之前
父节点
当前提交
9ac9bbc5ec
共有 19 个文件被更改,包括 689 次插入413 次删除
  1. 20 5
      application-facade/src/main/java/com/factory/controller/web/FirstArticleController.java
  2. 5 4
      application-facade/src/main/java/com/factory/controller/web/PreventMistakeController.java
  3. 0 1
      application-facade/src/main/java/com/factory/controller/wx/PlanApprovalController.java
  4. 9 0
      application-facade/src/main/java/com/factory/web/entity/pm/ApprovalRule.java
  5. 4 1
      application-facade/src/main/java/com/factory/web/entity/pm/OnsiteApprovalPlan.java
  6. 2 1
      application-facade/src/main/java/com/factory/web/entity/pm/PlanBind.java
  7. 9 0
      application-facade/src/main/java/com/factory/web/mapper/pm/PreventMistakeMapper.java
  8. 1 1
      application-facade/src/main/java/com/factory/web/service/fa/FirstArticleService.java
  9. 161 113
      application-facade/src/main/java/com/factory/web/service/impl/fa/FirstArticleServiceImpl.java
  10. 44 1
      application-facade/src/main/java/com/factory/web/service/impl/pm/OnsiteApprovalPlanServiceImpl.java
  11. 142 110
      application-facade/src/main/java/com/factory/web/service/impl/pm/PreventMistakeServiceImpl.java
  12. 2 0
      application-facade/src/main/java/com/factory/web/service/pm/OnsiteApprovalPlanService.java
  13. 7 7
      application-facade/src/main/java/com/factory/web/service/pm/PreventMistakeService.java
  14. 100 60
      application-facade/src/main/java/com/factory/wx/service/impl/PlanApprovalServiceImpl.java
  15. 40 19
      application-facade/src/main/resources/application-dev.yml
  16. 38 45
      application-facade/src/main/resources/mapper/FirstArticleMapper.xml
  17. 72 44
      application-facade/src/main/resources/mapper/PreventMistakeMapper.xml
  18. 17 0
      common-base/src/main/java/com/factory/base/entity/enumPo/PlanStatus.java
  19. 16 1
      common-base/src/main/java/com/factory/base/entity/po/benteler/BentelerPlan.java

+ 20 - 5
application-facade/src/main/java/com/factory/controller/web/FirstArticleController.java

@@ -2,9 +2,6 @@ package com.factory.controller.web;
 
 import java.util.List;
 
-import com.factory.user.entity.vo.res.FileRes;
-import com.factory.web.entity.fa.req.*;
-import com.factory.web.entity.vo.req.exportInitialPlanDetailsReq;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -15,8 +12,26 @@ import com.factory.base.entity.aggregates.PageBean;
 import com.factory.base.entity.aggregates.ResponseBean;
 import com.factory.base.entity.po.benteler.BentelerPlan;
 import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.user.entity.vo.res.FileRes;
 import com.factory.web.entity.fa.FirstArticleTitle;
 import com.factory.web.entity.fa.FirstArticleWorkshop;
+import com.factory.web.entity.fa.req.AddFaItemResultListReq;
+import com.factory.web.entity.fa.req.AddFaPlanReq;
+import com.factory.web.entity.fa.req.EditFaItemResultListReq;
+import com.factory.web.entity.fa.req.EditFaPlanReq;
+import com.factory.web.entity.fa.req.SearchALLPlanListReq;
+import com.factory.web.entity.fa.req.SearchFaCalendarReq;
+import com.factory.web.entity.fa.req.SearchFaCheckRecordListReq;
+import com.factory.web.entity.fa.req.SearchFaItemListForPadReq;
+import com.factory.web.entity.fa.req.SearchFaItemNoGoListReq;
+import com.factory.web.entity.fa.req.SearchFaPlanCheckListReq;
+import com.factory.web.entity.fa.req.SearchFaPlanListForPadReq;
+import com.factory.web.entity.fa.req.SearchFaPlanReq;
+import com.factory.web.entity.fa.req.SearchFaTaskReq;
+import com.factory.web.entity.fa.req.SearchFaWorkshopListForPadReq;
+import com.factory.web.entity.fa.req.SearchFaWorkshopNoGoListReq;
+import com.factory.web.entity.fa.req.SearchHisPlanListReq;
+import com.factory.web.entity.fa.req.SubmitFaTaskReq;
 import com.factory.web.entity.fa.res.FaCalendarRes;
 import com.factory.web.entity.fa.res.FaCheckRecordListRes;
 import com.factory.web.entity.fa.res.FaItemListForPadRes;
@@ -30,7 +45,7 @@ import com.factory.web.entity.fa.res.UserListRes;
 import com.factory.web.entity.pm.OnsiteApprovalPlan;
 import com.factory.web.entity.pm.req.PmPlanPauseFlagReq;
 import com.factory.web.entity.pm.req.SearchPmPlanReq;
-import com.factory.web.entity.pm.req.SearchTaskReq;
+import com.factory.web.entity.vo.req.exportInitialPlanDetailsReq;
 import com.factory.web.service.fa.FirstArticleService;
 import com.factory.web.service.pm.PreventMistakeService;
 
@@ -170,7 +185,7 @@ public class FirstArticleController {
 		return preventMistakeService.getPmPlanApprovalList(req);
 	}
 
-	@ApiOperation(value = "取得所有计划(首件、防错)")
+	@ApiOperation(value = "取得所有计划(首件、防错):用于导入")
 	@ApiOperationSupport(order = 17)
 	@PostMapping("/getALLPlanList")
 	public ResponseBean<List<BentelerPlan>> getALLPlanList(@RequestBody SearchALLPlanListReq req) {

+ 5 - 4
application-facade/src/main/java/com/factory/controller/web/PreventMistakeController.java

@@ -80,14 +80,15 @@ public class PreventMistakeController {
 		return preventMistakeService.getPmPlanCheckList(req);
 	}
 
+	//,"getWaitApprovalPlanList"
 	@ApiOperation(value = "取得Web端待审批计划列表")
 	@ApiOperationSupport(order = 3)
-	@PostMapping("/getPmPlanlist")
+	@PostMapping({"/getPmPlanlist"})
 	public ResponseBean<PageBean<PmPlanListRes>> getPmPlanlist(@RequestBody SearchPmPlanListReq req) {
 		return preventMistakeService.getPmPlanList(req);
 	}
 
-	@ApiOperation(value = "取得防错计划信息")
+	@ApiOperation(value = "取得防错计划信息:用于PC待审核列表编辑")
 	@ApiOperationSupport(order = 4)
 	@PostMapping("/getPmPlan")
 	public ResponseBean<PmPlanRes> getPmPlan(@RequestBody SearchPmPlanReq req) {
@@ -98,7 +99,7 @@ public class PreventMistakeController {
 	@ApiOperation(value = "禁用解禁防错计划")
 	@PostMapping("/disablePmPlan")
 	@ApiOperationSupport(order = 5)
-	public ResponseBean disablePmPlan(@RequestBody PmPlanPauseFlagReq req) {
+	public ResponseBean<Void> disablePmPlan(@RequestBody PmPlanPauseFlagReq req) {
 		return preventMistakeService.disablePmPlan(req);
 	}
 
@@ -112,7 +113,7 @@ public class PreventMistakeController {
 	@ApiOperation(value = "修改防错计划")
 	@PostMapping("/editPmPlan")
 	@ApiOperationSupport(order = 7)
-	public ResponseBean editPmPlan(@RequestBody EditPmPlanReq req) {
+	public ResponseBean<Void> editPmPlan(@RequestBody EditPmPlanReq req) {
 		return preventMistakeService.editPmPlan(req);
 	}
 

+ 0 - 1
application-facade/src/main/java/com/factory/controller/wx/PlanApprovalController.java

@@ -37,7 +37,6 @@ public class PlanApprovalController {
     @ApiOperation(value = "计划审批列表")
     @PostMapping("/list")
     public ResponseBean<PageBean<BentelerPlan>> approvalList(@RequestBody PlanPageReq planPageReq) {
-//        Long userId = (Long) request.getAttribute("LOGIN_USER_ID");//获取用户id
         PageBean<BentelerPlan> approvalList = planApprovalService.getApprovalListByPage(planPageReq);
         return ResponseBeanBuilder.ok(approvalList);
     }

+ 9 - 0
application-facade/src/main/java/com/factory/web/entity/pm/ApprovalRule.java

@@ -22,6 +22,15 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 @AllArgsConstructor
 public class ApprovalRule {
+	/**
+     * 审批规则类型为:1新建计划审批
+     */
+    public final static int APPROVAL_TYPE_NEW = 1;
+    /**
+     * 审批规则类型为:3防错
+     */
+    public final static int APPROVAL_TYPE_PM = 3;
+    
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "计划审批规则id")
     private Long id;

+ 4 - 1
application-facade/src/main/java/com/factory/web/entity/pm/OnsiteApprovalPlan.java

@@ -34,11 +34,14 @@ public class OnsiteApprovalPlan implements Serializable {
 	
 	@ApiModelProperty(value = "计划id")
 	private Long bentelerPlanId;
+	
+	@ApiModelProperty(value = "角色ID")
+	private Long approvalRole;
 
 	@ApiModelProperty(value = "1质量经理审批 2生产经理审批")
 	private Integer approvalLevel;
 
-	@ApiModelProperty(value = "审批人")
+	@ApiModelProperty(value = "审批人:操作的人")
 	private Long approvalUserId;
 	
 	@ApiModelProperty(value = "审批状态 0未审批 1审批通过 2驳回")

+ 2 - 1
application-facade/src/main/java/com/factory/web/entity/pm/PlanBind.java

@@ -17,10 +17,11 @@ import lombok.NoArgsConstructor;
 
 /**
  * 计划绑定
- *
+ * @See BentelerPlan
  * @author wzy
  * @date 2021-07-09 12:00:00
  */
+@Deprecated
 @Data
 @TableName("plan_bind")
 @Builder

+ 9 - 0
application-facade/src/main/java/com/factory/web/mapper/pm/PreventMistakeMapper.java

@@ -45,6 +45,13 @@ import com.factory.web.entity.pm.res.PmWorkshopNoGoListRes;
  */
 @Mapper
 public interface PreventMistakeMapper extends BaseMapper<BentelerPlan> {
+	/**
+	 * 待审批计划列表
+	 * @param page
+	 * @param req
+	 * @return
+	 */
+	public Page<PmPlanListRes> getWaitApprovalPlanList(@Param("page") Page page, @Param("req") SearchPmPlanListReq req);
 	
 	/**
      * 取得防错计划点检列表
@@ -59,7 +66,9 @@ public interface PreventMistakeMapper extends BaseMapper<BentelerPlan> {
      * @param page
      * @param req
      * @return 防错计划列表
+     * @see getWaitApprovalPlanList
      */
+    @Deprecated
     public Page<PmPlanListRes> getPmPlanList(@Param("page") Page page, @Param("req") SearchPmPlanListReq req);
     
     /**

+ 1 - 1
application-facade/src/main/java/com/factory/web/service/fa/FirstArticleService.java

@@ -57,7 +57,7 @@ public interface FirstArticleService extends IService<BentelerPlan> {
 	 * @param name
 	 * @return true存在,false不存在
 	 */
-	public boolean checkPlanNameExist(String name);
+	public boolean checkPlanNameExist(String name,Long originalId);
 
 	/**
 	 * 校验工作站名是否存在

+ 161 - 113
application-facade/src/main/java/com/factory/web/service/impl/fa/FirstArticleServiceImpl.java

@@ -1,6 +1,24 @@
 package com.factory.web.service.impl.fa;
 
-import cn.hutool.core.convert.Convert;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
@@ -12,15 +30,61 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.factory.base.entity.aggregates.PageBean;
 import com.factory.base.entity.aggregates.ResponseBean;
+import com.factory.base.entity.enumPo.PlanStatus;
 import com.factory.base.entity.enumPo.PlanType;
 import com.factory.base.entity.po.benteler.BentelerPlan;
 import com.factory.base.util.res.ResponseBeanBuilder;
 import com.factory.config.MyHandler;
 import com.factory.user.entity.vo.res.FileRes;
 import com.factory.user.service.CommonService;
-import com.factory.web.entity.fa.*;
-import com.factory.web.entity.fa.req.*;
-import com.factory.web.entity.fa.res.*;
+import com.factory.web.entity.fa.FirstArticleApprovalTask;
+import com.factory.web.entity.fa.FirstArticleCalendar;
+import com.factory.web.entity.fa.FirstArticleItem;
+import com.factory.web.entity.fa.FirstArticleItemResult;
+import com.factory.web.entity.fa.FirstArticleTask;
+import com.factory.web.entity.fa.FirstArticleTaskHisBlob;
+import com.factory.web.entity.fa.FirstArticleTitle;
+import com.factory.web.entity.fa.FirstArticleTitleBlob;
+import com.factory.web.entity.fa.FirstArticleWorkshop;
+import com.factory.web.entity.fa.req.AddFaItemResultListReq;
+import com.factory.web.entity.fa.req.AddFaItemResultReq;
+import com.factory.web.entity.fa.req.AddFaPlanReq;
+import com.factory.web.entity.fa.req.EditFaItemResultListReq;
+import com.factory.web.entity.fa.req.EditFaItemResultReq;
+import com.factory.web.entity.fa.req.EditFaPlanReq;
+import com.factory.web.entity.fa.req.FirstArticleCalendarReq;
+import com.factory.web.entity.fa.req.FirstArticleItemReq;
+import com.factory.web.entity.fa.req.FirstArticleWorkshopReq;
+import com.factory.web.entity.fa.req.SearchALLPlanListReq;
+import com.factory.web.entity.fa.req.SearchFaCalendarReq;
+import com.factory.web.entity.fa.req.SearchFaCheckRecordListReq;
+import com.factory.web.entity.fa.req.SearchFaItemListForPadReq;
+import com.factory.web.entity.fa.req.SearchFaItemNoGoListReq;
+import com.factory.web.entity.fa.req.SearchFaItemReleaseCountReq;
+import com.factory.web.entity.fa.req.SearchFaItemResultListReq;
+import com.factory.web.entity.fa.req.SearchFaPlanCheckListReq;
+import com.factory.web.entity.fa.req.SearchFaPlanListForPadReq;
+import com.factory.web.entity.fa.req.SearchFaPlanReq;
+import com.factory.web.entity.fa.req.SearchFaTaskInfoReq;
+import com.factory.web.entity.fa.req.SearchFaTaskReq;
+import com.factory.web.entity.fa.req.SearchFaWorkshopListForPadReq;
+import com.factory.web.entity.fa.req.SearchFaWorkshopNoGoListReq;
+import com.factory.web.entity.fa.req.SearchFaWsItemResultCountReq;
+import com.factory.web.entity.fa.req.SearchHisPlanListReq;
+import com.factory.web.entity.fa.req.SearchUserListReq;
+import com.factory.web.entity.fa.req.SubmitFaTaskReq;
+import com.factory.web.entity.fa.res.FaCalendarRes;
+import com.factory.web.entity.fa.res.FaCheckRecordListRes;
+import com.factory.web.entity.fa.res.FaItemListForPadRes;
+import com.factory.web.entity.fa.res.FaItemNoGoListRes;
+import com.factory.web.entity.fa.res.FaNoGoTaskAapprovalRes;
+import com.factory.web.entity.fa.res.FaPlanListForPadRes;
+import com.factory.web.entity.fa.res.FaPlanListRes;
+import com.factory.web.entity.fa.res.FaPlanRes;
+import com.factory.web.entity.fa.res.FaTaskRes;
+import com.factory.web.entity.fa.res.FaWorkshopNoGoListRes;
+import com.factory.web.entity.fa.res.UserListRes;
+import com.factory.web.entity.pm.ApprovalRule;
 import com.factory.web.entity.pm.OnsiteApprovalPlan;
 import com.factory.web.entity.pm.PlanBind;
 import com.factory.web.entity.pm.res.ApprovalUserRes;
@@ -28,16 +92,22 @@ import com.factory.web.entity.vo.req.exportInitialPlanDetailsReq;
 import com.factory.web.mapper.fa.FirstArticleMapper;
 import com.factory.web.service.BentelerPlanService;
 import com.factory.web.service.FileService;
-import com.factory.web.service.fa.*;
+import com.factory.web.service.fa.FirstArticleApprovalTaskService;
+import com.factory.web.service.fa.FirstArticleCalendarService;
+import com.factory.web.service.fa.FirstArticleItemResultService;
+import com.factory.web.service.fa.FirstArticleItemService;
+import com.factory.web.service.fa.FirstArticleService;
+import com.factory.web.service.fa.FirstArticleTaskHisBlobService;
+import com.factory.web.service.fa.FirstArticleTaskService;
+import com.factory.web.service.fa.FirstArticleTitleBlobService;
+import com.factory.web.service.fa.FirstArticleWorkshopService;
 import com.factory.web.service.impl.FileEntry;
 import com.factory.web.service.pm.OnsiteApprovalPlanService;
 import com.factory.web.service.pm.PlanBindService;
 import com.factory.web.service.pm.PreventMistakeService;
 import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.service.WxService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
+
 
 import java.io.*;
 import java.time.LocalDate;
@@ -50,6 +120,9 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
+import cn.hutool.core.convert.Convert;
+
+
 
 /**
  * 首件计划
@@ -120,7 +193,7 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
     @Override
     public ResponseBean addFaPlan(AddFaPlanReq req) {
         /* 校验计划名称是否存在 */
-        if (this.checkPlanNameExist(req.getBentelerPlanName())) {
+        if (this.checkPlanNameExist(req.getBentelerPlanName(),null)) {
             return ResponseBeanBuilder.fail("计划名称已存在");
         }
 
@@ -130,6 +203,7 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
                 .name(req.getBentelerPlanName())
                 .pauseFlag(false)
                 .effectiveDate(req.getEffectiveDate())
+                .status(PlanStatus.WAIT_APPROVAL.value)
                 .build();
         planService.save(plan);
 
@@ -200,35 +274,16 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
                 firstArticleItemService.save(firstArticleItem);
             }
         }
-
-        /* 取得审批人 approvalLevel=1级审批 type=1计划审批 */
-        ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(1, 1);
-        if (approvalUserRes != null) {
-            /* 添加计划一级审批 */
-            OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
-                    .bentelerPlanId(plan.getId())
-                    .approvalLevel(1) // 1级审批
-                    .approvalUserId(approvalUserRes.getUserId())
-                    .status(0) // 0未审批
-                    .build();
-            onsiteApprovalPlanService.save(onsiteApprovalPlan);
-
-//            //向下一级别发送提醒
-//            Date date = new Date();
-//            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
-//            //发送微信消息
-//            wxService.sendWechatMessage(SendMsgReq.builder()
-//                    .toUserId(approvalUserRes.getUserId())
-//                    .title("计划审批提醒")
-//                    .content("您有待审批的新建计划,请登录小程序查看【计划审批】")
-//                    .endTime(ft.format(date))
-//                    .fromUserId(plan.getCreatedUserId())
-//                    .build());
-        }
+        planService.updateById(BentelerPlan.builder()
+				.id(plan.getId())
+				.originalId(plan.getId())
+				.build());
+        onsiteApprovalPlanService.setApprovalFirst(plan.getId(),false);
 
         return ResponseBeanBuilder.ok();
     }
 
+
     /**
      * 校验计划名是否存在
      *
@@ -236,9 +291,12 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
      * @return true存在,false不存在
      */
     @Override
-    public boolean checkPlanNameExist(String name) {
+    public boolean checkPlanNameExist(String name,Long originalId) {
         int count = planService.count(
-                Wrappers.<BentelerPlan>lambdaQuery().eq(BentelerPlan::getName, name));
+                Wrappers.<BentelerPlan>lambdaQuery()
+                .eq(BentelerPlan::getName, name)
+                .ne(originalId!=null,BentelerPlan::getOriginalId, originalId)
+                );
         if (count > 0) {
             return true;
         } else {
@@ -338,20 +396,35 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
      */
     @Override
     public ResponseBean editFaPlan(EditFaPlanReq req) {
-
-        if (this.checkApprovalPlan(req.getBentelerPlanId())) { // 审批通过
-
-//			/* 校验计划名称是否存在 */
-//			if (this.checkPlanNameExist(req.getBentelerPlanName())) {
-//				return ResponseBeanBuilder.fail("计划名称已存在");
-//			}
-
+    	BentelerPlan plan = null;
+		BentelerPlan oldPlan = planService.getById(req.getBentelerPlanId());	
+		BentelerPlan oldEdit = null;
+		if(oldPlan.getStatus()>=PlanStatus.APPROVAL_PASS.value) {
+			oldEdit = planService.lambdaQuery()
+			.eq(BentelerPlan::getOriginalId, oldPlan.getOriginalId())
+			.in(BentelerPlan::getStatus,PlanStatus.WAIT_APPROVAL.value,PlanStatus.APPROVAL_REFUSE.value)
+			.one();//保证未审核通过的版本只有一个
+		}
+		if(oldEdit!=null) {
+			oldPlan = oldEdit;
+		}
+		if (!req.getBentelerPlanName().equals(oldPlan.getName())) {
+			/* 校验计划名称是否存在 */
+			if (this.checkPlanNameExist(req.getBentelerPlanName(),oldPlan.getId())) {
+				return ResponseBeanBuilder.fail("计划名称已存在");
+			}
+		}
+		boolean clearApproval = false;
+		if(oldPlan.getStatus()>=PlanStatus.APPROVAL_PASS.value) { // 审批通过
             /* 添加防错计划 */
-            BentelerPlan plan = BentelerPlan.builder()
+            plan = BentelerPlan.builder()
                     .planType(PlanType.首件.value)
                     .name(req.getBentelerPlanName())
                     .pauseFlag(false)
                     .effectiveDate(req.getEffectiveDate())
+                    .prevId(oldPlan.getId())
+					.originalId(oldPlan.getOriginalId())
+					.status(PlanStatus.WAIT_APPROVAL.value)
                     .build();
             planService.save(plan);
 
@@ -422,40 +495,14 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
                 }
             }
 
-            /* 取得审批人 approvalLevel=1级审批 type=1计划审批 */
-            ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(1, 1);
-            if (approvalUserRes != null) {
-                /* 添加计划一级审批 */
-                OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
-                        .bentelerPlanId(plan.getId())
-                        .approvalLevel(1) // 1级审批
-                        .approvalUserId(approvalUserRes.getUserId())
-                        .status(0) // 0未审批
-                        .build();
-                onsiteApprovalPlanService.save(onsiteApprovalPlan);
-            }
-
-            /* 绑定计划 */
-            PlanBind planBind = PlanBind.builder()
-                    .oldBentelerPlanId(req.getBentelerPlanId())
-                    .newBentelerPlanId(plan.getId())
-                    .build();
-            planBindService.save(planBind);
-
         } else { // 没审批通过
-            BentelerPlan oldPlan = planService.getById(req.getBentelerPlanId());
-            if (!req.getBentelerPlanName().equals(oldPlan.getName())) {
-                /* 校验计划名称是否存在 */
-                if (this.checkPlanNameExist(req.getBentelerPlanName())) {
-                    return ResponseBeanBuilder.fail("计划名称已存在");
-                }
-            }
-
+            
             /* 修改防错计划 */
-            BentelerPlan plan = BentelerPlan.builder()
-                    .id(req.getBentelerPlanId())
+            plan = BentelerPlan.builder()
+                    .id(oldPlan.getId())
                     .name(req.getBentelerPlanName())
                     .effectiveDate(req.getEffectiveDate())
+                    .status(PlanStatus.WAIT_APPROVAL.value)
                     .build();
             planService.updateById(plan);
 
@@ -539,24 +586,10 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
                     firstArticleItemService.save(firstArticleItem);
                 }
             }
-
-            /* 删除之前的审批记录 */
-            onsiteApprovalPlanService.remove(Wrappers.<OnsiteApprovalPlan>lambdaQuery()
-                    .eq(OnsiteApprovalPlan::getBentelerPlanId, plan.getId()));
-            /* 取得审批人 approvalLevel=1级审批 type=1计划审批 */
-            ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(1, 1);
-            if (approvalUserRes != null) {
-                /* 添加计划一级审批 */
-                OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
-                        .bentelerPlanId(plan.getId())
-                        .approvalLevel(1) // 1级审批
-                        .approvalUserId(approvalUserRes.getUserId())
-                        .status(0) // 0未审批
-                        .build();
-                onsiteApprovalPlanService.save(onsiteApprovalPlan);
-            }
+            clearApproval = true;
         }
-
+		onsiteApprovalPlanService.setApprovalFirst(plan.getId(),clearApproval);
+		
         return ResponseBeanBuilder.ok();
     }
 
@@ -1095,36 +1128,51 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
     public ResponseBean<List<BentelerPlan>> getALLPlanList(SearchALLPlanListReq req) {
         List<BentelerPlan> aLLPlanList = planService.list(Wrappers.<BentelerPlan>lambdaQuery()
                 .eq(BentelerPlan::getPlanType, req.getPlanType())
-                .eq(BentelerPlan::getPauseFlag, false));
+                .eq(BentelerPlan::getPauseFlag, false)
+                .eq(BentelerPlan::getStatus, PlanStatus.APPROVAL_FORMAL.value)
+                );
         return ResponseBeanBuilder.ok(aLLPlanList, Function.identity());
     }
 
     @Override
     public ResponseBean<List<BentelerPlan>> getHisPlanList(SearchHisPlanListReq req) {
         BentelerPlan plan = planService.getById(req.getId());
+        List<BentelerPlan> list = new ArrayList<>();
         if (plan != null) {
-            List<PlanBind> bindList = planBindService.list(Wrappers.<PlanBind>lambdaQuery().eq(PlanBind::getOldBentelerPlanId, req.getId()));
-            List<Long> psids = new ArrayList<>();
-            for (PlanBind b : bindList) {
-                psids.add(b.getNewBentelerPlanId());
-            }
-            if(psids.size()>0){
-                List<OnsiteApprovalPlan> approvals=onsiteApprovalPlanService.list(Wrappers.<OnsiteApprovalPlan>lambdaQuery().eq(OnsiteApprovalPlan::getApprovalLevel,2)
-                       .eq(OnsiteApprovalPlan::getStatus,1)
-                       .in(OnsiteApprovalPlan::getBentelerPlanId,psids));
-                psids = new ArrayList<>();
-                for (OnsiteApprovalPlan b : approvals) {
-                    psids.add(b.getBentelerPlanId());
-                }
-                if(psids.size()>0){
-                    List<BentelerPlan> hisplans = planService.list(Wrappers.<BentelerPlan>lambdaQuery()
-                            .eq(BentelerPlan::getPlanType, plan.getPlanType()).in(BentelerPlan::getId, psids));
-                    return ResponseBeanBuilder.ok(hisplans, Function.identity());
-                }
-            }
+        	if(plan.getOriginalId()==null) {
+        		list.add(plan);
+        	}else {
+        		list = planService.list(Wrappers.<BentelerPlan>lambdaQuery()
+        				.eq(BentelerPlan::getPlanType, plan.getPlanType())
+        				.eq(BentelerPlan::getOriginalId, plan.getOriginalId())
+        				.in(BentelerPlan::getStatus,PlanStatus.APPROVAL_PASS.value,PlanStatus.APPROVAL_FORMAL.value,PlanStatus.HISTORY.value)
+        				.orderByDesc(BentelerPlan::getId)
+        				);
+        		list.add(planService.getById(plan.getOriginalId()));
+        	}
+//            List<PlanBind> bindList = planBindService.list(Wrappers.<PlanBind>lambdaQuery().eq(PlanBind::getOldBentelerPlanId, req.getId())
+//            		.select(PlanBind::getNewBentelerPlanId));
+//            List<Long> psids = new ArrayList<>();
+//            for (PlanBind b : bindList) {
+//                psids.add(b.getNewBentelerPlanId());
+//            }
+//            psids.add(plan.getId());//把最初版本放入到信息里面
+//            if(psids.size()>0){
+//                List<OnsiteApprovalPlan> approvals=onsiteApprovalPlanService.list(Wrappers.<OnsiteApprovalPlan>lambdaQuery().eq(OnsiteApprovalPlan::getApprovalLevel,2)
+//                       .eq(OnsiteApprovalPlan::getStatus,1)
+//                       .in(OnsiteApprovalPlan::getBentelerPlanId,psids));
+//                psids = new ArrayList<>();
+//                for (OnsiteApprovalPlan b : approvals) {
+//                    psids.add(b.getBentelerPlanId());
+//                }
+//                if(psids.size()>0){
+//                	list = planService.list(Wrappers.<BentelerPlan>lambdaQuery() .eq(BentelerPlan::getPlanType, plan.getPlanType()).in(BentelerPlan::getId, psids));
+//                    
+//                }
+//            }
         }
 
-        return ResponseBeanBuilder.ok(new ArrayList<BentelerPlan>(), Function.identity());
+        return ResponseBeanBuilder.ok(list, Function.identity());
     }
 //    <select id="getCalenderFirstForType" resultMap="calendarFirst">
 //    SELECT b.*

+ 44 - 1
application-facade/src/main/java/com/factory/web/service/impl/pm/OnsiteApprovalPlanServiceImpl.java

@@ -1,10 +1,14 @@
 package com.factory.web.service.impl.pm;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.factory.web.entity.pm.ApprovalRule;
 import com.factory.web.entity.pm.OnsiteApprovalPlan;
+import com.factory.web.mapper.pm.ApprovalRuleMapper;
 import com.factory.web.mapper.pm.OnsiteApprovalPlanMapper;
 import com.factory.web.service.pm.OnsiteApprovalPlanService;
 
@@ -18,5 +22,44 @@ import com.factory.web.service.pm.OnsiteApprovalPlanService;
 @Service("onsiteApprovalPlanService")
 @Transactional(rollbackFor = Exception.class)
 public class OnsiteApprovalPlanServiceImpl extends ServiceImpl<OnsiteApprovalPlanMapper, OnsiteApprovalPlan> implements OnsiteApprovalPlanService {
-
+	
+	@Autowired
+	private ApprovalRuleMapper approvalRuleMapper;
+	
+	/**
+	 * 第一级待审核计划
+	 * 是否清空之前的审核记录
+	 */
+	@Override
+	public void setApprovalFirst(Long planId,boolean clearApproval) {
+		if(clearApproval) {
+			this.remove(Wrappers.<OnsiteApprovalPlan>lambdaQuery()
+                    .eq(OnsiteApprovalPlan::getBentelerPlanId, planId));
+		}
+		ApprovalRule approvalRuleMinLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
+				.eq(ApprovalRule::getType, ApprovalRule.APPROVAL_TYPE_NEW)
+				.orderByAsc(ApprovalRule::getApprovalLevel)
+				.last("limit 1"));
+		if (approvalRuleMinLevel != null) {
+			/* 添加计划一级审批 */
+			OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
+					.bentelerPlanId(planId)
+					.approvalLevel(approvalRuleMinLevel.getApprovalLevel()) // 1级审批
+					.approvalRole(approvalRuleMinLevel.getRoleId())
+					.status(0) // 0未审批
+					.build();
+			this.save(onsiteApprovalPlan);
+//			向下一级别发送提醒
+//			Date date = new Date();
+//			SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+//			//发送微信消息
+//			wxService.sendWechatMessage(SendMsgReq.builder()
+//					.toUserId(approvalUserRes.getUserId())
+//					.title("计划审批提醒")
+//					.content("您有待审批的新建计划,请登录小程序查看【计划审批】")
+//					.endTime(ft.format(date))
+//					.fromUserId(plan.getCreatedUserId())
+//					.build());
+		}
+	}
 }

+ 142 - 110
application-facade/src/main/java/com/factory/web/service/impl/pm/PreventMistakeServiceImpl.java

@@ -1,5 +1,17 @@
 package com.factory.web.service.impl.pm;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -8,33 +20,91 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.factory.base.entity.aggregates.PageBean;
 import com.factory.base.entity.aggregates.ResponseBean;
+import com.factory.base.entity.enumPo.PlanStatus;
 import com.factory.base.entity.enumPo.PlanType;
 import com.factory.base.entity.po.benteler.BentelerPlan;
 import com.factory.base.util.res.ResponseBeanBuilder;
 import com.factory.web.entity.fa.FirstArticleWorkshop;
-import com.factory.web.entity.pm.*;
-import com.factory.web.entity.pm.req.*;
-import com.factory.web.entity.pm.res.*;
+import com.factory.web.entity.pm.ApprovalRule;
+import com.factory.web.entity.pm.OnsiteApprovalPlan;
+import com.factory.web.entity.pm.OnsiteApprovalTask;
+import com.factory.web.entity.pm.OnsiteCalendar;
+import com.factory.web.entity.pm.OnsiteItem;
+import com.factory.web.entity.pm.OnsiteItemResult;
+import com.factory.web.entity.pm.OnsitePlanHisBlob;
+import com.factory.web.entity.pm.OnsiteTask;
+import com.factory.web.entity.pm.OnsiteTaskHisBlob;
+import com.factory.web.entity.pm.OnsiteTitle;
+import com.factory.web.entity.pm.OnsiteTitleBlob;
+import com.factory.web.entity.pm.OnsiteWorkshop;
+import com.factory.web.entity.pm.req.AddItemResultListReq;
+import com.factory.web.entity.pm.req.AddItemResultReq;
+import com.factory.web.entity.pm.req.AddPmPlanReq;
+import com.factory.web.entity.pm.req.EditItemResultListReq;
+import com.factory.web.entity.pm.req.EditItemResultReq;
+import com.factory.web.entity.pm.req.EditPmPlanReq;
+import com.factory.web.entity.pm.req.OnsiteCalendarReq;
+import com.factory.web.entity.pm.req.OnsiteItemReq;
+import com.factory.web.entity.pm.req.OnsiteWorkshopReq;
+import com.factory.web.entity.pm.req.PmPlanPauseFlagReq;
+import com.factory.web.entity.pm.req.SearchAbnormalListReq;
+import com.factory.web.entity.pm.req.SearchAbnormalReq;
+import com.factory.web.entity.pm.req.SearchAllWorkshopReq;
+import com.factory.web.entity.pm.req.SearchApprovalUserReq;
+import com.factory.web.entity.pm.req.SearchCheckRecordReq;
+import com.factory.web.entity.pm.req.SearchItemListReq;
+import com.factory.web.entity.pm.req.SearchPmAllCheckFlagReq;
+import com.factory.web.entity.pm.req.SearchPmCheckRecordListReq;
+import com.factory.web.entity.pm.req.SearchPmItemNoGoListReq;
+import com.factory.web.entity.pm.req.SearchPmPlanCheckListReq;
+import com.factory.web.entity.pm.req.SearchPmPlanListForPadReq;
+import com.factory.web.entity.pm.req.SearchPmPlanListReq;
+import com.factory.web.entity.pm.req.SearchPmPlanReq;
+import com.factory.web.entity.pm.req.SearchPmWorkshopNoGoListReq;
+import com.factory.web.entity.pm.req.SearchPmWsAllCheckFlagReq;
+import com.factory.web.entity.pm.req.SearchTaskReq;
+import com.factory.web.entity.pm.req.SearchWorkshopReq;
+import com.factory.web.entity.pm.res.AbnormalItemRes;
+import com.factory.web.entity.pm.res.AbnormalItemResultRes;
+import com.factory.web.entity.pm.res.AbnormalTaskInfoRes;
+import com.factory.web.entity.pm.res.AbnormalWorkshopRes;
+import com.factory.web.entity.pm.res.ApprovalUserRes;
+import com.factory.web.entity.pm.res.PmAllCheckFlagRes;
+import com.factory.web.entity.pm.res.PmAllWorkshopListRes;
+import com.factory.web.entity.pm.res.PmCheckListRes;
+import com.factory.web.entity.pm.res.PmCheckRecordItemListRes;
+import com.factory.web.entity.pm.res.PmCheckRecordListRes;
+import com.factory.web.entity.pm.res.PmCheckRecordRes;
+import com.factory.web.entity.pm.res.PmItemNoGoListRes;
+import com.factory.web.entity.pm.res.PmNoGoTaskAapprovalRes;
+import com.factory.web.entity.pm.res.PmPlanCheckListRes;
+import com.factory.web.entity.pm.res.PmPlanListForPadRes;
+import com.factory.web.entity.pm.res.PmPlanListRes;
+import com.factory.web.entity.pm.res.PmPlanRes;
+import com.factory.web.entity.pm.res.PmTaskListRes;
+import com.factory.web.entity.pm.res.PmTaskRes;
+import com.factory.web.entity.pm.res.PmWorkshopNoGoListRes;
+import com.factory.web.mapper.pm.ApprovalRuleMapper;
 import com.factory.web.mapper.pm.PreventMistakeMapper;
 import com.factory.web.service.BentelerPlanService;
 import com.factory.web.service.FileService;
 import com.factory.web.service.fa.FirstArticleService;
 import com.factory.web.service.fa.FirstArticleWorkshopService;
 import com.factory.web.service.impl.FileEntry;
-import com.factory.web.service.pm.*;
+import com.factory.web.service.pm.OnsiteApprovalPlanService;
+import com.factory.web.service.pm.OnsiteApprovalTaskService;
+import com.factory.web.service.pm.OnsiteCalendarService;
+import com.factory.web.service.pm.OnsiteItemResultService;
+import com.factory.web.service.pm.OnsiteItemService;
+import com.factory.web.service.pm.OnsitePlanHisBlobService;
+import com.factory.web.service.pm.OnsiteTaskHisBlobService;
+import com.factory.web.service.pm.OnsiteTaskService;
+import com.factory.web.service.pm.OnsiteTitleBlobService;
+import com.factory.web.service.pm.OnsiteWorkshopService;
+import com.factory.web.service.pm.PlanBindService;
+import com.factory.web.service.pm.PreventMistakeService;
 import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.service.WxService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Function;
 
 
 /**
@@ -98,7 +168,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 
 	@Autowired
 	private WxService wxService;
-
+	
 
 	/**
 	 * 新建防错计划
@@ -107,9 +177,9 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 	 * @return
 	 */
 	@Override
-	public ResponseBean addPmPlan(AddPmPlanReq req) {
+	public ResponseBean<Void> addPmPlan(AddPmPlanReq req) {
 		/* 校验计划名称是否存在 */
-		if (this.checkPlanNameExist(req.getBentelerPlanName())) {
+		if (this.checkPlanNameExist(req.getBentelerPlanName(),null)) {
 			return ResponseBeanBuilder.fail("计划名称已存在");
 		}
 
@@ -119,9 +189,10 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 				.name(req.getBentelerPlanName())
 				.pauseFlag(false)
 				.effectiveDate(req.getEffectiveDate())
+				.status(PlanStatus.WAIT_APPROVAL.value)
 				.build();
 		planService.save(plan);
-
+		
 		/* 添加日周月点检规则 */
 		List<OnsiteCalendarReq> onsiteCalendarList = req.getOnsiteCalendarList();
 		for (OnsiteCalendarReq onsiteCalendarReq : onsiteCalendarList) {
@@ -149,7 +220,6 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 					.build();
 			onsiteTitleBlobService.save(onsiteTitleBlob);
 		} catch (Exception e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -178,33 +248,16 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 				onsiteItemService.save(onsiteItem);
 			}
 		}
-
-		/* 取得审批人 approvalLevel=1级审批 type=1计划审批 */
-		ApprovalUserRes approvalUserRes = this.getApprovalUserInfo(1, 1);
-		if (approvalUserRes != null) {
-			/* 添加计划一级审批 */
-			OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
-					.bentelerPlanId(plan.getId())
-					.approvalLevel(1) // 1级审批
-					.approvalUserId(approvalUserRes.getUserId())
-					.status(0) // 0未审批
-					.build();
-			onsiteApprovalPlanService.save(onsiteApprovalPlan);
-//			向下一级别发送提醒
-//			Date date = new Date();
-//			SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
-//			//发送微信消息
-//			wxService.sendWechatMessage(SendMsgReq.builder()
-//					.toUserId(approvalUserRes.getUserId())
-//					.title("计划审批提醒")
-//					.content("您有待审批的新建计划,请登录小程序查看【计划审批】")
-//					.endTime(ft.format(date))
-//					.fromUserId(plan.getCreatedUserId())
-//					.build());
-		}
+		planService.updateById(BentelerPlan.builder()
+				.id(plan.getId())
+				.originalId(plan.getId())
+				.build());
+		onsiteApprovalPlanService.setApprovalFirst(plan.getId(),false);
 
 		return ResponseBeanBuilder.ok();
 	}
+	
+
 
 	/**
 	 * 校验计划名是否存在
@@ -213,9 +266,12 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 	 * @return true存在,false不存在
 	 */
 	@Override
-	public boolean checkPlanNameExist(String name) {
+	public boolean checkPlanNameExist(String name,Long originalId) {
 		int count = planService.count(
-				Wrappers.<BentelerPlan> lambdaQuery().eq(BentelerPlan::getName, name));
+				Wrappers.<BentelerPlan> lambdaQuery()
+				.eq(BentelerPlan::getName, name)
+				.ne(originalId!=null, BentelerPlan::getOriginalId, originalId)
+				);
 		if (count > 0) {
 			return true;
 		} else {
@@ -254,14 +310,14 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 
 	/**
 	 * 取得防错计划列表
-	 *
+	 * 待审批计划列表
 	 * @param req
 	 * @return 防错计划列表
 	 */
 	@Override
 	public ResponseBean<PageBean<PmPlanListRes>> getPmPlanList(SearchPmPlanListReq req) {
 		Page<PmPlanListRes> page = new Page<>(req.getPage(), req.getSize());
-		Page<PmPlanListRes> listResPage = preventMistakeMapper.getPmPlanList(page, req);
+		Page<PmPlanListRes> listResPage = preventMistakeMapper.getWaitApprovalPlanList(page, req);
 
 		SearchPmPlanReq searchPmPlanReq = null;
 		for (PmPlanListRes pmPlan : listResPage.getRecords()) {
@@ -335,7 +391,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 		pmPlanRes.setBentelerPlanId(plan.getId());
 		pmPlanRes.setBentelerPlanName(plan.getName());
 		pmPlanRes.setPlanType(plan.getPlanType());
-		pmPlanRes.setEffectiveDate(plan.getEffectiveDate());;
+		pmPlanRes.setEffectiveDate(plan.getEffectiveDate());
 		pmPlanRes.setCreatedUserId(plan.getCreatedUserId());
 		List<OnsiteCalendar> onsiteCalendarList = onsiteCalendarService.list(Wrappers.<OnsiteCalendar>lambdaQuery()
                 .eq(OnsiteCalendar::getBentelerPlanId, plan.getId()));
@@ -375,7 +431,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
      * @return
      */
 	@Override
-    public ResponseBean disablePmPlan(PmPlanPauseFlagReq req) {
+    public ResponseBean<Void> disablePmPlan(PmPlanPauseFlagReq req) {
 		planService.updateById(BentelerPlan.builder()
                 .id(req.getBentelerPlanId())
                 .pauseFlag(req.getPauseFlag())
@@ -406,20 +462,36 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
      * @return
      */
 	@Override
-	public ResponseBean editPmPlan(EditPmPlanReq req) {
-
-		if (firstArticleService.checkApprovalPlan(req.getBentelerPlanId())) { // 审批通过
-//			/* 校验计划名称是否存在 */
-//			if (this.checkPlanNameExist(req.getBentelerPlanName())) {
-//				return ResponseBeanBuilder.fail("计划名称已存在");
-//			}
-
+	public ResponseBean<Void> editPmPlan(EditPmPlanReq req) {
+		BentelerPlan plan = null;
+		BentelerPlan oldPlan = planService.getById(req.getBentelerPlanId());	
+		BentelerPlan oldEdit = null;
+		if(oldPlan.getStatus()>=PlanStatus.APPROVAL_PASS.value) {
+			oldEdit = planService.lambdaQuery()
+			.eq(BentelerPlan::getOriginalId, oldPlan.getOriginalId())
+			.in(BentelerPlan::getStatus,PlanStatus.WAIT_APPROVAL.value,PlanStatus.APPROVAL_REFUSE.value)
+			.one();//保证未审核通过的版本只有一个
+		}
+		if(oldEdit!=null) {
+			oldPlan = oldEdit;
+		}
+		if (!req.getBentelerPlanName().equals(oldPlan.getName())) {
+			/* 校验计划名称是否存在 */
+			if (this.checkPlanNameExist(req.getBentelerPlanName(),oldPlan.getOriginalId())) {
+				return ResponseBeanBuilder.fail("计划名称已存在");
+			}
+		}
+		boolean clearApproval = false;
+		if(oldPlan.getStatus()>=PlanStatus.APPROVAL_PASS.value) { // 审批通过
 			/* 添加防错计划 */
-			BentelerPlan plan = BentelerPlan.builder()
+			plan = BentelerPlan.builder()
 					.planType(PlanType.防错.value)
 					.name(req.getBentelerPlanName())
 					.pauseFlag(false)
 					.effectiveDate(req.getEffectiveDate())
+					.prevId(oldPlan.getId())
+					.originalId(oldPlan.getOriginalId())
+					.status(PlanStatus.WAIT_APPROVAL.value)
 					.build();
 			planService.save(plan);
 
@@ -450,7 +522,6 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 						.build();
 				onsiteTitleBlobService.save(onsiteTitleBlob);
 			} catch (Exception e) {
-				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
 
@@ -479,36 +550,10 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 					onsiteItemService.save(onsiteItem);
 				}
 			}
-
-			/* 取得审批人 approvalLevel=1级审批 type=1计划审批 */
-			ApprovalUserRes approvalUserRes = this.getApprovalUserInfo(1, 1);
-			if (approvalUserRes != null) {
-				/* 添加计划一级审批 */
-				OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
-						.bentelerPlanId(plan.getId())
-						.approvalLevel(1) // 1级审批
-						.approvalUserId(approvalUserRes.getUserId())
-						.status(0) // 0未审批
-						.build();
-				onsiteApprovalPlanService.save(onsiteApprovalPlan);
-			}
-
-			/* 绑定计划 */
-			PlanBind planBind = PlanBind.builder()
-					.oldBentelerPlanId(req.getBentelerPlanId())
-					.newBentelerPlanId(plan.getId())
-					.build();
-			planBindService.save(planBind);
-
+	
+		
 		} else { // 没审批通过
-			BentelerPlan oldPlan = planService.getById(req.getBentelerPlanId());
-			if (!req.getBentelerPlanName().equals(oldPlan.getName())) {
-				/* 校验计划名称是否存在 */
-				if (this.checkPlanNameExist(req.getBentelerPlanName())) {
-					return ResponseBeanBuilder.fail("计划名称已存在");
-				}
-			}
-
+			
 //			/* 将之前的plan所有信息记到his中(暂时没记审批信息) */
 //			int count = onsiteApprovalPlanService.count(
 //					Wrappers.<OnsiteApprovalPlan> lambdaQuery()
@@ -531,10 +576,11 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 //			}
 
 			/* 修改防错计划 */
-			BentelerPlan plan = BentelerPlan.builder()
-					.id(req.getBentelerPlanId())
+			plan = BentelerPlan.builder()
+					.id(oldPlan.getId())
 					.name(req.getBentelerPlanName())
 					.effectiveDate(req.getEffectiveDate())
+					.status(PlanStatus.WAIT_APPROVAL.value)
 					.build();
 			planService.updateById(plan);
 
@@ -610,23 +656,9 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 					onsiteItemService.save(onsiteItem);
 				}
 			}
-
-			/* 删除之前的审批记录 */
-			onsiteApprovalPlanService.remove(Wrappers.<OnsiteApprovalPlan>lambdaQuery()
-	                .eq(OnsiteApprovalPlan::getBentelerPlanId, plan.getId()));
-			/* 取得审批人 approvalLevel=1级审批 type=1计划审批 */
-			ApprovalUserRes approvalUserRes = this.getApprovalUserInfo(1, 1);
-			if (approvalUserRes != null) {
-				/* 添加计划一级审批 */
-				OnsiteApprovalPlan onsiteApprovalPlan = OnsiteApprovalPlan.builder()
-						.bentelerPlanId(plan.getId())
-						.approvalLevel(1) // 1级审批
-						.approvalUserId(approvalUserRes.getUserId())
-						.status(0) // 0未审批
-						.build();
-				onsiteApprovalPlanService.save(onsiteApprovalPlan);
-			}
+			clearApproval = true;
 		}
+		onsiteApprovalPlanService.setApprovalFirst(plan.getId(),clearApproval);
 
 		return ResponseBeanBuilder.ok();
 	}
@@ -807,7 +839,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
      * @return
      */
     @Override
-	public ResponseBean addItemResult(AddItemResultListReq req) {
+	public ResponseBean<Void> addItemResult(AddItemResultListReq req) {
         List<AddItemResultReq> addItemResultList = req.getAddItemResultList();
 
         /* 删除上一次保存结果 */
@@ -840,7 +872,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
      * @return
      */
 	@Override
-	public ResponseBean submitTask(SearchTaskReq req) {
+	public ResponseBean<Void> submitTask(SearchTaskReq req) {
 		/* 取得task下的所有条目检查结果 */
 		List<OnsiteItemResult> onsiteItemResultList = onsiteItemResultService.list(Wrappers.<OnsiteItemResult>lambdaQuery()
                 .eq(OnsiteItemResult::getOnsiteTaskId, req.getOnsiteTaskId()));
@@ -1006,7 +1038,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 	 * @return
 	 */
 	@Override
-	public ResponseBean editItemResult(EditItemResultListReq req) {
+	public ResponseBean<Void> editItemResult(EditItemResultListReq req) {
 		/* 更新巡检项目检查结果 */
 		List<EditItemResultReq> editItemResultList = req.getEditItemResultList();
     	for (EditItemResultReq editItemResult : editItemResultList) {

+ 2 - 0
application-facade/src/main/java/com/factory/web/service/pm/OnsiteApprovalPlanService.java

@@ -12,4 +12,6 @@ import com.factory.web.entity.pm.OnsiteApprovalPlan;
  */
 public interface OnsiteApprovalPlanService extends IService<OnsiteApprovalPlan> {
 
+	public void setApprovalFirst(Long planId,boolean clear);
+	
 }

+ 7 - 7
application-facade/src/main/java/com/factory/web/service/pm/PreventMistakeService.java

@@ -59,7 +59,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param req
 	 * @return
 	 */
-	public ResponseBean addPmPlan(AddPmPlanReq req);
+	public ResponseBean<Void> addPmPlan(AddPmPlanReq req);
 
 	/**
 	 * 校验计划名是否存在
@@ -67,7 +67,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param name
 	 * @return true存在,false不存在
 	 */
-	public boolean checkPlanNameExist(String name);
+	public boolean checkPlanNameExist(String name,Long originalId);
 
 	/**
 	 * 校验工作站名是否存在
@@ -115,7 +115,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param req
 	 * @return
 	 */
-	public ResponseBean disablePmPlan(PmPlanPauseFlagReq req);
+	public ResponseBean<Void> disablePmPlan(PmPlanPauseFlagReq req);
 
 	/**
 	 * 取得工作站信息
@@ -131,7 +131,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param req
 	 * @return
 	 */
-	public ResponseBean editPmPlan(EditPmPlanReq req);
+	public ResponseBean<Void> editPmPlan(EditPmPlanReq req);
 
 	/**
 	 * 取得计划审批信息
@@ -195,7 +195,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param req
 	 * @return
 	 */
-	public ResponseBean addItemResult(AddItemResultListReq req);
+	public ResponseBean<Void> addItemResult(AddItemResultListReq req);
 
 	/**
 	 * 任务提交
@@ -203,7 +203,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param req
 	 * @return
 	 */
-	public ResponseBean submitTask(SearchTaskReq req);
+	public ResponseBean<Void> submitTask(SearchTaskReq req);
 
 	/**
 	 * 取得审批人
@@ -259,7 +259,7 @@ public interface PreventMistakeService extends IService<BentelerPlan> {
 	 * @param req
 	 * @return
 	 */
-	public ResponseBean editItemResult(EditItemResultListReq req);
+	public ResponseBean<Void> editItemResult(EditItemResultListReq req);
 	
 	/**
      * 修改防错计划

+ 100 - 60
application-facade/src/main/java/com/factory/wx/service/impl/PlanApprovalServiceImpl.java

@@ -1,19 +1,31 @@
 package com.factory.wx.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.factory.base.entity.aggregates.PageBean;
 import com.factory.base.entity.aggregates.ResponseBean;
+import com.factory.base.entity.enumPo.PlanStatus;
 import com.factory.base.entity.po.benteler.BentelerPlan;
 import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.user.service.UserRoleService;
 import com.factory.web.entity.fa.FirstArticleItem;
 import com.factory.web.entity.fa.FirstArticleTitle;
 import com.factory.web.entity.fa.FirstArticleWorkshop;
-import com.factory.web.entity.pm.*;
-import com.factory.web.entity.pm.res.ApprovalUserRes;
+import com.factory.web.entity.pm.ApprovalRule;
+import com.factory.web.entity.pm.OnsiteApprovalPlan;
+import com.factory.web.entity.pm.OnsiteItem;
+import com.factory.web.entity.pm.OnsiteTitle;
+import com.factory.web.entity.pm.OnsiteWorkshop;
 import com.factory.web.mapper.BentelerPlanMapper;
 import com.factory.web.mapper.fa.FirstArticleItemMapper;
 import com.factory.web.mapper.fa.FirstArticleWorkshopMapper;
@@ -21,6 +33,8 @@ import com.factory.web.mapper.pm.ApprovalRuleMapper;
 import com.factory.web.mapper.pm.OnsiteApprovalPlanMapper;
 import com.factory.web.mapper.pm.OnsiteItemMapper;
 import com.factory.web.mapper.pm.OnsiteWorkshopMapper;
+import com.factory.web.service.BentelerPlanService;
+import com.factory.web.service.pm.OnsiteApprovalPlanService;
 import com.factory.web.service.pm.PreventMistakeService;
 import com.factory.wx.entity.req.PlanApprovalReq;
 import com.factory.wx.entity.req.PlanInfoReq;
@@ -29,33 +43,20 @@ import com.factory.wx.entity.res.PlanApprovalDetailRes;
 import com.factory.wx.entity.res.WxPlanBaseInfoRes;
 import com.factory.wx.service.PlanApprovalService;
 import com.factory.wx.service.WxPlanService;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
+import cn.hutool.core.collection.CollUtil;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @author sMArT
  * @version 1.0
  * @date 2021-07-13 12:42 下午
  */
+@Slf4j
 @Service("planApprovalService")
 public class PlanApprovalServiceImpl implements PlanApprovalService {
 
-    private final static Logger LOGGER = LoggerFactory.getLogger(PlanApprovalServiceImpl.class);
-    /**
-     * 审批规则类型为:1新建计划审批
-     */
-    private static int APPROVAL_TYPE_NEW = 1;
-    /**
-     * 审批规则类型为:3防错
-     */
-    private static int APPROVAL_TYPE_PM = 3;
+    
     @Autowired
     private BentelerPlanMapper bentelerPlanMapper;
     @Autowired
@@ -64,6 +65,8 @@ public class PlanApprovalServiceImpl implements PlanApprovalService {
     private OnsiteItemMapper onsiteItemMapper;
     @Autowired
     private OnsiteApprovalPlanMapper onsiteApprovalPlanMapper;
+    @Autowired
+	private OnsiteApprovalPlanService onsiteApprovalPlanService;
     @Autowired
     private ApprovalRuleMapper approvalRuleMapper;
     @Autowired
@@ -74,6 +77,12 @@ public class PlanApprovalServiceImpl implements PlanApprovalService {
     private FirstArticleItemMapper firstArticleItemMapper;
     @Autowired
     private WxPlanService wxPlanService;
+    
+    @Autowired
+    private BentelerPlanService planService;
+    
+    @Autowired
+    private UserRoleService userRoleService;
 
     /**
      * 分页显示计划列表
@@ -83,28 +92,32 @@ public class PlanApprovalServiceImpl implements PlanApprovalService {
      */
     @Override
     public PageBean<BentelerPlan> getApprovalListByPage(PlanPageReq planPageReq) {
+    	
+    	IPage<BentelerPlan> page = new Page<>(planPageReq.getPage(), planPageReq.getSize());
+    	List<Long> roleIds =userRoleService.getRoleIdsByUserId(planPageReq.getUserId());
+    	if(!roleIds.isEmpty()) {
+	        LambdaQueryWrapper<OnsiteApprovalPlan> approvalPlanWrapper = new LambdaQueryWrapper<>();
+	        approvalPlanWrapper.in(OnsiteApprovalPlan::getApprovalRole, roleIds);
+	        approvalPlanWrapper.eq(OnsiteApprovalPlan::getStatus, 0);//获取未处理过的计划
+	        List<OnsiteApprovalPlan> onsiteApprovalPlanList = onsiteApprovalPlanMapper.selectList(approvalPlanWrapper);
+	
+	        if (CollUtil.isNotEmpty(onsiteApprovalPlanList)) {
+	            LambdaQueryWrapper<BentelerPlan> wrapper = new LambdaQueryWrapper<>();
+	            List<Long> planIds = onsiteApprovalPlanList.stream().map(OnsiteApprovalPlan::getBentelerPlanId).collect(Collectors.toList());
+	            wrapper.in(BentelerPlan::getId, planIds);
+	
+	            if (StringUtils.isNotEmpty(planPageReq.getName())) {
+	                wrapper.like(BentelerPlan::getName, planPageReq.getName());
+	            }
+	            wrapper.eq(BentelerPlan::getDeleted, 0);//未删除
+	            wrapper.eq(BentelerPlan::getPauseFlag, 0);//未禁用
+	            wrapper.in(BentelerPlan::getStatus, PlanStatus.APPROVAL_REFUSE.value,PlanStatus.WAIT_APPROVAL.value);
+	            
+	            page = bentelerPlanMapper.selectPage(page, wrapper);
+	        }
+    	}
 
-        LambdaQueryWrapper<OnsiteApprovalPlan> approvalPlanWrapper = new LambdaQueryWrapper<>();
-        approvalPlanWrapper.eq(OnsiteApprovalPlan::getApprovalUserId, planPageReq.getUserId());
-        approvalPlanWrapper.eq(OnsiteApprovalPlan::getStatus, 0);//获取未处理过的计划
-        List<OnsiteApprovalPlan> onsiteApprovalPlanList = onsiteApprovalPlanMapper.selectList(approvalPlanWrapper);
-
-        IPage<BentelerPlan> bentelerPlanIPage = new Page<>();
-        if (CollUtil.isNotEmpty(onsiteApprovalPlanList)) {
-            LambdaQueryWrapper<BentelerPlan> wrapper = new LambdaQueryWrapper<>();
-            List<Long> planIds = onsiteApprovalPlanList.stream().map(OnsiteApprovalPlan::getBentelerPlanId).collect(Collectors.toList());
-            wrapper.in(BentelerPlan::getId, planIds);
-
-            if (StringUtils.isNotEmpty(planPageReq.getName())) {
-                wrapper.like(BentelerPlan::getName, planPageReq.getName());
-            }
-            wrapper.eq(BentelerPlan::getDeleted, 0);//未删除
-            wrapper.eq(BentelerPlan::getPauseFlag, 0);//未禁用
-            IPage<BentelerPlan> page = new Page<>(planPageReq.getPage(), planPageReq.getSize());
-            bentelerPlanIPage = bentelerPlanMapper.selectPage(page, wrapper);
-        }
-
-        return PageBean.<BentelerPlan>builder().row(bentelerPlanIPage.getRecords()).total(bentelerPlanIPage.getTotal()).page(bentelerPlanIPage.getPages()).build();
+        return PageBean.<BentelerPlan>builder().row(page.getRecords()).total(page.getTotal()).page(page.getPages()).build();
     }
 
     /**
@@ -213,32 +226,59 @@ public class PlanApprovalServiceImpl implements PlanApprovalService {
      */
     @Override
     public ResponseBean approvalOperate(PlanApprovalReq planApprovalReq) {
-
+    	List<Long> roleIds =userRoleService.getRoleIdsByUserId(planApprovalReq.getUserId());
+    	if(roleIds.isEmpty()) {
+    		 ResponseBeanBuilder.fail("无权限审批");
+    	}
         OnsiteApprovalPlan onsiteApprovalPlan = new OnsiteApprovalPlan();
         onsiteApprovalPlan.setStatus(planApprovalReq.getStatus());
+        OnsiteApprovalPlan old = onsiteApprovalPlanMapper.selectOne( Wrappers.<OnsiteApprovalPlan>lambdaQuery()
+                .eq(OnsiteApprovalPlan::getBentelerPlanId, planApprovalReq.getPlanId())
+                .eq(OnsiteApprovalPlan::getStatus, 0));
+        if(old==null) {
+        	ResponseBeanBuilder.fail("请勿重复审批");
+        }
+        if(!roleIds.contains(old.getApprovalRole())) {
+        	 ResponseBeanBuilder.fail("无权限审批");
+        }
         int updateStatus = onsiteApprovalPlanMapper.update(onsiteApprovalPlan, Wrappers.<OnsiteApprovalPlan>lambdaQuery()
                 .eq(OnsiteApprovalPlan::getBentelerPlanId, planApprovalReq.getPlanId())
-                .eq(OnsiteApprovalPlan::getApprovalUserId, planApprovalReq.getUserId()));
+                .eq(OnsiteApprovalPlan::getStatus, 0));
         if (updateStatus > 0) {
             //审批通过触发下一级别
             if (planApprovalReq.getStatus() == 1) {
-                ApprovalRule approvalRuleMaxLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
-                        .eq(ApprovalRule::getType, APPROVAL_TYPE_NEW)
-                        .orderByDesc(ApprovalRule::getApprovalLevel)
-                        .last("limit 1"));
-                //获取当前审批级别
-                OnsiteApprovalPlan userApprovalInfo = onsiteApprovalPlanMapper.selectOne(Wrappers.<OnsiteApprovalPlan>lambdaQuery()
-                        .eq(OnsiteApprovalPlan::getBentelerPlanId, planApprovalReq.getPlanId())
-                        .eq(OnsiteApprovalPlan::getApprovalUserId, planApprovalReq.getUserId()).last("limit 1"));
-                int userLevel = userApprovalInfo.getApprovalLevel();
-                if (userLevel < approvalRuleMaxLevel.getApprovalLevel()) {
-                    ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(userLevel + 1, APPROVAL_TYPE_NEW);
-                    onsiteApprovalPlanMapper.insert(OnsiteApprovalPlan.builder()
-                            .bentelerPlanId(planApprovalReq.getPlanId())
-                            .approvalLevel(approvalUserRes.getApprovalLevel())
-                            .approvalUserId(approvalUserRes.getUserId())
-                            .status(0)
-                            .build());
+            	//获取当前审批级别
+            	OnsiteApprovalPlan userApprovalInfo = onsiteApprovalPlanMapper.selectOne(Wrappers.<OnsiteApprovalPlan>lambdaQuery()
+            			.eq(OnsiteApprovalPlan::getBentelerPlanId, planApprovalReq.getPlanId())
+            			.eq(OnsiteApprovalPlan::getApprovalUserId, planApprovalReq.getUserId()).last("limit 1"));
+            	int userLevel = userApprovalInfo.getApprovalLevel();
+            	ApprovalRule approvalRuleNextLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
+        				.eq(ApprovalRule::getType, ApprovalRule.APPROVAL_TYPE_NEW)
+        				.gt(ApprovalRule::getApprovalLevel, userLevel)
+        				.orderByAsc(ApprovalRule::getApprovalLevel)
+        				.last("limit 1"));
+                if (approvalRuleNextLevel!=null) {
+                	onsiteApprovalPlanService.save(OnsiteApprovalPlan.builder()
+        					.bentelerPlanId(planApprovalReq.getPlanId())
+        					.approvalLevel(approvalRuleNextLevel.getApprovalLevel()) // 1级审批
+        					.approvalRole(approvalRuleNextLevel.getRoleId())
+        					.status(0) // 0未审批
+        					.build());
+                	
+                }else {//TODO 预计到生效时间暂停旧计划开启新计划
+                	BentelerPlan plan = planService.getById(planApprovalReq.getPlanId());
+                	BentelerPlan planUpdate = BentelerPlan.builder()
+        					.id(planApprovalReq.getPlanId())
+        					.status(PlanStatus.APPROVAL_FORMAL.value)
+        					.build();
+        			planService.updateById(planUpdate);
+        			if(plan.getPrevId()!=null) {
+        				 planUpdate = BentelerPlan.builder()
+             					.id(planApprovalReq.getPlanId())
+             					.status(PlanStatus.HISTORY.value)
+             					.build();
+             			planService.updateById(planUpdate);
+        			}
                 }
             }
             //审批不通过

+ 40 - 19
application-facade/src/main/resources/application-dev.yml

@@ -1,12 +1,13 @@
 server:
-  port: 30047
+  port: 40048
 spring:
   application:
     name: application-web
   redis:
-    host: 192.168.31.14
-    port: 6379
-    database: 14
+    host: 39.100.230.190
+    port: 8120
+    password: jh1q2w3e4r
+    database: 15
     lettuce:
       pool:
         max-active: 5
@@ -15,27 +16,44 @@ spring:
       primary: self #设置默认的数据源或者数据源组,默认值即为master
       strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
       datasource:
-        #本项目使用
         self:
-          url: jdbc:mysql://www.jihengcc.cn:17336/zhoudu_base?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+          url: jdbc:mysql://39.100.230.190:8092/crocodile?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
           username: root
-          password: 1q2w3e4r
-          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
-        #本项目使用
+          password: Jh@Jh2019!
+          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
         file:
-          url: jdbc:mysql://www.jihengcc.cn:17336/zhoudu_base?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+          url: jdbc:mysql://39.100.230.190:8092/zhoudu_ceshi?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
           username: root
-          password: 1q2w3e4r
-          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
+          password: Jh@Jh2019!
+          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
     hikari:
       maximum-pool-size: 5
 
+
 cn:
   jiheng:
     file:
       file-store-dir: download
       zip-out-dir: zip
-      download-prefix: http://39.100.230.190/download
+      download-prefix: https://s2t.jihengcc.cn/file/
+    auth:
+      permit-url-list:
+        - /swagger-ui.html
+        - /webjars/**
+        - /swagger-resources/**
+        - /v2/**
+        - /favicon.ico
+        - /doc.html
+        - /api/passwordLogin
+        - /csrf
+        - /error**
+        - /webjars**
+        # 登录
+        - /login/passwordLogin**
+        - /login
+        - /benteler/fileupload/**
+      #        - /**
+      client: WEB
 
 jetcache:
   statIntervalMinutes: 15
@@ -72,8 +90,9 @@ jetcache:
         minIdle: 5
         maxIdle: 20
         maxTotal: 50
-      host: ${SPRING.REDIS.HOST:192.168.31.14}
-      port: ${SPRING.REDIS.PORT:6379}
+      host: ${SPRING.REDIS.HOST:39.100.230.190}
+      port: ${SPRING.REDIS.PORT:8120}
+      password: ${SPRING.REDIS.PASSWORD:jh1q2w3e4r}
     # 长时远程緩存,主要用于要求时效要求一般的集中式缓存
     longTime:
       type: redis
@@ -85,8 +104,9 @@ jetcache:
         minIdle: 5
         maxIdle: 20
         maxTotal: 50
-      host: ${SPRING.REDIS.HOST:192.168.31.14}
-      port: ${SPRING.REDIS.PORT:6379}
+      host: ${SPRING.REDIS.HOST:39.100.230.190}
+      port: ${SPRING.REDIS.PORT:8120}
+      password: ${SPRING.REDIS.PASSWORD:jh1q2w3e4r}
     # 短時远程緩存,主要用于要求时效较高的集中式缓存
     shortTime:
       type: redis
@@ -98,8 +118,9 @@ jetcache:
         minIdle: 5
         maxIdle: 20
         maxTotal: 50
-      host: ${SPRING.REDIS.HOST:192.168.31.14}
-      port: ${SPRING.REDIS.PORT:6379}
+      host: ${SPRING.REDIS.HOST:39.100.230.190}
+      port: ${SPRING.REDIS.PORT:8120}
+      password: ${SPRING.REDIS.PASSWORD:jh1q2w3e4r}
 wx:
   minprogram:
     miniprogramState: trial

+ 38 - 45
application-facade/src/main/resources/mapper/FirstArticleMapper.xml

@@ -5,61 +5,54 @@
 
     <!--取得首件计划点检列表(审批通过的 首件计划)(计划当天点检状态,plan_status,0未完成 1已完成 2待重检) -->
     <select id="getFaPlanCheckList" resultType="com.factory.web.entity.fa.res.FaPlanListRes">
-        SELECT
+       SELECT 
+       temp.benteler_plan_id,temp.benteler_plan_name,temp.created_time,temp.pause_flag,temp.check_person,
+       <![CDATA[
+       CASE
+		   WHEN temp.count0 > 0 THEN 0
+		   WHEN temp.count2 > 0 THEN 2
+		   WHEN temp.count1 > 0 THEN 1
+		   ELSE -1
+	   END AS plan_status
+	   ]]>
+       FROM (
+       SELECT
 			bp.id AS benteler_plan_id,
 			bp.`name` AS benteler_plan_name,
 			GROUP_CONCAT( uu.username ) AS check_person,
 			bp.created_time,
 			bp.pause_flag,
-			ps.plan_status
+			SUM(IF(fat.`status` = 0 or fat.`status` = 1, 1,0)) AS count0,
+			SUM(IF(fat.`status` = 2 or fat.`status` = 4, 1,0)) AS count1,
+			SUM(IF(fat.`status` = 3, 1,0)) AS count2
 		FROM
-			benteler_plan bp,
-			first_article_calendar fac,
-			us_user uu,
-			onsite_approval_plan oap,
-			(
-				SELECT c.benteler_plan_id,
-					   CASE 
-						   WHEN c.count0 &gt; 0 THEN 0 
-						   WHEN c.count1 &gt; 0 THEN 0
-						   WHEN (c.count2 + c.count4) = c.count THEN 1
-						   WHEN c.count3 &gt; 0 THEN 2
-						   ELSE -1 
-					   END AS plan_status
-				FROM   (
-						SELECT  bp.id AS benteler_plan_id,
-								SUM(CASE WHEN fat.`status` = 0 THEN 1 ELSE 0 END) AS count0,
-								SUM(CASE WHEN fat.`status` = 1 THEN 1 ELSE 0 END) AS count1,
-								SUM(CASE WHEN fat.`status` = 2 THEN 1 ELSE 0 END) AS count2,
-								SUM(CASE WHEN fat.`status` = 3 THEN 1 ELSE 0 END) AS count3,
-								SUM(CASE WHEN fat.`status` = 4 THEN 1 ELSE 0 END) AS count4,
-								COUNT(*) AS count
-						FROM    benteler_plan bp,
-								first_article_calendar fac,
-								first_article_task fat
-						WHERE   bp.id = fac.benteler_plan_id
-						AND     fac.id = fat.first_article_calendar_id
-						AND     TO_DAYS(fat.task_time) = TO_DAYS(NOW())
-						AND     bp.plan_type = 1
-						GROUP BY bp.id
-				) c
-			) ps
+			benteler_plan bp
+			join onsite_approval_plan oap on bp.id = oap.benteler_plan_id AND oap.approval_level = 2 AND oap.`status` = 1
+			left join first_article_calendar fac on bp.id = fac.benteler_plan_id
+			left join us_user uu on  (fac.principal_one_id = uu.id or fac.principal_two_id = uu.id)
+			left join first_article_task fat on fac.id = fat.first_article_calendar_id and TO_DAYS(fat.task_time) = TO_DAYS(NOW())
 		WHERE
-			bp.id = fac.benteler_plan_id 
-			AND fac.user_id = uu.id 
-			AND bp.id = oap.benteler_plan_id 
-			AND bp.id = ps.benteler_plan_id 
-			AND bp.plan_type = 1 
-			AND oap.approval_level = 2 
-			AND oap.`status` = 1 
+			bp.deleted= 0 and bp.`status` = 4 <!-- 审核通过已生效计划 -->
+			AND bp.plan_type = 1
 			<if test="req.bentelerPlanName != null and req.bentelerPlanName != ''">
 		    AND bp.`name` LIKE CONCAT('%', #{req.bentelerPlanName}, '%')
 		    </if>
-		    <if test="req.planStatus != null">
-		    AND ps.plan_status = #{req.planStatus}
-		    </if>
-		GROUP BY
-			bp.id
+		 group by bp.id
+		 ) temp
+		 <where>
+		    <choose>
+		    	<when test="req.planStatus != null and req.planStatus==0">
+		    	   temp.count0 > 0
+		    	</when>
+		    	<when test="req.planStatus != null and req.planStatus==2">
+		    	   temp.count2 > 0
+		    	</when>
+		    	<when test="req.planStatus != null and req.planStatus==1">
+		    	   temp.count1 > 0
+		    	</when>
+		    </choose>
+		 </where>
+		 order by temp.benteler_plan_id
     </select>
     
     <!--取得Pad端首件计划列表 -->

+ 72 - 44
application-facade/src/main/resources/mapper/PreventMistakeMapper.xml

@@ -5,63 +5,91 @@
 
     <!--取得防错计划点检列表(审批通过的   防错计划)(计划当天点检状态,plan_status,0未完成 1已完成 2待重检) -->
     <select id="getPmPlanCheckList" resultType="com.factory.web.entity.pm.res.PmPlanCheckListRes">
-        SELECT
+       SELECT 
+       temp.benteler_plan_id,temp.benteler_plan_name,temp.created_time,temp.pause_flag,temp.check_person,
+       <![CDATA[
+       CASE
+		   WHEN temp.count0 > 0 THEN 0
+		   WHEN temp.count2 > 0 THEN 2
+		   WHEN temp.count1 > 0 THEN 1
+		   ELSE -1
+	   END AS plan_status
+	   ]]>
+       FROM (
+       SELECT
 			bp.id AS benteler_plan_id,
 			bp.`name` AS benteler_plan_name,
 			GROUP_CONCAT( uu.username ) AS check_person,
 			bp.created_time,
 			bp.pause_flag,
-			ps.plan_status
+			SUM(IF(ot.`status` = 0 or ot.`status` = 1, 1,0)) AS count0,
+			SUM(IF(ot.`status` = 2 or ot.`status` = 4, 1,0)) AS count1,
+			SUM(IF(ot.`status` = 3, 1,0)) AS count2
 		FROM
-			benteler_plan bp,
-			onsite_calendar oc,
-			us_user uu,
-			onsite_approval_plan oap,
-			(
-				SELECT c.benteler_plan_id,
-					   CASE
-						   WHEN c.count0 &gt; 0 THEN 0
-						   WHEN c.count1 &gt; 0 THEN 0
-						   WHEN (c.count2 + c.count4) = c.count THEN 1
-						   WHEN c.count3 &gt; 0 THEN 2
-						   ELSE -1
-					   END AS plan_status
-				FROM   (
-						SELECT  bp.id AS benteler_plan_id,
-								SUM(CASE WHEN ot.`status` = 0 THEN 1 ELSE 0 END) AS count0,
-								SUM(CASE WHEN ot.`status` = 1 THEN 1 ELSE 0 END) AS count1,
-								SUM(CASE WHEN ot.`status` = 2 THEN 1 ELSE 0 END) AS count2,
-								SUM(CASE WHEN ot.`status` = 3 THEN 1 ELSE 0 END) AS count3,
-								SUM(CASE WHEN ot.`status` = 4 THEN 1 ELSE 0 END) AS count4,
-								COUNT(*) AS count
-						FROM    benteler_plan bp,
-								onsite_calendar oc,
-								onsite_task ot
-						WHERE   bp.id = oc.benteler_plan_id
-						AND     oc.id = ot.onsite_calendar_id
-						AND     TO_DAYS(ot.task_time) = TO_DAYS(NOW())
-						AND     bp.plan_type = 2
-						GROUP BY bp.id
-				) c
-			) ps
+			benteler_plan bp
+			join onsite_approval_plan oap on bp.id = oap.benteler_plan_id AND oap.approval_level = 2 AND oap.`status` = 1
+			left join onsite_calendar oc on bp.id = oc.benteler_plan_id
+			left join us_user uu on  oc.user_id = uu.id
+			left join onsite_task ot on oc.id = ot.onsite_calendar_id and TO_DAYS(ot.task_time) = TO_DAYS(NOW())
 		WHERE
-			bp.id = oc.benteler_plan_id
-			AND oc.user_id = uu.id
-			AND bp.id = oap.benteler_plan_id
-			AND bp.id = ps.benteler_plan_id
+			bp.deleted= 0 and bp.`status` = 4 <!-- 审核通过已生效计划 -->
 			AND bp.plan_type = 2
-			AND oap.approval_level = 2
-			AND oap.`status` = 1
 			<if test="req.bentelerPlanName != null and req.bentelerPlanName != ''">
 		    AND bp.`name` LIKE CONCAT('%', #{req.bentelerPlanName}, '%')
 		    </if>
-		    <if test="req.planStatus != null">
-		    AND ps.plan_status = #{req.planStatus}
-		    </if>
-		GROUP BY
-			bp.id
+		 group by bp.id
+		 ) temp
+		 <where>
+		    <choose>
+		    	<when test="req.planStatus != null and req.planStatus==0">
+		    	   temp.count0 > 0
+		    	</when>
+		    	<when test="req.planStatus != null and req.planStatus==2">
+		    	   temp.count2 > 0
+		    	</when>
+		    	<when test="req.planStatus != null and req.planStatus==1">
+		    	   temp.count1 > 0
+		    	</when>
+		    </choose>
+		 </where>
+		 order by temp.benteler_plan_id
+	
     </select>
 
+    <!-- 取得待审批计划(计划审批状态plan_status 0待质量经理审批、1待生产经理审批、2已驳回待修改、3审批通过) -->
+    <select id="getWaitApprovalPlanList" resultType="com.factory.web.entity.pm.res.PmPlanListRes">
+        SELECT
+			bp.id AS benteler_plan_id,
+			bp.`name` AS benteler_plan_name,
+			bp.created_time,
+			bp.pause_flag,
+			bp.plan_type,
+			ps.approval_level,
+		    ps.reason,
+		    ps.updated_time,
+		    uu.username approval_person,
+		    ps.`status`,
+			CASE
+				WHEN ps.approval_level = 2 AND ps.`status` = 0 THEN 1
+				WHEN ps.approval_level = 2 AND ps.`status` = 1 THEN 3
+				WHEN ps.approval_level = 2 AND ps.`status` = 2 THEN 2
+				WHEN ps.approval_level = 1 AND ps.`status` = 0 THEN 0
+				WHEN ps.approval_level = 1 AND ps.`status` = 2 THEN 2
+				ELSE -1
+		    END AS plan_status
+		FROM
+		  benteler_plan bp
+		  left join onsite_approval_plan ps on ps.benteler_plan_id = bp.id and ps.status in (0, 2)
+		  left join us_user uu on ps.approval_user_id = uu.id
+		WHERE bp.deleted= 0 and bp.`status` in (1,2)
+		<if test="req.bentelerPlanName != null and req.bentelerPlanName != ''">
+	    	AND bp.`name` LIKE CONCAT('%', #{req.bentelerPlanName}, '%')
+	    </if>
+	    <if test="req.planType != null">
+	    	AND bp.plan_type = #{req.planType}
+	    </if>
+	    order by bp.id desc
+	</select>
     <!-- 取得防错计划列表(查询所有的防错计划)(计划审批状态plan_status 0待质量经理审批、1待生产经理审批、2已驳回待修改、3审批通过) -->
     <select id="getPmPlanList" resultType="com.factory.web.entity.pm.res.PmPlanListRes">
         select

+ 17 - 0
common-base/src/main/java/com/factory/base/entity/enumPo/PlanStatus.java

@@ -0,0 +1,17 @@
+package com.factory.base.entity.enumPo;
+
+public enum PlanStatus {
+
+    WAIT_APPROVAL(1,"待审核"),
+    APPROVAL_REFUSE(2,"审核驳回"),
+    APPROVAL_PASS(3,"审核通过待生效"),
+    APPROVAL_FORMAL(4,"正式版本"),
+    HISTORY(5,"历史版本");
+    public final Integer value;
+    public final String desc;
+    PlanStatus(Integer value,String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+}

+ 16 - 1
common-base/src/main/java/com/factory/base/entity/po/benteler/BentelerPlan.java

@@ -63,9 +63,24 @@ public class BentelerPlan implements Serializable {
     @TableField(fill = FieldFill.UPDATE)
     @ApiModelProperty(value = "最近更新时间", hidden = true)
     private LocalDateTime updatedTime;
-
+    
+    /**********************modify 2021-8-6*********************************/
+    
+   
+    @ApiModelProperty(value = "上一个版本ID,最初的为null", hidden = true)
+    private Long prevId;
+    
+    @ApiModelProperty(value = "原始版本ID,最初的为null", hidden = true)
+    private Long originalId;
+    
+    @ApiModelProperty(value = "当前状态:1待审核2审核不通过3审核通过待生效4最新版本5已经过期", hidden = true)
+    private Integer status;
 
     @TableField(exist = false)
     @ApiModelProperty(value = "版本", hidden = true)
     private BentelerIniVersion version;
+    
+    @ApiModelProperty(value = "检查负责人")
+    @TableField(exist = false)
+    private String checkPerson;
 }