Browse Source

小程序端放行和审批按照角色审批和发送微信消息,修改task

baihe 3 years ago
parent
commit
3b49717c03
40 changed files with 658 additions and 385 deletions
  1. 1 1
      application-facade/src/main/java/com/factory/controller/wx/PlanPassController.java
  2. 1 1
      application-facade/src/main/java/com/factory/controller/wx/PlanReminderController.java
  3. 5 1
      application-facade/src/main/java/com/factory/web/entity/fa/FirstArticleApprovalTask.java
  4. 5 1
      application-facade/src/main/java/com/factory/web/entity/pm/ApprovalRule.java
  5. 3 0
      application-facade/src/main/java/com/factory/web/entity/pm/OnsiteApprovalTask.java
  6. 106 43
      application-facade/src/main/java/com/factory/web/service/impl/fa/FirstArticleServiceImpl.java
  7. 25 23
      application-facade/src/main/java/com/factory/web/service/impl/pm/PreventMistakeServiceImpl.java
  8. 6 0
      application-facade/src/main/java/com/factory/wx/entity/req/PlanApprovalTaskReq.java
  9. 5 0
      application-facade/src/main/java/com/factory/wx/entity/req/PlanPageReq.java
  10. 8 6
      application-facade/src/main/java/com/factory/wx/mapper/PlanPassMapper.java
  11. 7 4
      application-facade/src/main/java/com/factory/wx/mapper/ReminderMapper.java
  12. 1 1
      application-facade/src/main/java/com/factory/wx/service/PlanPassFAService.java
  13. 1 1
      application-facade/src/main/java/com/factory/wx/service/PlanPassPMService.java
  14. 6 0
      application-facade/src/main/java/com/factory/wx/service/WxService.java
  15. 34 31
      application-facade/src/main/java/com/factory/wx/service/impl/PlanPassFAServiceImpl.java
  16. 49 37
      application-facade/src/main/java/com/factory/wx/service/impl/PlanPassPMServiceImpl.java
  17. 36 21
      application-facade/src/main/java/com/factory/wx/service/impl/PlanPassServiceImpl.java
  18. 15 10
      application-facade/src/main/java/com/factory/wx/service/impl/PlanReminderServiceImpl.java
  19. 68 13
      application-facade/src/main/java/com/factory/wx/service/impl/WxServiceImpl.java
  20. 15 10
      application-facade/src/main/resources/mapper/PlanPassMapper.xml
  21. 27 29
      application-facade/src/main/resources/mapper/PreventMistakeMapper.xml
  22. 6 7
      application-facade/src/main/resources/mapper/ReminderMapper.xml
  23. 7 2
      application-task/pom.xml
  24. 3 1
      application-task/src/main/java/com/factory/ApplicationTaskApplication.java
  25. 11 9
      application-task/src/main/java/com/factory/init/TimerTaskInit.java
  26. 17 0
      application-task/src/main/java/com/factory/init/WebSocketTestSchedule.java
  27. 0 37
      application-task/src/main/java/com/factory/websocket/Test.java
  28. 31 0
      application-task/src/main/java/com/factory/websocket/WebSocketController.java
  29. 12 0
      application-task/src/main/java/com/factory/websocket/WsSessionManager.java
  30. 0 33
      application-task/src/main/resources/application-test.properties
  31. 39 0
      application-task/src/main/resources/application-test.yml
  32. 0 31
      application-task/src/main/resources/application-uat.properties
  33. 44 0
      application-task/src/main/resources/application-uat.yml
  34. 0 8
      application-task/src/main/resources/application.properties
  35. 25 0
      application-task/src/main/resources/application.yml
  36. 0 1
      application-task/src/main/resources/mappers/FirstTaskMapper.xml
  37. 4 3
      application-task/src/main/resources/mappers/OnsiteTaskMapper.xml
  38. 11 0
      common-user/src/main/java/com/factory/user/mapper/UserRoleMapper.java
  39. 1 1
      common-user/src/main/java/com/factory/user/service/UserRoleService.java
  40. 23 19
      common-user/src/main/java/com/factory/user/service/impl/UserRoleServiceImpl.java

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

@@ -69,7 +69,7 @@ public class PlanPassController {
 
     @ApiOperation(value = "计划放行")
     @PostMapping("/operate")
-    public ResponseBean passOperate(@RequestBody PlanApprovalTaskReq planApprovalTaskReq) {
+    public ResponseBean<Void> passOperate(@RequestBody PlanApprovalTaskReq planApprovalTaskReq) {
         return planPassService.approvalTaskOperate(planApprovalTaskReq);
     }
 

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

@@ -61,7 +61,7 @@ public class PlanReminderController {
 
     @ApiOperation(value = "计划提醒确认")
     @PostMapping("/operate")
-    public ResponseBean passOperate(@RequestBody PlanInfoReq planInfoReq) {
+    public ResponseBean<Void> passOperate(@RequestBody PlanInfoReq planInfoReq) {
         planReminderService.confirmReminder(planInfoReq);
         return ResponseBeanBuilder.ok();
     }

+ 5 - 1
application-facade/src/main/java/com/factory/web/entity/fa/FirstArticleApprovalTask.java

@@ -30,9 +30,13 @@ public class FirstArticleApprovalTask implements Serializable {
     @ApiModelProperty(value = "任务id")
     private Long firstArticleTaskId;
 
+    @ApiModelProperty(value = "角色ID")
+    private Long approvalRole;
+    
     @ApiModelProperty(value = "1质量工程师审批 2质量经理审批")
     private Integer approvalLevel;
-
+    
+    
     @ApiModelProperty(value = "审批人")
     private Long approvalUserId;
 

+ 5 - 1
application-facade/src/main/java/com/factory/web/entity/pm/ApprovalRule.java

@@ -27,7 +27,11 @@ public class ApprovalRule {
      */
     public final static int APPROVAL_TYPE_NEW = 1;
     /**
-     * 审批规则类型为:3防错
+     * 审批规则类型为:2首件审批
+     */
+    public final static int APPROVAL_TYPE_FA = 2;
+    /**
+     * 审批规则类型为:3防错放行审批
      */
     public final static int APPROVAL_TYPE_PM = 3;
     

+ 3 - 0
application-facade/src/main/java/com/factory/web/entity/pm/OnsiteApprovalTask.java

@@ -30,6 +30,9 @@ public class OnsiteApprovalTask implements Serializable {
     @ApiModelProperty(value = "任务id")
     private Long onsiteTaskId;
 
+    @ApiModelProperty(value = "当前审批角色")
+    private Long approvalRole;
+    
     @ApiModelProperty(value = "1质量工程师审批 2质量经理审批")
     private Integer approvalLevel;
 

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

@@ -1,6 +1,25 @@
 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 org.springframework.transaction.interceptor.TransactionAspectSupport;
+
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
@@ -20,38 +39,78 @@ import com.factory.base.util.res.ResponseBeanBuilder;
 import com.factory.base.util.time.TimeConvert;
 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.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.res.ApprovalUserRes;
 import com.factory.web.entity.vo.req.exportInitialPlanDetailsReq;
 import com.factory.web.mapper.fa.FirstArticleMapper;
+import com.factory.web.mapper.pm.ApprovalRuleMapper;
 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 lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.io.*;
-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 cn.hutool.core.convert.Convert;
+import lombok.extern.slf4j.Slf4j;
 
 
 /**
@@ -114,6 +173,9 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
 
     @Autowired
     private WxService wxService;
+    
+    @Autowired
+    private ApprovalRuleMapper approvalRuleMapper;
 
     /**
      * 新建首件计划
@@ -829,29 +891,10 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
             /* 删除之前的审批记录 */
             firstArticleApprovalTaskService.remove(Wrappers.<FirstArticleApprovalTask>lambdaQuery()
                     .eq(FirstArticleApprovalTask::getFirstArticleTaskId, firstArticleTask.getId()));
-
-            /* 取得审批人 approvalLevel=1级审批 type=2首件任务审批 */
+            this.setApproval(firstArticleTask.getId(),null);
+            
             ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(1, 2);
-            if (approvalUserRes != null) {
-                /* 添加任务一级审批 */
-                FirstArticleApprovalTask firstArticleApprovalTask = FirstArticleApprovalTask.builder()
-                        .firstArticleTaskId(firstArticleTask.getId())
-                        .approvalLevel(1) // 1级审批
-                        .approvalUserId(approvalUserRes.getUserId())
-                        .status(0) // 0初始化
-                        .build();
-                boolean status = firstArticleApprovalTaskService.save(firstArticleApprovalTask);
-                // 下发微信消息
-                if (status) {
-                    //发送微信消息
-                    SendMsgReq sendMsgReq = new SendMsgReq();
-                    sendMsgReq.setToUserId(approvalUserRes.getUserId());
-                    sendMsgReq.setTitle("计划放行");
-                    sendMsgReq.setContent("您有待放行的计划审批,请登录小程序查看");
-                    sendMsgReq.setFromUserId(req.getUserId());
-                    wxService.sendWechatMessage(sendMsgReq);
-                }
-            }
+           
         }
 
         /* 更新中断的操作人 */
@@ -861,7 +904,27 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
 
         return ResponseBeanBuilder.ok();
     }
-
+    /* 取得审批人 approvalLevel=1级审批 type=2首件任务审批 */
+    private void setApproval(Long taskId,Long userId) {
+		ApprovalRule approvalRuleNextLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
+                .eq(ApprovalRule::getType, ApprovalRule.APPROVAL_TYPE_FA)
+                .orderByAsc(ApprovalRule::getApprovalLevel)
+                .last("limit 1"));
+		 if (approvalRuleNextLevel!=null) {
+			 firstArticleApprovalTaskService.save(FirstArticleApprovalTask.builder()
+	                    .firstArticleTaskId(taskId)
+	                    .approvalLevel(approvalRuleNextLevel.getApprovalLevel())
+	                    .approvalRole(approvalRuleNextLevel.getRoleId())
+	                    .status(0)
+	                    .build());
+	            //向下一级别发送提醒
+	            wxService.sendWechatMessageByRole(SendMsgReq.builder()
+	                    .title("计划放行")
+	                    .content("您有待放行的计划审批,请登录小程序查看")
+	                    .fromUserId(userId)
+	                    .build(),approvalRuleNextLevel.getRoleId());
+	        }
+	}
     /**
      * 取得不放行任务对应的工作站
      *

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

@@ -169,6 +169,9 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 	@Autowired
 	private WxService wxService;
 	
+	@Autowired
+	private ApprovalRuleMapper approvalRuleMapper;
+	
 
 	/**
 	 * 新建防错计划
@@ -937,33 +940,32 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
                     .eq(OnsiteApprovalTask::getOnsiteTaskId, onsiteTask.getId()));
 
             /* 取得审批人 approvalLevel=1级审批 type=3防错任务审批 */
-            ApprovalUserRes approvalUserRes = this.getApprovalUserInfo(1, 3);
-            if (approvalUserRes != null) {
-                /* 添加任务一级审批 */
-                OnsiteApprovalTask onsiteApprovalTask = OnsiteApprovalTask.builder()
-                        .onsiteTaskId(onsiteTask.getId())
-                        .approvalLevel(1) // 1级审批
-                        .approvalUserId(approvalUserRes.getUserId())
-                        .status(0) // 0初始化
-                        .build();
-                boolean status = onsiteApprovalTaskService.save(onsiteApprovalTask);
-                // 下发微信消息
-                if (status) {
-                    //发送微信消息
-                    SendMsgReq sendMsgReq = new SendMsgReq();
-                    sendMsgReq.setToUserId(approvalUserRes.getUserId());
-                    sendMsgReq.setTitle("计划放行");
-                    sendMsgReq.setContent("您有待放行的计划审批,请登录小程序查看");
-                    if (null != onsiteItemResultList) {
-                        sendMsgReq.setFromUserId(onsiteItemResultList.get(0).getCreatedUserId());
-                    }
-                    wxService.sendWechatMessage(sendMsgReq);
-                }
-            }
+            this.setApproval(onsiteTask.getId(),null);
         }
 
         return ResponseBeanBuilder.ok();
     }
+	
+	private void setApproval(Long taskId,Long userId) {
+		ApprovalRule approvalRuleNextLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
+                .eq(ApprovalRule::getType, ApprovalRule.APPROVAL_TYPE_PM)
+                .orderByAsc(ApprovalRule::getApprovalLevel)
+                .last("limit 1"));
+		 if (approvalRuleNextLevel!=null) {
+			 onsiteApprovalTaskService.save(OnsiteApprovalTask.builder()
+	                    .onsiteTaskId(taskId)
+	                    .approvalLevel(approvalRuleNextLevel.getApprovalLevel())
+	                    .approvalRole(approvalRuleNextLevel.getRoleId())
+	                    .status(0)
+	                    .build());
+	            //向下一级别发送提醒
+	            wxService.sendWechatMessageByRole(SendMsgReq.builder()
+	                    .title("计划放行")
+	                    .content("您有待放行的计划审批,请登录小程序查看")
+	                    .fromUserId(userId)
+	                    .build(),approvalRuleNextLevel.getRoleId());
+	        }
+	}
 
     /**
      * 取得审批人

+ 6 - 0
application-facade/src/main/java/com/factory/wx/entity/req/PlanApprovalTaskReq.java

@@ -1,5 +1,7 @@
 package com.factory.wx.entity.req;
 
+import java.util.List;
+
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -32,4 +34,8 @@ public class PlanApprovalTaskReq {
     @ApiModelProperty(value = "计划类型 1首件 2防错")
     private int planType;
 
+    @ApiModelProperty(value = "角色ID列表",hidden=true)
+    private List<Long> roleIds;
+    @ApiModelProperty(value = "当前层级",hidden=true)
+    private Integer approvalLevel;
 }

+ 5 - 0
application-facade/src/main/java/com/factory/wx/entity/req/PlanPageReq.java

@@ -1,5 +1,7 @@
 package com.factory.wx.entity.req;
 
+import java.util.List;
+
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -30,4 +32,7 @@ public class PlanPageReq {
 
     @ApiModelProperty(value = "计划列表每页数量")
     private int size;
+    
+    @ApiModelProperty(value = "角色ID列表",hidden=true)
+    private List<Long> roleIds;
 }

+ 8 - 6
application-facade/src/main/java/com/factory/wx/mapper/PlanPassMapper.java

@@ -1,5 +1,11 @@
 package com.factory.wx.mapper;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.factory.wx.entity.req.PlanPageReq;
 import com.factory.wx.entity.req.PlanPassReq;
 import com.factory.wx.entity.req.SearchPlanPassReq;
@@ -7,10 +13,6 @@ import com.factory.wx.entity.res.PlanPassItemRes;
 import com.factory.wx.entity.res.PlanPassItemResultRes;
 import com.factory.wx.entity.res.PlanPassRes;
 import com.factory.wx.entity.res.PlanPassTaskRes;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
 
 /**
  * @author sMArT
@@ -25,7 +27,7 @@ public interface PlanPassMapper {
      * @param planPageReq
      * @return
      */
-    List<PlanPassRes> getPlanPassList(PlanPageReq planPageReq);
+    List<PlanPassRes> getPlanPassList(@Param("page") IPage<PlanPassRes> page,@Param("req") PlanPageReq planPageReq);
 
     /**
      * 获取放行列表-防错
@@ -33,7 +35,7 @@ public interface PlanPassMapper {
      * @param planPageReq
      * @return
      */
-    List<PlanPassRes> getPlanPassPMList(PlanPageReq planPageReq);
+    List<PlanPassRes> getPlanPassPMList(@Param("page") IPage<PlanPassRes> page,@Param("req") PlanPageReq planPageReq);
 
 //    /**
 //     * 获取待放行任务-首件

+ 7 - 4
application-facade/src/main/java/com/factory/wx/mapper/ReminderMapper.java

@@ -1,11 +1,14 @@
 package com.factory.wx.mapper;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.factory.wx.entity.req.PlanInfoReq;
 import com.factory.wx.entity.req.PlanPageReq;
 import com.factory.wx.entity.res.ReminderRes;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
 
 /**
  * @author sMArT
@@ -21,7 +24,7 @@ public interface ReminderMapper {
      * @param planPageReq
      * @return
      */
-    List<ReminderRes> getReminderList(PlanPageReq planPageReq);
+    List<ReminderRes> getReminderList(@Param("page")IPage<ReminderRes> page,@Param("req")PlanPageReq planPageReq);
 
     /**
      * 确认计划已提醒

+ 1 - 1
application-facade/src/main/java/com/factory/wx/service/PlanPassFAService.java

@@ -26,5 +26,5 @@ public interface PlanPassFAService {
      * @param planApprovalTaskReq
      * @return
      */
-    ResponseBean approvalFATaskOperate(PlanApprovalTaskReq planApprovalTaskReq);
+    ResponseBean<Void> approvalFATaskOperate(PlanApprovalTaskReq planApprovalTaskReq);
 }

+ 1 - 1
application-facade/src/main/java/com/factory/wx/service/PlanPassPMService.java

@@ -27,5 +27,5 @@ public interface PlanPassPMService {
      * @param planApprovalTaskReq
      * @return
      */
-    ResponseBean approvalPMTaskOperate(PlanApprovalTaskReq planApprovalTaskReq);
+    ResponseBean<Void> approvalPMTaskOperate(PlanApprovalTaskReq planApprovalTaskReq);
 }

+ 6 - 0
application-facade/src/main/java/com/factory/wx/service/WxService.java

@@ -39,4 +39,10 @@ public interface WxService {
      * @param sendMsgReq
      */
     void sendWechatMessage(SendMsgReq sendMsgReq);
+    /**
+     * 按照角色批量发送
+     * @param sendMsgReq
+     * @param roleId
+     */
+    void sendWechatMessageByRole(SendMsgReq sendMsgReq,Long roleId);
 }

+ 34 - 31
application-facade/src/main/java/com/factory/wx/service/impl/PlanPassFAServiceImpl.java

@@ -8,6 +8,7 @@ import com.factory.web.entity.fa.FirstArticleTask;
 import com.factory.web.entity.fa.FirstArticleTitle;
 import com.factory.web.entity.fa.FirstArticleWorkshop;
 import com.factory.web.entity.pm.ApprovalRule;
+import com.factory.web.entity.pm.OnsiteApprovalTask;
 import com.factory.web.entity.pm.res.ApprovalUserRes;
 import com.factory.web.mapper.fa.FirstArticleApprovalTaskMapper;
 import com.factory.web.mapper.pm.ApprovalRuleMapper;
@@ -162,14 +163,16 @@ public class PlanPassFAServiceImpl implements PlanPassFAService {
      * @return
      */
     @Override
-    public ResponseBean approvalFATaskOperate(PlanApprovalTaskReq planApprovalTaskReq) {
+    public ResponseBean<Void> approvalFATaskOperate(PlanApprovalTaskReq planApprovalTaskReq) {
         int updateStatus = 0; // 更新状态
         //更新首件审批信息
         updateStatus = updateFirstArticleApprovalTask(planApprovalTaskReq);
         if (updateStatus > 0) {
             settingApprovalTask(planApprovalTaskReq);
+            return ResponseBeanBuilder.ok();
+        }else {
+        	return ResponseBeanBuilder.fail("无权放行");
         }
-        return ResponseBeanBuilder.ok();
     }
 
     /**
@@ -179,14 +182,20 @@ public class PlanPassFAServiceImpl implements PlanPassFAService {
      * @return
      */
     private int updateFirstArticleApprovalTask(PlanApprovalTaskReq planApprovalTaskReq) {
-        int updateStatus;
-        FirstArticleApprovalTask ot = new FirstArticleApprovalTask();
-        ot.setFirstArticleTaskId(planApprovalTaskReq.getTaskId());
-        ot.setReason(planApprovalTaskReq.getReason());
-        ot.setStatus(planApprovalTaskReq.getStatus());
-        updateStatus = firstArticleApprovalTaskMapper.update(ot, Wrappers.<FirstArticleApprovalTask>lambdaQuery()
+        int updateStatus = 0;
+        FirstArticleApprovalTask otUpdate = new FirstArticleApprovalTask();
+        otUpdate.setReason(planApprovalTaskReq.getReason());
+        otUpdate.setStatus(planApprovalTaskReq.getStatus());
+        otUpdate.setApprovalUserId(planApprovalTaskReq.getUserId());
+        FirstArticleApprovalTask otOld = firstArticleApprovalTaskMapper.selectOne(Wrappers.<FirstArticleApprovalTask>lambdaQuery()
                 .eq(FirstArticleApprovalTask::getFirstArticleTaskId, planApprovalTaskReq.getTaskId())
-                .eq(FirstArticleApprovalTask::getApprovalUserId, planApprovalTaskReq.getUserId()));
+                .eq(FirstArticleApprovalTask::getStatus, 0).last("limit 1"));
+        if(otOld==null||!planApprovalTaskReq.getRoleIds().contains(otOld.getApprovalRole())) {
+        	return updateStatus;
+        }
+        planApprovalTaskReq.setApprovalLevel(otOld.getApprovalLevel());
+        otUpdate.setId(otOld.getId()); 
+        updateStatus = firstArticleApprovalTaskMapper.updateById(otUpdate);
         return updateStatus;
     }
 
@@ -211,15 +220,15 @@ public class PlanPassFAServiceImpl implements PlanPassFAService {
      * @param planApprovalTaskReq
      */
     private void settingApprovalTask(PlanApprovalTaskReq planApprovalTaskReq) {
-        //审批不通过触发下一级别
-        if (planApprovalTaskReq.getStatus() == 2) {
-            //设置防错下一级别审批
-            setNextApprovalLevel(planApprovalTaskReq);
-        }
         //审批通过,保存审批历史
         if (planApprovalTaskReq.getStatus() == 1) {
             //审批通过,更新task状态
             updateFirstArticleTask(planApprovalTaskReq);
+        }else {
+//        //审批不通过触发下一级别
+//        if (planApprovalTaskReq.getStatus() == 2) {
+        	//设置防错下一级别审批
+        	setNextApprovalLevel(planApprovalTaskReq);
         }
     }
 
@@ -229,32 +238,26 @@ public class PlanPassFAServiceImpl implements PlanPassFAService {
      * @param planApprovalTaskReq
      */
     private void setNextApprovalLevel(PlanApprovalTaskReq planApprovalTaskReq) {
-        ApprovalRule approvalRuleMaxLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
-                .eq(ApprovalRule::getType, APPROVAL_TYPE_FIRST_ARTICLE)
-                .orderByDesc(ApprovalRule::getApprovalLevel)
-                .last("limit 1"));
-        //获取当前审批级别
-        FirstArticleApprovalTask firstArticleApprovalTask = firstArticleApprovalTaskMapper.selectOne(Wrappers.<FirstArticleApprovalTask>lambdaQuery()
-                .eq(FirstArticleApprovalTask::getFirstArticleTaskId, planApprovalTaskReq.getTaskId())
-                .eq(FirstArticleApprovalTask::getApprovalUserId, planApprovalTaskReq.getUserId()).last("limit 1"));
-        int userLevel = firstArticleApprovalTask.getApprovalLevel();
-        if (userLevel < approvalRuleMaxLevel.getApprovalLevel()) {
-            ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(userLevel + 1, APPROVAL_TYPE_FIRST_ARTICLE);
+    	  ApprovalRule approvalRuleNextLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
+                  .eq(ApprovalRule::getType, ApprovalRule.APPROVAL_TYPE_FA)
+                  .gt(ApprovalRule::getApprovalLevel, planApprovalTaskReq.getApprovalLevel())
+                  .orderByAsc(ApprovalRule::getApprovalLevel)
+                  .last("limit 1"));
+        if (approvalRuleNextLevel!=null) {
             firstArticleApprovalTaskMapper.insert(FirstArticleApprovalTask.builder()
-                    .firstArticleTaskId(firstArticleApprovalTask.getFirstArticleTaskId())
-                    .approvalLevel(approvalUserRes.getApprovalLevel())
-                    .approvalUserId(approvalUserRes.getUserId())
+                    .firstArticleTaskId(planApprovalTaskReq.getTaskId())
+                    .approvalLevel(approvalRuleNextLevel.getApprovalLevel())
+                    .approvalRole(approvalRuleNextLevel.getRoleId())
                     .status(0)
                     .build());
 
             //向下一级别发送提醒
             //发送微信消息
-            wxService.sendWechatMessage(SendMsgReq.builder()
-                    .toUserId(approvalUserRes.getUserId())
+            wxService.sendWechatMessageByRole(SendMsgReq.builder()
                     .title("计划放行")
                     .content("您有待放行的计划审批,请登录小程序查看")
                     .fromUserId(planApprovalTaskReq.getUserId())
-                    .build());
+                    .build(),approvalRuleNextLevel.getRoleId());
         } else {
             //如果是最后一个审批级别则设置task状态为不通过
             updateFirstArticleTask(planApprovalTaskReq);

+ 49 - 37
application-facade/src/main/java/com/factory/wx/service/impl/PlanPassPMServiceImpl.java

@@ -1,9 +1,20 @@
 package com.factory.wx.service.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.factory.base.entity.aggregates.ResponseBean;
 import com.factory.base.util.res.ResponseBeanBuilder;
-import com.factory.web.entity.pm.*;
+import com.factory.web.entity.pm.ApprovalRule;
+import com.factory.web.entity.pm.OnsiteApprovalTask;
+import com.factory.web.entity.pm.OnsiteTask;
+import com.factory.web.entity.pm.OnsiteTitle;
+import com.factory.web.entity.pm.OnsiteWorkshop;
 import com.factory.web.entity.pm.res.ApprovalUserRes;
 import com.factory.web.mapper.pm.ApprovalRuleMapper;
 import com.factory.web.mapper.pm.OnsiteApprovalTaskMapper;
@@ -14,17 +25,15 @@ import com.factory.wx.entity.req.PlanApprovalTaskReq;
 import com.factory.wx.entity.req.PlanPassReq;
 import com.factory.wx.entity.req.SearchPlanPassReq;
 import com.factory.wx.entity.req.SendMsgReq;
-import com.factory.wx.entity.res.*;
+import com.factory.wx.entity.res.PlanPassDetailRes;
+import com.factory.wx.entity.res.PlanPassItemRes;
+import com.factory.wx.entity.res.PlanPassTaskRes;
+import com.factory.wx.entity.res.PlanPassWorkshopRes;
+import com.factory.wx.entity.res.WxPlanBaseInfoRes;
 import com.factory.wx.mapper.PlanPassMapper;
 import com.factory.wx.service.PlanPassPMService;
 import com.factory.wx.service.WxPlanService;
 import com.factory.wx.service.WxService;
-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;
 
 /**
  * @author sMArT
@@ -139,20 +148,22 @@ public class PlanPassPMServiceImpl implements PlanPassPMService {
     }
 
     /**
-     * 计划放行
+     * 防错计划放行
      *
      * @param planApprovalTaskReq
      * @return
      */
     @Override
-    public ResponseBean approvalPMTaskOperate(PlanApprovalTaskReq planApprovalTaskReq) {
+    public ResponseBean<Void> approvalPMTaskOperate(PlanApprovalTaskReq planApprovalTaskReq) {
         int updateStatus = 0; // 更新状态
         //更新防错审批信息
         updateStatus = updateOnsiteApprovalTask(planApprovalTaskReq);
         if (updateStatus > 0) {
             settingApprovalTask(planApprovalTaskReq);
+            return ResponseBeanBuilder.ok();
+        }else {
+        	return ResponseBeanBuilder.fail("无权放行");
         }
-        return ResponseBeanBuilder.ok();
     }
 
 
@@ -163,14 +174,21 @@ public class PlanPassPMServiceImpl implements PlanPassPMService {
      * @return
      */
     private int updateOnsiteApprovalTask(PlanApprovalTaskReq planApprovalTaskReq) {
-        int updateStatus;
-        OnsiteApprovalTask ot = new OnsiteApprovalTask();
-        ot.setOnsiteTaskId(planApprovalTaskReq.getTaskId());
-        ot.setReason(planApprovalTaskReq.getReason());
-        ot.setStatus(planApprovalTaskReq.getStatus());
-        updateStatus = onsiteApprovalTaskMapper.update(ot, Wrappers.<OnsiteApprovalTask>lambdaQuery()
+        int updateStatus = 0;
+        OnsiteApprovalTask otUpdate = new OnsiteApprovalTask();
+        otUpdate.setReason(planApprovalTaskReq.getReason());
+        otUpdate.setStatus(planApprovalTaskReq.getStatus());
+        otUpdate.setApprovalUserId(planApprovalTaskReq.getUserId());
+        
+        OnsiteApprovalTask otOld = onsiteApprovalTaskMapper.selectOne(Wrappers.<OnsiteApprovalTask>lambdaQuery()
                 .eq(OnsiteApprovalTask::getOnsiteTaskId, planApprovalTaskReq.getTaskId())
-                .eq(OnsiteApprovalTask::getApprovalUserId, planApprovalTaskReq.getUserId()));
+                .eq(OnsiteApprovalTask::getStatus, 0).last("limit 1"));
+        if(otOld==null||!planApprovalTaskReq.getRoleIds().contains(otOld.getApprovalRole())) {
+        	return updateStatus;
+        }
+        planApprovalTaskReq.setApprovalLevel(otOld.getApprovalLevel());
+        otUpdate.setId(otOld.getId()); 
+        updateStatus = onsiteApprovalTaskMapper.updateById(otUpdate);
         return updateStatus;
     }
 
@@ -199,9 +217,9 @@ public class PlanPassPMServiceImpl implements PlanPassPMService {
         if (planApprovalTaskReq.getStatus() == 1) {
             //审批通过,更新task状态
             updateOnsiteTask(planApprovalTaskReq);
-        }
-        //审批不通过触发下一级别
-        if (planApprovalTaskReq.getStatus() == 2) {
+        }else {
+//        //审批不通过触发下一级别
+//        if (planApprovalTaskReq.getStatus() == 2) {
             //设置防错下一级别审批
             setNextPMApprovalLevel(planApprovalTaskReq);
         }
@@ -214,30 +232,24 @@ public class PlanPassPMServiceImpl implements PlanPassPMService {
      * @return boolean 是否有下一级别
      */
     private void setNextPMApprovalLevel(PlanApprovalTaskReq planApprovalTaskReq) {
-        ApprovalRule approvalRuleMaxLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
-                .eq(ApprovalRule::getType, APPROVAL_TYPE_PM)
-                .orderByDesc(ApprovalRule::getApprovalLevel)
+        ApprovalRule approvalRuleNextLevel = approvalRuleMapper.selectOne(Wrappers.<ApprovalRule>lambdaQuery()
+                .eq(ApprovalRule::getType, ApprovalRule.APPROVAL_TYPE_PM)
+                .gt(ApprovalRule::getApprovalLevel, planApprovalTaskReq.getApprovalLevel())
+                .orderByAsc(ApprovalRule::getApprovalLevel)
                 .last("limit 1"));
-        //获取当前审批级别
-        OnsiteApprovalTask onsiteApprovalTask = onsiteApprovalTaskMapper.selectOne(Wrappers.<OnsiteApprovalTask>lambdaQuery()
-                .eq(OnsiteApprovalTask::getOnsiteTaskId, planApprovalTaskReq.getTaskId())
-                .eq(OnsiteApprovalTask::getApprovalUserId, planApprovalTaskReq.getUserId()).last("limit 1"));
-        int userLevel = onsiteApprovalTask.getApprovalLevel();
-        if (userLevel < approvalRuleMaxLevel.getApprovalLevel()) {
-            ApprovalUserRes approvalUserRes = preventMistakeService.getApprovalUserInfo(userLevel + 1, APPROVAL_TYPE_PM);
+        if (approvalRuleNextLevel!=null) {
             onsiteApprovalTaskMapper.insert(OnsiteApprovalTask.builder()
-                    .onsiteTaskId(onsiteApprovalTask.getOnsiteTaskId())
-                    .approvalLevel(approvalUserRes.getApprovalLevel())
-                    .approvalUserId(approvalUserRes.getUserId())
+                    .onsiteTaskId(planApprovalTaskReq.getTaskId())
+                    .approvalLevel(approvalRuleNextLevel.getApprovalLevel())
+                    .approvalRole(approvalRuleNextLevel.getRoleId())
                     .status(0)
                     .build());
             //向下一级别发送提醒
-            wxService.sendWechatMessage(SendMsgReq.builder()
-                    .toUserId(approvalUserRes.getUserId())
+            wxService.sendWechatMessageByRole(SendMsgReq.builder()
                     .title("计划放行")
                     .content("您有待放行的计划审批,请登录小程序查看")
                     .fromUserId(planApprovalTaskReq.getUserId())
-                    .build());
+                    .build(),approvalRuleNextLevel.getRoleId());
         } else {
             //如果是最后一个审批级别则设置task状态为不通过
             updateOnsiteTask(planApprovalTaskReq);

+ 36 - 21
application-facade/src/main/java/com/factory/wx/service/impl/PlanPassServiceImpl.java

@@ -1,6 +1,16 @@
 package com.factory.wx.service.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.factory.base.entity.aggregates.ResponseBean;
+import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.user.service.UserRoleService;
+import com.factory.web.entity.fa.res.FaPlanListRes;
 import com.factory.wx.entity.req.PlanApprovalTaskReq;
 import com.factory.wx.entity.req.PlanPageReq;
 import com.factory.wx.entity.res.PlanPassRes;
@@ -8,30 +18,26 @@ import com.factory.wx.mapper.PlanPassMapper;
 import com.factory.wx.service.PlanPassFAService;
 import com.factory.wx.service.PlanPassPMService;
 import com.factory.wx.service.PlanPassService;
-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 lombok.extern.slf4j.Slf4j;
 
 /**
  * @author sMArT
  * @version 1.0
  * @date 2021-07-13 12:42 下午
  */
+@Slf4j
 @Service("planPassService")
 public class PlanPassServiceImpl implements PlanPassService {
 
-    private final static Logger LOGGER = LoggerFactory.getLogger(PlanPassServiceImpl.class);
     @Autowired
     private PlanPassMapper planPassMapper;
     @Autowired
     private PlanPassFAService planPassFAService;
     @Autowired
     private PlanPassPMService planPassPMService;
-
+    @Autowired
+    private UserRoleService userRoleService;
     /**
      * 计划放行列表
      *
@@ -40,17 +46,21 @@ public class PlanPassServiceImpl implements PlanPassService {
      */
     @Override
     public List<PlanPassRes> getPassList(PlanPageReq planPageReq) {
-        //分页
-        planPageReq.setPage((planPageReq.getPage() - 1) * planPageReq.getSize());
-        List<PlanPassRes> planPassResList = new ArrayList<>();
-        //首件列表
-        if (planPageReq.getCheckType() == 1) {
-            planPassResList = planPassMapper.getPlanPassList(planPageReq);
-        }
-        //防错列表
-        if (planPageReq.getCheckType() == 2) {
-            planPassResList = planPassMapper.getPlanPassPMList(planPageReq);
-        }
+    	List<Long> roleIds =userRoleService.getRoleIdsByUserId(planPageReq.getUserId());
+    	List<PlanPassRes> planPassResList = new ArrayList<>();
+    	Page<PlanPassRes> page = new Page<>(planPageReq.getPage(), planPageReq.getSize());
+    	if(!roleIds.isEmpty()) {
+    		planPageReq.setRoleIds(roleIds);
+	        //分页
+	        //首件列表
+	        if(planPageReq.getCheckType() == 1) {
+	            planPassResList = planPassMapper.getPlanPassList(page,planPageReq);
+	        }
+	        //防错列表
+	        if (planPageReq.getCheckType() == 2) {
+	            planPassResList = planPassMapper.getPlanPassPMList(page,planPageReq);
+	        }
+    	}
         return planPassResList;
     }
 
@@ -61,8 +71,13 @@ public class PlanPassServiceImpl implements PlanPassService {
      * @return
      */
     @Override
-    public ResponseBean approvalTaskOperate(PlanApprovalTaskReq planApprovalTaskReq) {
-        ResponseBean responseBean = new ResponseBean();
+    public ResponseBean<Void> approvalTaskOperate(PlanApprovalTaskReq planApprovalTaskReq) {
+        ResponseBean<Void> responseBean = new ResponseBean<>();
+        List<Long> roleIds =userRoleService.getRoleIdsByUserId(planApprovalTaskReq.getUserId());
+        planApprovalTaskReq.setRoleIds(roleIds);
+        if(roleIds.isEmpty()) {
+        	return ResponseBeanBuilder.fail("无权放行");
+        }
         if (planApprovalTaskReq.getPlanType() == 1) {
             responseBean = planPassFAService.approvalFATaskOperate(planApprovalTaskReq);
         }

+ 15 - 10
application-facade/src/main/java/com/factory/wx/service/impl/PlanReminderServiceImpl.java

@@ -1,6 +1,14 @@
 package com.factory.wx.service.impl;
 
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.factory.web.entity.fa.FirstArticleItem;
 import com.factory.web.entity.fa.FirstArticleTitle;
 import com.factory.web.entity.fa.FirstArticleWorkshop;
@@ -10,7 +18,11 @@ 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;
-import com.factory.web.mapper.pm.*;
+import com.factory.web.mapper.pm.OnsiteCalendarMapper;
+import com.factory.web.mapper.pm.OnsiteItemMapper;
+import com.factory.web.mapper.pm.OnsiteTaskMapper;
+import com.factory.web.mapper.pm.OnsiteWorkshopMapper;
+import com.factory.web.mapper.pm.RemindApprovalTaskMapper;
 import com.factory.wx.entity.req.PlanInfoReq;
 import com.factory.wx.entity.req.PlanPageReq;
 import com.factory.wx.entity.res.PlanReminderDetailRes;
@@ -19,12 +31,6 @@ import com.factory.wx.entity.res.WxPlanBaseInfoRes;
 import com.factory.wx.mapper.ReminderMapper;
 import com.factory.wx.service.PlanReminderService;
 import com.factory.wx.service.WxPlanService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
 
 /**
  * @author sMArT
@@ -34,7 +40,6 @@ import java.util.List;
 @Service("planReminderService")
 public class PlanReminderServiceImpl implements PlanReminderService {
 
-    private final static Logger LOGGER = LoggerFactory.getLogger(PlanReminderServiceImpl.class);
     @Autowired
     private BentelerPlanMapper bentelerPlanMapper;
     @Autowired
@@ -64,8 +69,8 @@ public class PlanReminderServiceImpl implements PlanReminderService {
      */
     @Override
     public List<ReminderRes> getReminderList(PlanPageReq planPageReq) {
-        planPageReq.setPage((planPageReq.getPage() - 1) * planPageReq.getSize());
-        return reminderMapper.getReminderList(planPageReq);
+        Page<ReminderRes> page = new Page<>(planPageReq.getPage(),planPageReq.getSize());
+        return reminderMapper.getReminderList(page,planPageReq);
     }
 
     /**

+ 68 - 13
application-facade/src/main/java/com/factory/wx/service/impl/WxServiceImpl.java

@@ -1,5 +1,17 @@
 package com.factory.wx.service.impl;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.factory.base.entity.aggregates.ResponseBean;
 import com.factory.base.entity.task.AppEntry;
@@ -7,34 +19,26 @@ import com.factory.base.entity.task.PushWxMessage;
 import com.factory.base.entity.task.TemplateEntry;
 import com.factory.base.entity.task.ValEntry;
 import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.user.service.UserRoleService;
 import com.factory.wx.entity.UsUserWechat;
 import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.entity.res.FunctionsRes;
 import com.factory.wx.mapper.WxMapper;
 import com.factory.wx.service.WxPlanService;
 import com.factory.wx.service.WxService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @author sMArT
  * @version 1.0
  * @date 2021-07-12 4:08 下午
  */
+@Slf4j
 @Service("wxService")
 @Transactional(rollbackFor = Exception.class)
 public class WxServiceImpl implements WxService {
 
-    private final static Logger LOGGER = LoggerFactory.getLogger(WxServiceImpl.class);
 
     @Value("${wx.minprogram.appsecret}")
     private String appsecret;
@@ -55,6 +59,9 @@ public class WxServiceImpl implements WxService {
     private WxMapper wxMapper;
     @Autowired
     private WxPlanService wxPlanService;
+    
+    @Autowired
+    private UserRoleService userRoleService;
 
     @Override
     public ResponseBean<List<FunctionsRes>> getUserFunction(Long userId) {
@@ -130,11 +137,59 @@ public class WxServiceImpl implements WxService {
                         .build();
                 PushWxMessage.sendMessage(appEntry, tpl);
             } else {
-                LOGGER.error("下发微信消息,接收人userId:{}的openId为空", sendMsgReq.getToUserId());
+                log.error("下发微信消息,接收人userId:{}的openId为空", sendMsgReq.getToUserId());
             }
         } catch (Exception e) {
             e.printStackTrace();
-            LOGGER.error("下发微信消息异常");
+            log.error("下发微信消息异常");
         }
     }
+
+	@Override
+	public void sendWechatMessageByRole(SendMsgReq sendMsgReq, Long roleId) {
+		List<Long> list = userRoleService.getUserIdsByRoleId(roleId);
+		if(list.isEmpty()) {
+	        log.error("下发微信消息,角色:{}接收人为空", roleId);
+			return;
+		}
+		HashMap<String, ValEntry> dataMap = new HashMap<>();
+		 //提醒内容
+        dataMap.put("thing1", ValEntry.builder().value(sendMsgReq.getContent()).build());
+        //作业名称
+        dataMap.put("thing2", ValEntry.builder().value(sendMsgReq.getTitle()).build());
+        //截止日期
+        if (null != sendMsgReq.getEndTime()) {
+            dataMap.put("time3", ValEntry.builder().value(sendMsgReq.getEndTime()).build());
+        } else {
+            Date date = new Date();
+            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+            dataMap.put("time3", ValEntry.builder().value(ft.format(date)).build());
+        }
+        //发布人员
+        if (null != sendMsgReq.getFromUserId()) {
+            String fromUserName = wxPlanService.getUserNameById(sendMsgReq.getFromUserId());
+            dataMap.put("thing4", ValEntry.builder().value(fromUserName).build());
+        } else {
+            dataMap.put("thing4", ValEntry.builder().value("智云工厂系统").build());
+        }
+		for(Long userId:list) {
+			try {
+				String openId = wxMapper
+						.selectOne(Wrappers.<UsUserWechat>lambdaQuery().eq(UsUserWechat::getUserId, userId))
+						.getOpenid();
+				if (null != openId && !openId.isEmpty()) {
+					AppEntry appEntry = AppEntry.builder().appId(appid).secret(appsecret).build();
+					TemplateEntry tpl = TemplateEntry.builder().template_id(templateId).touser(openId).page(page)
+							.miniprogram_state(miniprogramState).data(dataMap).build();
+					PushWxMessage.sendMessage(appEntry, tpl);
+				} else {
+					log.error("下发微信消息,接收人userId:{}的openId为空", sendMsgReq.getToUserId());
+				}
+			} catch (Exception e) {
+				 log.error("下发微信消息异常",e);
+			}
+		}
+		
+	}
+    
 }

+ 15 - 10
application-facade/src/main/resources/mapper/PlanPassMapper.xml

@@ -14,17 +14,19 @@
         onsite_task ot,
         onsite_calendar oc,
         benteler_plan bp
-        WHERE
-        rat.onsite_task_id = ot.id
+        WHERE bp.plan_type=2 and bp.status in (4,5)
+        and  rat.onsite_task_id = ot.id
         AND ot.onsite_calendar_id = oc.id
         AND oc.benteler_plan_id = bp.id
         AND rat.`status` = 0
         AND ot.`status` = 1
-        AND rat.approval_user_id = #{userId}
-        <if test="name != ''">
-            AND bp.`name` LIKE CONCAT('%',#{name},'%')
+        AND rat.approval_role in
+        <foreach collection="req.roleIds" item="roleId" open="(" close=")" separator=",">
+        	#{roleId}
+        </foreach>
+        <if test="req.name!=null and req.name != ''">
+            AND bp.`name` LIKE CONCAT('%',#{req.name},'%')
         </if>
-        LIMIT #{page},#{size}
     </select>
     <!-- 获取用户待审批首件计划列表 -->
     <select id="getPlanPassList" parameterType="com.factory.wx.entity.req.PlanPageReq"
@@ -39,16 +41,19 @@
         first_article_calendar oc,
         benteler_plan bp
         WHERE
-        rat.first_article_task_id = ot.id
+        bp.plan_type=1 and bp.status in (4,5)
+        and rat.first_article_task_id = ot.id
         AND ot.first_article_calendar_id = oc.id
         AND oc.benteler_plan_id = bp.id
         AND rat.`status` = 0
         AND ot.`status` = 1
-        AND rat.approval_user_id = #{userId}
-        <if test="name != ''">
+        AND rat.approval_role in
+        <foreach collection="req.roleIds" item="roleId" open="(" close=")" separator=",">
+        	#{roleId}
+        </foreach>
+        <if test="req.name!=null and req.name != ''">
             AND bp.`name` LIKE CONCAT('%',#{name},'%')
         </if>
-        LIMIT #{page},#{size}
     </select>
     <!--    &lt;!&ndash; 防错计划放行详情 &ndash;&gt;-->
     <!--    <select id="getApprovalTaskList" resultType="com.factory.wx.entity.res.PlanApprovalTaskRes">-->

+ 27 - 29
application-facade/src/main/resources/mapper/PreventMistakeMapper.xml

@@ -200,35 +200,33 @@
 
     <!--取得Pad端防错计划列表 -->
     <select id="getPmPlanListForPad" resultType="com.factory.web.entity.pm.res.PmPlanListForPadRes">
-        SELECT DISTINCT ot.id AS onsite_task_id,
-        ot.`status`,
-        oc.benteler_plan_id,
-        bp.`name` AS benteler_plan_name,
-        oc.id AS onsite_calendar_id,
-        oc.type_flag
-        FROM onsite_task ot,
-        onsite_calendar oc,
-        benteler_plan bp,
-        onsite_workshop ow,
-        onsite_item oi
-        WHERE ot.onsite_calendar_id = oc.id
-        AND oc.benteler_plan_id = bp.id
-        AND ow.benteler_plan_id = bp.id
-        AND oi.workshop_id = ow.id
-        AND oi.type_flag = oc.type_flag
-        AND bp.pause_flag = 0
-        <if test="req.type == 0"> <!-- 未完成 -->
-            AND ot.`status` = 0
-        </if>
-        <if test="req.type == 1"> <!-- 已完成 -->
-            AND ot.`status` in (1, 2, 4)
-        </if>
-        <if test="req.type == 2"> <!-- 待重检(不放行) -->
-            AND ot.`status` = 3
-        </if>
-        AND TO_DAYS(ot.task_time) = TO_DAYS(NOW())
-        AND oc.user_id = #{req.userId}
-        -- GROUP BY ot.id
+    	SELECT DISTINCT 
+	        ot.id AS onsite_task_id,
+	        ot.`status`,
+	        oc.benteler_plan_id,
+	        bp.`name` AS benteler_plan_name,
+	        oc.id AS onsite_calendar_id,
+	        oc.type_flag
+        FROM 
+        onsite_task ot
+        join onsite_calendar oc on ot.onsite_calendar_id = oc.id
+        join benteler_plan bp on oc.benteler_plan_id = bp.id
+        join onsite_workshop ow on ow.benteler_plan_id = bp.id
+        join onsite_item oi on oi.type_flag = oc.type_flag
+        WHERE bp.pause_flag = 0 AND bp.status = 4 AND bp.deleted = 0
+        AND TO_DAYS(ot.task_time) = TO_DAYS(NOW()) AND oc.user_id = #{req.userId}
+		<choose>
+			<when test="req.type == 0"> <!-- 未完成 -->
+	            AND ot.`status` = 0
+	        </when>
+	        <when test="req.type == 1"> <!-- 已完成 -->
+	            AND ot.`status` in (1, 2, 4)
+	        </when>
+	        <when test="req.type == 2"> <!-- 待重检(不放行) -->
+	            AND ot.`status` = 3
+	        </when>
+		</choose>
+        
     </select>
 
     <!--取得审批人 -->

+ 6 - 7
application-facade/src/main/resources/mapper/ReminderMapper.xml

@@ -20,9 +20,9 @@
         AND ot.onsite_calendar_id = oc.id
         AND oc.benteler_plan_id = bp.id
         AND rat.task_type = 2
-        AND rat.approval_user_id = #{userId}
-        <if test="name != ''">
-            AND bp.`name` LIKE CONCAT('%',#{name},'%')
+        AND rat.approval_user_id = #{req.userId}
+        <if test="req.name!=null and req.name != ''">
+            AND bp.`name` LIKE CONCAT('%',#{req.name},'%')
         </if>
         UNION
         SELECT DISTINCT
@@ -40,12 +40,11 @@
         AND ot.first_article_calendar_id = oc.id
         AND oc.benteler_plan_id = bp.id
         AND rat.task_type = 1
-        AND rat.approval_user_id = #{userId}
-        <if test="name != ''">
-            AND bp.`name` LIKE CONCAT('%',#{name},'%')
+        AND rat.approval_user_id = #{req.userId}
+        <if test="req.name!=null and req.name != ''">
+            AND bp.`name` LIKE CONCAT('%',#{req.name},'%')
         </if>
         ORDER BY `status`
-        LIMIT #{page},#{size}
     </select>
     <update id="confirmReminder" parameterType="com.factory.wx.entity.req.PlanInfoReq">
         UPDATE remind_approval_task rat

+ 7 - 2
application-task/pom.xml

@@ -8,14 +8,19 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>application-task</artifactId>
-    <version>1.0</version>
     <packaging>jar</packaging>
 
     <dependencies>
         <dependency>
             <groupId>com.jihengbel.intelligent</groupId>
-            <artifactId>common-user</artifactId>
+            <artifactId>common-base</artifactId>
             <version>1.0</version>
+            <exclusions>
+            	 <exclusion>
+		            <groupId>com.baomidou</groupId>
+		            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+		        </exclusion>
+            </exclusions>
         </dependency>
     </dependencies>
     <build>

+ 3 - 1
application-task/src/main/java/com/factory/ApplicationTaskApplication.java

@@ -3,9 +3,11 @@ package com.factory;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
+@EnableScheduling
 @SpringBootApplication
-@MapperScan(value = "com.factory.mapper.**")
+@MapperScan(value = "com.factory.mapper")
 public class ApplicationTaskApplication {
 
     public static void main(String[] args) {

+ 11 - 9
application-task/src/main/java/com/factory/init/TimerTaskInit.java

@@ -1,23 +1,25 @@
 package com.factory.init;
 
-import com.factory.service.FirstTaskService;
-import com.factory.service.MsgService;
-import com.factory.service.OnsiteTaskService;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.annotation.PostConstruct;
+
 import org.quartz.Scheduler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.CommandLineRunner;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.stereotype.Component;
 
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
+import com.factory.service.FirstTaskService;
+import com.factory.service.MsgService;
+import com.factory.service.OnsiteTaskService;
 
 /**
  * 这个是启动就触发的部分
  */
 @Component
-public class TimerTaskInit implements CommandLineRunner {
+public class TimerTaskInit {
 
     @Value("${onsite.task.cron}")
     private String cron_1;
@@ -42,8 +44,8 @@ public class TimerTaskInit implements CommandLineRunner {
     MsgService msgService;
 
 
-    @Override
-    public void run(String... args) {
+    @PostConstruct
+    public void run() {
         ConcurrentMap<String, Object> param = new ConcurrentHashMap<>(16);
         param.put("onsiteTaskService", onsiteTaskService);
         param.put("firstTaskService", firstTaskService);

+ 17 - 0
application-task/src/main/java/com/factory/init/WebSocketTestSchedule.java

@@ -0,0 +1,17 @@
+package com.factory.init;
+
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WebSocketTestSchedule {
+
+	private static String message = "这是一个测试消息";
+	
+	@Scheduled(cron="0 0/1 * * * ?")
+	public void sendWebSocketMessage() {
+		System.out.println(message);
+		//TODO 更新计划中的3->4,并将4修改5
+		
+	}
+}

+ 0 - 37
application-task/src/main/java/com/factory/websocket/Test.java

@@ -1,37 +0,0 @@
-package com.factory.websocket;
-
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.socket.TextMessage;
-import org.springframework.web.socket.WebSocketSession;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-@RestController
-public class Test {
-
-    /**
-     * @throws IOException
-     */
-    @GetMapping("/websocket/pushone")
-    public void pushTest() throws IOException {
-        List<String> pool = new ArrayList<String>(WsSessionManager.SESSION_POOL.keySet());
-        for (String key : pool) {
-            try {
-                sendMsgtoPad(key);
-            } catch (Throwable e) {
-                WsSessionManager.removeAndClose(key);//异常移除以免内存泄漏
-            }
-        }
-    }
-
-
-    private void sendMsgtoPad(String key) throws IOException {
-        WebSocketSession session = WsSessionManager.get(key);
-        if (session != null) {
-            session.sendMessage(new TextMessage("test111111111111111111111111111啥地方啥地方回家"));
-        }
-    }
-}

+ 31 - 0
application-task/src/main/java/com/factory/websocket/WebSocketController.java

@@ -0,0 +1,31 @@
+package com.factory.websocket;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/websocket")
+public class WebSocketController {
+
+	/**
+	 * @throws IOException
+	 */
+	@GetMapping("broadcast")
+	public void pushTest(@RequestParam String message) {
+		List<String> pool = new ArrayList<String>(WsSessionManager.SESSION_POOL.keySet());
+		for (String key : pool) {
+			WsSessionManager.sendMessage(key, message);
+		}
+	}
+
+	@GetMapping("pushone")
+	public void pushTest(@RequestParam String message, String key) {
+		WsSessionManager.sendMessage(key, message);
+	}
+}

+ 12 - 0
application-task/src/main/java/com/factory/websocket/WsSessionManager.java

@@ -1,5 +1,6 @@
 package com.factory.websocket;
 
+import org.springframework.web.socket.TextMessage;
 import org.springframework.web.socket.WebSocketSession;
 
 import java.io.IOException;
@@ -53,4 +54,15 @@ public class WsSessionManager {
     public static WebSocketSession get(String key) {
         return SESSION_POOL.get(key);
     }
+    
+    public static void sendMessage(String key,String message) {
+    	try {
+			WebSocketSession session = WsSessionManager.get(key);
+			if (session != null) {
+				session.sendMessage(new TextMessage(message));
+			}
+    	}catch (Throwable e) {
+			WsSessionManager.removeAndClose(key);// 异常移除以免内存泄漏
+		}
+    }
 }

+ 0 - 33
application-task/src/main/resources/application-test.properties

@@ -1,33 +0,0 @@
-# 设置端口
-server.port=8099
-server.servlet.context-path=/task/
-# 数据库配置
-spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://39.100.230.190:8092/crocodile?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=round&transformedBitIsBoolean=true&allowMultiQueries=true
-spring.datasource.username=root
-spring.datasource.password=Jh@Jh2019!
-# druid 配置
-spring.datasource.filters=stat
-spring.datasource.maxActive=10
-spring.datasource.initialSize=5
-spring.datasource.maxWait=60000
-spring.datasource.minIdle=1
-spring.datasource.timeBetweenEvictionRunsMillis=60000
-spring.datasource.minEvictableIdleTimeMillis=300000
-spring.datasource.testWhileIdle=true
-spring.datasource.testOnBorrow=false
-spring.datasource.testOnReturn=false
-spring.datasource.poolPreparedStatements=false
-spring.datasource.maxOpenPreparedStatements=20
-spring.datasource.validationQuery=show status like "%Service_Status%"
-#每日执行job时间 每日2点用于执行onsite任务的生成
-onsite.task.cron=0 */5 * * * ? 
-#onsite 工作提醒
-onsite.remind.work.cron=0 */5 * * * ? 
-#每日执行job时间 每日2点用于执行onsite任务的生成
-first.task.cron=0 */5 * * * ? 
-#onsite 工作提醒
-first.remind.work.cron=0 */5 * * * ? 
-wx.minprogram.miniprogramState=trial
-

+ 39 - 0
application-task/src/main/resources/application-test.yml

@@ -0,0 +1,39 @@
+server: 
+  port: 8099
+  servlet: 
+    context-path: /task/
+spring: 
+  datasource: 
+     type: com.alibaba.druid.pool.DruidDataSource
+     driver-class-name: com.mysql.cj.jdbc.Driver
+     url: jdbc:mysql://39.100.230.190:8092/crocodile?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=round&transformedBitIsBoolean=true&allowMultiQueries=true
+     username: root
+     password: 'Jh@Jh2019!'
+     filters: stat
+     maxActive: 10
+     initialSize: 5
+     maxWait: 60000
+     minIdle: 1
+     timeBetweenEvictionRunsMillis: 60000
+     minEvictableIdleTimeMillis: 300000
+     testWhileIdle: true
+     testOnBorrow: false
+     testOnReturn: false
+     poolPreparedStatements: false
+     maxOpenPreparedStatements: 20
+     validationQuery: 'show status like "%Service_Status%"'
+onsite: 
+  task: 
+    cron: 0 */5 * * * ?
+  remind: 
+    work: 
+      cron: 0 */5 * * * ?
+first: 
+  task: 
+    cron: 0 */5 * * * ?
+  remind: 
+    work: 
+      cron: 0 */5 * * * ?
+wx:
+  minprogram:
+    miniprogramState: trial

+ 0 - 31
application-task/src/main/resources/application-uat.properties

@@ -1,31 +0,0 @@
-# 设置端口
-server.port=8099
-server.servlet.context-path=/task/
-# 数据库配置
-spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://39.100.230.190:8092/crocodile?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=round&transformedBitIsBoolean=true&allowMultiQueries=true
-spring.datasource.username=root
-spring.datasource.password=Jh@Jh2019!
-# druid 配置
-spring.datasource.filters=stat
-spring.datasource.maxActive=50
-spring.datasource.initialSize=20
-spring.datasource.maxWait=60000
-spring.datasource.minIdle=1
-spring.datasource.timeBetweenEvictionRunsMillis=60000
-spring.datasource.minEvictableIdleTimeMillis=300000
-spring.datasource.testWhileIdle=true
-spring.datasource.testOnBorrow=false
-spring.datasource.testOnReturn=false
-spring.datasource.poolPreparedStatements=true
-spring.datasource.maxOpenPreparedStatements=20
-spring.datasource.validationQuery=show status like "%Service_Status%"
-#每日执行job时间 每日2点用于执行onsite任务的生成
-onsite.task.cron=0 0 2 * * ?
-#onsite 工作提醒
-onsite.remind.work.cron=0 */5 * * * ? 
-#每日执行job时间 每日2点用于执行onsite任务的生成
-first.task.cron=0 0 2 * * ?
-#onsite 工作提醒
-first.remind.work.cron=0 */5 * * * ? 

+ 44 - 0
application-task/src/main/resources/application-uat.yml

@@ -0,0 +1,44 @@
+server: 
+  port: 8099
+  servlet: 
+    context-path: /task/
+spring: 
+  datasource: 
+     type: com.alibaba.druid.pool.DruidDataSource
+     driver-class-name: com.mysql.cj.jdbc.Driver
+     url: jdbc:mysql://39.100.230.190:8092/crocodile?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=round&transformedBitIsBoolean=true&allowMultiQueries=true
+     username: root
+     password: 'Jh@Jh2019!'
+     filters: stat
+     maxActive: 10
+     initialSize: 5
+     maxWait: 60000
+     minIdle: 1
+     timeBetweenEvictionRunsMillis: 60000
+     minEvictableIdleTimeMillis: 300000
+     testWhileIdle: true
+     testOnBorrow: false
+     testOnReturn: false
+     poolPreparedStatements: false
+     maxOpenPreparedStatements: 20
+     validationQuery: 'show status like "%Service_Status%"'
+onsite: 
+  task: 
+    cron: 0 0 2 * * ?
+#每日执行job时间 每日2点用于执行onsite任务的生成
+  remind: 
+    work: 
+      cron: 0 */5 * * * ? 
+#onsite 工作提醒      
+first: 
+  task: 
+    cron: 0 0 2 * * ?
+#每日执行job时间 每日2点用于执行onsite任务的生成
+  remind: 
+    work: 
+      cron: 0 */5 * * * ? 
+#onsite 工作提醒
+wx:
+  minprogram:
+    miniprogramState: trial
+

+ 0 - 8
application-task/src/main/resources/application.properties

@@ -1,8 +0,0 @@
-spring.profiles.active=test
-mybatis.mapperLocations=classpath:mappers/*.xml
-mybatis.config-locations=conf/mybatis-config.xml
-wx.minprogram.appid=wxfd6e42e05b91163c
-wx.minprogram.appsecret=7c4e39a33bf8b66beb919b9ad0a15832
-wx.minprogram.templateId=3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50
-wx.minprogram.page=pages/login/index
-wx.minprogram.miniprogramState=formal

+ 25 - 0
application-task/src/main/resources/application.yml

@@ -0,0 +1,25 @@
+spring: 
+  profiles: 
+    active: test
+mybatis-plus:
+  mapper-locations: classpath*:mappers/*Mapper.xml
+  typeAliasesPackage: com.factory.model
+  global-config:
+    db-config:
+      table-underline: true
+      logic-delete-field: deleted  #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
+      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
+      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
+  configuration:
+    #驼峰下划线转换
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+    jdbc-type-for-null: 'null'
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+wx: 
+  minprogram:  
+    appid: wxfd6e42e05b91163c
+    appsecret: 7c4e39a33bf8b66beb919b9ad0a15832
+    templateId: 3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50
+    page: pages/login/index
+    miniprogramState: formal

+ 0 - 1
application-task/src/main/resources/mappers/FirstTaskMapper.xml

@@ -2,7 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.factory.mapper.FirstTaskMapper">
 
-
     <resultMap id="calendarFirst" type="com.factory.base.entity.task.FirstCalendar">
         <id column="id" property="id"/>
         <result column="benteler_plan_id" property="benteler_plan_id"/>

+ 4 - 3
application-task/src/main/resources/mappers/OnsiteTaskMapper.xml

@@ -2,7 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.factory.mapper.OnsiteTaskMapper">
 
-
     <resultMap id="calendarOnsite" type="com.factory.base.entity.task.OnsiteCalendar">
         <id column="id" property="id"/>
         <result column="benteler_plan_id" property="benteler_plan_id"/>
@@ -81,9 +80,11 @@
     </select>
 
     <select id="getCalenderOnsitesForType" resultMap="calendarOnsite">  <!-- todo  这个还需要状态 -->
-        SELECT b.* FROM benteler_plan a,onsite_calendar b,onsite_approval_plan oap
+        SELECT b.* 
+        FROM benteler_plan a,onsite_calendar b,onsite_approval_plan oap
         WHERE
-        a.id=b.benteler_plan_id and a.pause_flag=0 and a.deleted=0 and a.effective_date &lt;= now()
+        a.id=b.benteler_plan_id and a.pause_flag=0 and a.status=4 and a.deleted=0 and a.effective_date &lt;= now()
+        
         and b.type_flag=${type_flag}
         <if test="week_day != null and week_day != ''">
             and b.week_day &gt;= ${week_day}

+ 11 - 0
common-user/src/main/java/com/factory/user/mapper/UserRoleMapper.java

@@ -1,7 +1,18 @@
 package com.factory.user.mapper;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.factory.base.entity.po.remote.UserRole;
 
 public interface UserRoleMapper extends BaseMapper<UserRole> {
+	@Select({" SELECT uur.user_id",
+			" FROM us_user_role uur,us_user uu",
+			" WHERE uu.id = uur.user_id" ,
+			" AND uu.del_flag = 0" ,
+			" AND uu.`lock` = 0 and uur.role_id=#{roleId}"})
+	List<Long> getUserIdsByRoleId(@Param("roleId")Long roleId);
 }

+ 1 - 1
common-user/src/main/java/com/factory/user/service/UserRoleService.java

@@ -13,5 +13,5 @@ public interface UserRoleService extends IService<UserRole> {
 
     List<Long> getRoleIdsByUserId(Long userId);
 
-
+    List<Long> getUserIdsByRoleId(Long roleId);
 }

+ 23 - 19
common-user/src/main/java/com/factory/user/service/impl/UserRoleServiceImpl.java

@@ -13,23 +13,27 @@ import java.util.stream.Collectors;
 @Service
 public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {
 
-    @Override
-    public boolean userHasRole(Long userId, Long roleId) {
-        return getRoleIdsByUserId(userId).contains(roleId);
-    }
-
-    @Override
-    public List<UserRole> getRolesByUserId(Long userId) {
-        List<UserRole> userRoleList = list(
-                Wrappers.<UserRole>lambdaQuery()
-                        .eq(UserRole::getUserId, userId));
-        return userRoleList;
-    }
-
-    @Override
-    public List<Long> getRoleIdsByUserId(Long userId) {
-        List<UserRole> userRoleList = getRolesByUserId(userId);
-        List<Long> roleIds = userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList());
-        return roleIds;
-    }
+	@Override
+	public boolean userHasRole(Long userId, Long roleId) {
+		return getRoleIdsByUserId(userId).contains(roleId);
+	}
+
+	@Override
+	public List<UserRole> getRolesByUserId(Long userId) {
+		List<UserRole> userRoleList = list(Wrappers.<UserRole>lambdaQuery().eq(UserRole::getUserId, userId));
+		return userRoleList;
+	}
+
+	@Override
+	public List<Long> getRoleIdsByUserId(Long userId) {
+		List<UserRole> userRoleList = getRolesByUserId(userId);
+		List<Long> roleIds = userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList());
+		return roleIds;
+	}
+
+	@Override
+	public List<Long> getUserIdsByRoleId(Long roleId) {
+		return this.baseMapper.getUserIdsByRoleId(roleId);
+	}
+
 }