Kaynağa Gözat

版本更新

zt 4 ay önce
ebeveyn
işleme
91d344b3ca

Dosya farkı çok büyük olduğundan ihmal edildi
+ 627 - 1426
pro-base/src/main/java/com/idea/oa/activiti/service/ProActiService.java


+ 3 - 1
pro-base/src/main/java/com/idea/oa/apply/util/constant/ConstantFlowType.java

@@ -50,7 +50,9 @@ public class ConstantFlowType {
     public final static String[] ROLES_CHECK = {"cnzf", "zffh"};//出纳查看(不带主类型)
 
     public final static String ROLETYPE = "FLOW";
-    public final static String ROLETYPE2 = "DATA"; // 采购申请用
+
+    //可以进行跳过的节点
+    public final static String[] CAN_JUMP_ROLES={"flow_sjfgld"};
 
 
     //流程类型/名称(off_work请假申请;paymen付款申请;use_money费用报支(因为比较繁杂,用英文字符串表示))',

+ 87 - 150
pro-base/src/main/java/com/idea/oa/flow2/controller/FlowMainController.java

@@ -2,9 +2,6 @@ package com.idea.oa.flow2.controller;
 
 import com.github.pagehelper.PageInfo;
 import com.idea.oa.activiti.service.ProActiService;
-import com.idea.oa.apply.model.*;
-
-import com.idea.oa.apply.service.*;
 import com.idea.oa.apply.util.constant.ConstantFlowType;
 import com.idea.oa.apply.util.service.RunerLoadOneService;
 import com.idea.oa.flow2.model.FlowMain;
@@ -19,29 +16,14 @@ import com.idea.oa.flow2.model.out.IMGFlowHistoryInfo;
 import com.idea.oa.flow2.service.FlowMainLogService;
 import com.idea.oa.flow2.service.FlowMainPushService;
 import com.idea.oa.flow2.service.FlowMainService;
-
-//import com.idea.oa.outsource.model.OutOrderMain;
-//import com.idea.oa.outsource.model.OutOrderMainExample;
-//import com.idea.oa.outsource.model.OutOrderPay;
-//import com.idea.oa.outsource.model.OutOrderPayExample;
-//import com.idea.oa.outsource.service.OutOrderMainService;
-//import com.idea.oa.outsource.service.OutOrderPayService;
-import com.idea.util.DateUtils;
-import com.idea.util.OAUtil;
-import com.idea.workPanel.enume.HandleTypeEnum;
-import com.idea.workPanel.mapper.ParkWaitHandleMapper;
-import com.idea.workPanel.model.ParkWaitHandle;
-import com.idea.workPanel.model.ParkWaitHandleExample;
-import com.idea.workPanel.service.ParkWaitHandleService;
+import com.idea.oa.holidayManagement.model.HolidayManagement;
+import com.idea.oa.holidayManagement.service.HolidayManagementService;
 import com.rockstar.common.base.BaseController;
 import com.rockstar.common.domain.AjaxResult;
 import com.rockstar.flow.exception.FlowException;
 import com.rockstar.flow.model.FlowDefinition;
 import com.rockstar.flow.service.FlowDefinitionService;
 import com.rockstar.flow.service.FlowService;
-import com.rockstar.frame.model.FramePermission;
-import com.rockstar.frame.model.FramePermissionExample;
-import com.rockstar.frame.model.FrameUser;
 import com.rockstar.frame.model.extend.DateTrans;
 import com.rockstar.frame.model.extend.TableSplitResult;
 import com.rockstar.frame.model.extend.Tablepar;
@@ -49,13 +31,11 @@ import com.rockstar.shiro.util.ShiroUtils;
 import com.rockstar.util.StringUtils;
 import com.rockstar.util.UUIDUtils;
 import io.swagger.annotations.Api;
-import lombok.extern.slf4j.Slf4j;
 import org.activiti.bpmn.model.SequenceFlow;
 import org.activiti.bpmn.model.UserTask;
-import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -64,20 +44,20 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Created by zt
  */
-@Slf4j
 @Controller
 @RequestMapping(value = "FlowMainController")
 @Api(value = "申请流程/主表_主申请审核表")
 public class FlowMainController extends BaseController {
 
 
+    @Autowired
+    private HolidayManagementService holidayManagementService;
+
 
 //    @Autowired
 //    private ApplyAddWorkTimeService applyAddWorkTimeService;
@@ -104,24 +84,6 @@ public class FlowMainController extends BaseController {
 //    private OutOrderMainService outOrderMainService;
 //    @Autowired
 //    private OutOrderPayService outOrderPayService;
-    @Autowired
-    private ParkWaitHandleService parkWaitHandleService;
-    @Autowired
-    private ApplyCheckInService applyCheckInService;
-    @Autowired
-    private ApplyPaymentSettleService applyPaymentSettleService;
-    @Autowired
-    private ApplyContractService applyContractService;
-    @Autowired
-    private ApplyReceivablesAdjustService applyReceivablesAdjustService;
-    @Autowired
-    private ApplyInvoiceRedService applyInvoiceRedService;
-    @Autowired
-    private ApplyBuyingMoreService applyBuyingMoreService;
-    @Autowired
-    private ApplyFinanceService applyFinanceService;
-
-
 
 
     /**
@@ -171,6 +133,11 @@ public class FlowMainController extends BaseController {
         return outgoingFlows;
     }
 
+//    @Autowired
+//    private ApplyProjectProposalService applyProjectProposalService;
+
+//    @Autowired
+//    private ProMainService proMainService;
     /**
      * 申请人撤回申请
      * 申请人撤回申请
@@ -180,7 +147,28 @@ public class FlowMainController extends BaseController {
      */
     @PostMapping(value = "recallApply", produces = {"application/json;charset=UTF-8"})
     @ResponseBody
+    @Transactional
     public AjaxResult recallApply(String flowMainid) {
+        {
+            //业务有需要的话,在这里进行撤回
+            FlowMain flowMain = modelService.selectByPrimaryKey(flowMainid);
+            if ("project_proposal1".equals(flowMain.getFlowType())||"project_proposal".equals(flowMain.getFlowType())){
+//                ApplyProjectProposal applyProjectProposal = new ApplyProjectProposal();
+//                applyProjectProposal.setId(flowMain.getFormId());
+//                applyProjectProposal.setStatus(3);
+//                applyProjectProposalService.updateByPrimaryKeySelective(applyProjectProposal);
+//
+//                {
+//                    ApplyProjectProposal applyProjectProposal1 = applyProjectProposalService.selectByPrimaryKey(flowMain.getFormId());
+//                    String tableProMainId = applyProjectProposal1.getTableProMainId();
+//                    ProMain proMain = proMainService.selectByPrimaryKey(tableProMainId);
+//                    //修改项目信息-不通过
+//                    proMain.setValidstatus("3");
+//                    proMainService.updateByPrimaryKeySelective(proMain);
+//                }
+
+            }
+        }
         return modelService.recallApply(flowMainid);
 
 //        if (StringUtils.isEmpty(flowMainid)) {
@@ -446,7 +434,7 @@ public class FlowMainController extends BaseController {
                 {// 需要工作流引擎的支持
                     newflowMainPush.setPushUser(entity.getPushEntrustId());//推送人id'
                     newflowMainPush.setPushUserKey(flowMainPush.getPushUserKey());//推送时彭总给的key值
-                    newflowMainPush.setNodeName(flowMainPush.getNodeName() + "_流程监控室委托审核");
+                    newflowMainPush.setNodeName(flowMainPush.getNodeName() + "_委托审核");
                     newflowMainPush.setPushType(flowMainPush.getPushType());//推送类型1单流程推送,2串联推送,3并联推送
                     newflowMainPush.setPushRole(2);//'推送人身份:1本人审核,2被委托人(代理审核人审核权限)',
                     newflowMainPush.setFlowType(flowMainPush.getFlowType());
@@ -460,6 +448,7 @@ public class FlowMainController extends BaseController {
                 newflowMainPush.setCreatedBy(ShiroUtils.getUser().getId());
                 newflowMainPush.setUpdatedBy(newflowMainPush.getCreatedBy());
                 newflowMainPush.setGroupId(ShiroUtils.getUser().getGroupId());
+                newflowMainPush.setNodeUserRole(flowMainPush.getNodeUserRole());
                 newflowMainPush.setStatus(0);
                 newflowMainPush.setRemark("流程监控委托操作");
                 flowMainPushService.insert(newflowMainPush);
@@ -571,111 +560,12 @@ public class FlowMainController extends BaseController {
                 newflowMainPush.setCreatedBy(ShiroUtils.getUser().getId());
                 newflowMainPush.setUpdatedBy(newflowMainPush.getCreatedBy());
                 newflowMainPush.setGroupId(ShiroUtils.getUser().getGroupId());
+                newflowMainPush.setNodeUserRole(flowMainPush.getNodeUserRole());
                 newflowMainPush.setStatus(0);
                 flowMainPushService.insert(newflowMainPush);
-
-                try {
-                    FlowMain flowMain = modelService.selectByPrimaryKey(flowMainPush.getFlowMainId());
-                    // 进行审核操作后 就要处理待办 清除数据
-                    String param = "id=" + flowMain.getId() + "&flowMainPushId=" + entity.getFlowMainPushId() + "&applyUser=" + flowMain.getApplyUser();
-                    // 付款申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.PAYMENT)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.FK;
-                        HandleTypeEnum.FK.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.FK, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                    // 入驻申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.CHECK_IN)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.RZ;
-                        HandleTypeEnum.RZ.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.RZ, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                    // 合同用章申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.CONTRACT)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.HTYZ;
-                        HandleTypeEnum.HTYZ.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.HTYZ, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                    // 应收款调整申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.RECEIVABLES_ADJUST)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.YSKTZ;
-                        HandleTypeEnum.YSKTZ.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.YSKTZ, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                    // 发票红冲申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.INVOICE_RED)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.FPHC;
-                        HandleTypeEnum.FPHC.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.FPHC, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                    // 回购申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.BUYING_MORE)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.HG;
-                        HandleTypeEnum.HG.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.HG, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                    // 上交财政申请
-                    if(flowMain.getFlowType().equals(ConstantFlowType.FINANCE)){
-                        String waitUrl = parkWaitHandleService.getUrl("流程审批", "付款流程审批");
-                        HandleTypeEnum typeEnum = HandleTypeEnum.SJCZ;
-                        HandleTypeEnum.SJCZ.setUrl(waitUrl);
-                        // 处理待办
-                        parkWaitHandleService.userHandle(HandleTypeEnum.SJCZ, param, ShiroUtils.getUserId());
-                        // 泛微处理待办
-                        parkWaitHandleService.userHandleOa(entity.getFlowMainPushId(),flowMain);
-                        // 推送待办和泛微待办
-                        parkWaitHandleService.pushOaAndHandle(newflowMainPush,flowMain,typeEnum);
-                    }
-                }catch (Exception e){
-                    log.error("推送异常", e);
-                }
-
-
             }
 
-
-
         }
-
-
-
-
         return result(1);
     }
 //=====下面是查询=============================================================================================
@@ -912,13 +802,51 @@ public class FlowMainController extends BaseController {
 
             FlowMainLog flowMainLog = flowMainLogService.selectByPrimaryKey(flowMain.getLastMainLogId());
             if (flowMainLog.getAuditResult().equals("1")) {//最后的操作是同意操作
-                if (flowMain.getFlowType().equals(ConstantFlowType.OFF_WORK)) {
-                    //请假进行回滚
-                    //1进行请假申请的查询
-                    //2.如果查到请假中有年假或者调休需要查年假管理表进行修改
-                    //3.最后删除对应的考勤日志
+                 if (flowMain.getFlowType().equals(ConstantFlowType.ADD_WORK)) {
+                    //加班进行回滚
+//                    ApplyAddWorkTimeExample example = new ApplyAddWorkTimeExample();
+//                    example.createCriteria().andAddWorkIdEqualTo(flowMain.getFormId());
+//                    List<ApplyAddWorkTime> applyOffWorkTimeList = applyAddWorkTimeService.selectByExample(example);
+                    //获取所有的加班时间
+                    BigDecimal totaluseTime = new BigDecimal(0);
+                    //2========================================================
+                    {  //获取总共加班时间
+//                        for (ApplyAddWorkTime applyAddWorkTime : applyOffWorkTimeList) {
+//                            totaluseTime = totaluseTime.add(applyAddWorkTime.getUseTime(), MathContext.DECIMAL32);
+//                        }
 
+                    }
+
+                    HolidayManagement hoidayManagement = holidayManagementService.selectOneByUserId(flowMain.getApplyUser());
+                    {//进行判断
+                        if (hoidayManagement == null) {
+                            return AjaxResult.error("没有找到用户:" + flowMain.getApplyUser() + "假期信息");
+                        }
+                        if (!hoidayManagement.getStatus().equals(0)) {
+                            return AjaxResult.error("用户:" + flowMain.getApplyUser() + "已经删除,请重新确认");
+                        }
+                    }
+//                    剩余调休假小时(要减去冻结的小时)',
+                    Double restExchangeTime = hoidayManagement.getRestExchangeTime();
+
+                    if (totaluseTime.doubleValue() > restExchangeTime) {
+                        return AjaxResult.error("剩余调休假不够抵扣退回的加班时间,请退回调休时间后再操作");
+                    }
 
+                    BigDecimal restExchangeTimeDecimal = new BigDecimal(restExchangeTime).subtract(totaluseTime, MathContext.DECIMAL32);
+                    {//修改假期信息
+                        HolidayManagement updatehoidayManagement = new HolidayManagement();
+                        //restExchangeTimeDecimal放到
+                        updatehoidayManagement.setId(hoidayManagement.getId());
+                        updatehoidayManagement.setRestExchangeTime(restExchangeTimeDecimal.doubleValue());
+                        holidayManagementService.updateByPrimaryKeySelective(updatehoidayManagement);
+                    }
+
+//                    for (ApplyAddWorkTime applyAddWorkTime : applyOffWorkTimeList) {
+//                        //删除对应的考勤日志
+//                        workAttendanceLogService.deleteListByTableNameAndTableId("apply_add_work_time", applyAddWorkTime.getId());
+//
+//                    }
                 }
             }
         }
@@ -930,6 +858,15 @@ public class FlowMainController extends BaseController {
         record.setUpdatedBy(ShiroUtils.getUser().getId());
 
         int i = modelService.updateByPrimaryKeySelective(record);
+
+        List<FlowMainPush> pushByFlowMainId = flowMainPushService.findPushByFlowMainId(id);
+        for (FlowMainPush flowMainPush : pushByFlowMainId) {
+            flowMainPush.setStatus(1);
+            flowMainPush.setUpdatedAt(new Date());
+            flowMainPush.setUpdatedBy(ShiroUtils.getUser().getId());
+            flowMainPushService.updateByPrimaryKeySelective(flowMainPush);
+        }
+
         return result(i);
     }
 

Dosya farkı çok büyük olduğundan ihmal edildi
+ 45 - 18
pro-base/src/main/java/com/idea/oa/flow2/mapper/FlowMainExtendMapper.java


+ 4 - 0
pro-base/src/main/java/com/idea/oa/flow2/mapper/FlowMainPushMapper.java

@@ -3,6 +3,7 @@ package com.idea.oa.flow2.mapper;
 import com.idea.oa.flow2.model.FlowMainPush;
 import com.idea.oa.flow2.model.FlowMainPushExample;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -30,4 +31,7 @@ public interface FlowMainPushMapper {
     int updateByPrimaryKeySelective(FlowMainPush record);
 
     int updateByPrimaryKey(FlowMainPush record);
+
+    @Select("UPDATE flow_main_push SET STATUS=2,updated_by=#{userId},updated_at=NOW() WHERE flow_main_push.up_main_log_id=#{upMainLogId} AND flow_main_push.id !=#{id} and status=0")
+    void updateStatusTwoByUpMainLogId(@Param("userId") String userId,@Param("upMainLogId") String upMainLogId,@Param("id") String id);
 }

+ 10 - 0
pro-base/src/main/java/com/idea/oa/flow2/model/FlowMainLog.java

@@ -46,6 +46,8 @@ public class FlowMainLog implements Serializable {
 
     private String remark;
 
+    private String signFileId;
+
     private static final long serialVersionUID = 1L;
 
     public String getId() {
@@ -215,4 +217,12 @@ public class FlowMainLog implements Serializable {
     public void setRemark(String remark) {
         this.remark = remark == null ? null : remark.trim();
     }
+
+    public String getSignFileId() {
+        return signFileId;
+    }
+
+    public void setSignFileId(String signFileId) {
+        this.signFileId = signFileId;
+    }
 }

+ 140 - 0
pro-base/src/main/java/com/idea/oa/flow2/model/FlowMainLogExample.java

@@ -1484,6 +1484,146 @@ public class FlowMainLogExample {
             addCriterion("remark not between", value1, value2, "remark");
             return (Criteria) this;
         }
+
+        public Criteria andPushUserKeyIsNull() {
+            addCriterion("push_user_key is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyIsNotNull() {
+            addCriterion("push_user_key is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyEqualTo(String value) {
+            addCriterion("push_user_key =", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyNotEqualTo(String value) {
+            addCriterion("push_user_key <>", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyGreaterThan(String value) {
+            addCriterion("push_user_key >", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyGreaterThanOrEqualTo(String value) {
+            addCriterion("push_user_key >=", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyLessThan(String value) {
+            addCriterion("push_user_key <", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyLessThanOrEqualTo(String value) {
+            addCriterion("push_user_key <=", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyLike(String value) {
+            addCriterion("push_user_key like", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyNotLike(String value) {
+            addCriterion("push_user_key not like", value, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyIn(List<String> values) {
+            addCriterion("push_user_key in", values, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyNotIn(List<String> values) {
+            addCriterion("push_user_key not in", values, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyBetween(String value1, String value2) {
+            addCriterion("push_user_key between", value1, value2, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushUserKeyNotBetween(String value1, String value2) {
+            addCriterion("push_user_key not between", value1, value2, "pushUserKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdIsNull() {
+            addCriterion("main_push_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdIsNotNull() {
+            addCriterion("main_push_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdEqualTo(String value) {
+            addCriterion("main_push_id =", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdNotEqualTo(String value) {
+            addCriterion("main_push_id <>", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdGreaterThan(String value) {
+            addCriterion("main_push_id >", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdGreaterThanOrEqualTo(String value) {
+            addCriterion("main_push_id >=", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdLessThan(String value) {
+            addCriterion("main_push_id <", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdLessThanOrEqualTo(String value) {
+            addCriterion("main_push_id <=", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdLike(String value) {
+            addCriterion("main_push_id like", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdNotLike(String value) {
+            addCriterion("main_push_id not like", value, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdIn(List<String> values) {
+            addCriterion("main_push_id in", values, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdNotIn(List<String> values) {
+            addCriterion("main_push_id not in", values, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdBetween(String value1, String value2) {
+            addCriterion("main_push_id between", value1, value2, "mainPushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMainPushIdNotBetween(String value1, String value2) {
+            addCriterion("main_push_id not between", value1, value2, "mainPushId");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {

+ 1 - 1
pro-base/src/main/java/com/idea/oa/flow2/model/in/TargetUserAndFlowRole.java

@@ -10,7 +10,7 @@ import lombok.Data;
  * onlyFlowFlowStep:本分支的全部步骤,如果flowRole有,就可以用到这个对象进行查询
  */
 @Data
-public class TargetUserAndFlowRole {
+public class TagerUserAndFlowRole {
     public String flowRole;
     public FrameUser frameUser;
     public String[] onlyFlowFlowStep;

+ 37 - 0
pro-base/src/main/java/com/idea/oa/flow2/model/out/FlowHistoryInfo.java

@@ -1,6 +1,10 @@
 package com.idea.oa.flow2.model.out;
 
+import jdk.nashorn.internal.ir.annotations.Ignore;
+
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.Map;
 
 /**
  * 输出历史数据
@@ -15,6 +19,14 @@ public class FlowHistoryInfo {
     private String auditUserName;
     private String id;
 
+    private String signFileId;
+
+    @Ignore
+    private String createdAtStr;
+
+    @Ignore
+    private ArrayList<Map<String, Object>> signFile;
+
     @Override
     public String toString() {
         return "FlowHistoryInfo{" +
@@ -92,4 +104,29 @@ public class FlowHistoryInfo {
     public void setId(String id) {
         this.id = id;
     }
+
+
+    public String getCreatedAtStr() {
+        return createdAtStr;
+    }
+
+    public void setCreatedAtStr(String createdAtStr) {
+        this.createdAtStr = createdAtStr;
+    }
+
+    public String getSignFileId() {
+        return signFileId;
+    }
+
+    public void setSignFileId(String signFileId) {
+        this.signFileId = signFileId;
+    }
+
+    public ArrayList<Map<String, Object>> getSignFile() {
+        return signFile;
+    }
+
+    public void setSignFile(ArrayList<Map<String, Object>> signFile) {
+        this.signFile = signFile;
+    }
 }

+ 4 - 0
pro-base/src/main/java/com/idea/oa/flow2/service/FlowMainCcService.java

@@ -92,6 +92,9 @@ public class FlowMainCcService implements BaseService<FlowMainCc, FlowMainCcExam
     }
 
     public int insert(FlowMainCc record){
+        {
+            //todo 抄送到公服平台
+        }
         record.setId(UUIDUtils.middleUUID());
         return insertWithoutId(record);
     }
@@ -112,4 +115,5 @@ public class FlowMainCcService implements BaseService<FlowMainCc, FlowMainCcExam
     public List<FlowMainCcVo> selectVoByFlowMainId(String flowMainId) {
         return flowMainCcExtendMapper.selectVoByFlowMainId(flowMainId);
     }
+
 }

+ 11 - 1
pro-base/src/main/java/com/idea/oa/flow2/service/FlowMainLogService.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -117,6 +118,15 @@ public class FlowMainLogService implements BaseService<FlowMainLog, FlowMainLogE
 
     }
 
+    public List<FlowMainLog> selectHuiQianByFlowMainIdAndPushUserKeyNoAgree(String flowMainId,String PushUserKey) {
+        FlowMainLogExample example = new FlowMainLogExample();
+        example.setOrderByClause("created_at desc");
+        example.createCriteria().andFlowMainIdEqualTo(flowMainId).andPushUserKeyEqualTo(PushUserKey).andAuditResultEqualTo("55");//审批结果(1同意或者2不同意驳回到申请人,3不同意驳回到上一个审核人,4,委托别人进行审核5,不同意且结束流程,,null没有审核),55:不同意会并在签后结束
+
+        return modelMapper.selectByExample(example);
+
+    }
+
     /**
      * 查询所有通过的日志信息
      * @param flowMainId
@@ -125,7 +135,7 @@ public class FlowMainLogService implements BaseService<FlowMainLog, FlowMainLogE
     public List<FlowMainLog> selectPassListByFlowMainId(String flowMainId) {
         FlowMainLogExample example = new FlowMainLogExample();
         example.setOrderByClause("created_at desc");
-        example.createCriteria().andFlowMainIdEqualTo(flowMainId).andStatusEqualTo(0).andAuditResultEqualTo("1");
+        example.createCriteria().andFlowMainIdEqualTo(flowMainId).andStatusIn(Arrays.asList(0,2)).andAuditResultEqualTo("1");
         List<FlowMainLog> flowMainLogs = modelMapper.selectByExample(example);
         if (flowMainLogs.isEmpty()){
             return new ArrayList<>();

+ 17 - 1
pro-base/src/main/java/com/idea/oa/flow2/service/FlowMainPushService.java

@@ -93,6 +93,9 @@ public class FlowMainPushService implements BaseService<FlowMainPush, FlowMainPu
     }
 
     public int insert(FlowMainPush record){
+        {
+            //todo 推送到公服平台
+        }
         record.setId(UUIDUtils.middleUUID());
         return insertWithoutId(record);
     }
@@ -116,7 +119,20 @@ public class FlowMainPushService implements BaseService<FlowMainPush, FlowMainPu
      * @param flowMainPushId
      */
     public void updateStatusTwoByUpMainLogId(String userId,String upMainLogId,String flowMainPushId) {
-         flowMainPushExtendMapper.updateStatusTwoByUpMainLogId(userId,upMainLogId,flowMainPushId);
+        FlowMainPushExample flowMainPushExample = new FlowMainPushExample();
+        flowMainPushExample.createCriteria().andIdNotEqualTo(flowMainPushId).andStatusEqualTo(0).andUpMainLogIdEqualTo(upMainLogId);
+        List<FlowMainPush> flowMainPushes = modelMapper.selectByExample(flowMainPushExample);
+//        @Select("UPDATE flow_main_push SET STATUS=2,updated_by=#{userId},updated_at=NOW() WHERE flow_main_push.up_main_log_id=#{upMainLogId} AND flow_main_push.id !=#{id} and status=0")
+
+        for (FlowMainPush flowMainPush : flowMainPushes) {
+            flowMainPush.setStatus(2);
+            flowMainPush.setUpdatedAt(new Date());
+            flowMainPush.setUpdatedBy(userId);
+            modelMapper.updateByPrimaryKey(flowMainPush);
+        }
+        // 需要研究数据库锁,可能是modelMapper和flowMainPushExtendMapper是不同的线程,本地没有测试出来
+//        modelMapper.updateStatusTwoByUpMainLogId(userId,upMainLogId,flowMainPushId);
+//                flowMainPushExtendMapper.updateStatusTwoByUpMainLogId(userId,upMainLogId,flowMainPushId);
     }
 
     /**

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1321 - 216
pro-base/src/main/java/com/idea/oa/flow2/service/FlowMainService.java


+ 149 - 0
pro-base/src/main/java/com/idea/oa/flow2/service/FlowServiceExtend.java

@@ -0,0 +1,149 @@
+package com.idea.oa.flow2.service;
+
+
+import com.idea.oa.activiti.service.ProActiService;
+import com.idea.oa.flow2.model.FlowMain;
+import com.rockstar.flow.exception.FlowException;
+import com.rockstar.flow.service.FlowService;
+import com.rockstar.frame.model.FrameUser;
+import com.rockstar.frame.service.FrameUserService;
+import org.activiti.bpmn.model.UserTask;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 2025年1月7日 添加 自审通过记录
+ */
+@Service
+@Primary
+@Qualifier("flowServiceExtend")
+public class FlowServiceExtend {
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private ProActiService proActiService;
+
+
+    @Autowired
+    private FlowMainService flowMainService;
+    @Autowired
+    private FlowService flowService;
+    @Autowired
+    private FrameUserService frameUserService;
+
+    public Map<String, String> runTask_extends(String targetId, FlowMain flowMain, String deploymentid, String flow_role, String taskId, String dataRole, String agree, String comments, FrameUser targetUser, FrameUser currUser, Map<String, Object> conditionMap) throws FlowException {
+        boolean b = flowService.runTask(taskId, dataRole, agree, comments, targetUser, currUser, conditionMap);
+        //当前任务流程
+        Task task = null;
+        //'推送时彭总给的key值',
+        String pushUserKey = null;
+        while (pushUserKey==null){ //获取上面两个值的方法
+
+            List<Task> taskList = taskService.createTaskQuery().processInstanceBusinessKey(flowMain.getId()).list();
+//            if (taskList == null || taskList.isEmpty()) {
+//                return null;
+//            }
+            if (taskList==null||taskList.isEmpty()||taskList.size()<=0){
+                Map<String, String> stringStringHashMap = new HashMap<>();
+                stringStringHashMap.put("roleType", flow_role);
+                stringStringHashMap.put("isEnd", "1");
+                return stringStringHashMap;
+            }
+            task = taskList.get(0);
+
+            //查看总的数据流程
+            List<UserTask> TaskList = flowService.getTaskList(deploymentid);
+
+
+            UserTask myUserTask = null;
+
+            String taskDefinitionKey = task.getTaskDefinitionKey();
+            for (int i = 0; i < TaskList.size(); i++) {
+                if (TaskList.get(i).getId().equals(taskDefinitionKey)) {
+                    myUserTask = TaskList.get(i);
+                    break;
+                }
+            }
+            if (myUserTask != null) {
+                pushUserKey = myUserTask.getCandidateGroups().get(0);
+            }
+                if (!flow_role.equals(pushUserKey)){
+               flowService.runTask(task.getId(), dataRole, agree, comments, targetUser, targetUser, conditionMap);
+                pushUserKey=null;
+            }else{
+                pushUserKey=pushUserKey;
+            }
+        }
+
+        { //进行自审筛查
+            boolean needFindAgreeMyself=false;
+            String[] roleTypeArray = pushUserKey.split("_");
+            String key_e = roleTypeArray[roleTypeArray.length - 1];
+            if ("2".equals(key_e)) {//1	单流程推送  2	串联审核  3	并联推送
+                String[] split = targetUser.getId().split(",");
+                if (split.length==1){
+//                    串联只有一个人就做下面的排查
+                    needFindAgreeMyself=true;
+                }else{
+                    //因为已经移到外面的方法使用了
+                    needFindAgreeMyself=false;
+                }
+            } else{
+                needFindAgreeMyself=true;
+            }
+
+            if(needFindAgreeMyself){
+                String[] split = targetUser.getId().split(",");
+                for (int i = 0; i < split.length; i++) {
+                    String targetUserId = split[i];//对应的推送人,只要有一个人同意就可以自审通过
+                    if (targetUserId.equals(currUser.getId())) {
+
+
+                        {//添加 自审通过记录 如果targetUser==currUser 则下一步就是自审状态
+                            flowMainService.insertLogMyself(flowMain, currUser, task.getName(), pushUserKey);
+                        }
+
+                        Map<String, String> donaturalTaskMap = proActiService.donaturalTask(deploymentid, currUser, task, conditionMap, flowMain, targetId);
+                        if (donaturalTaskMap == null) {
+                            return null;
+                        } else {
+                            return donaturalTaskMap;
+                        }
+                    } else {
+                        //搜索当前人是否在之前的流程节点同意过,同意也自审通过
+                        FrameUser newTargetUser= flowMainService.findTargetUserHasAgree(flowMain.getId(),targetUserId);
+                        if (newTargetUser!=null) {
+                            currUser = newTargetUser;
+                            {//添加 自审通过记录 如果targetUser==currUser 则下一步就是自审状态
+                                flowMainService.insertLogMyself(flowMain, currUser, task.getName(), pushUserKey);
+                            }
+
+                            Map<String, String> donaturalTaskMap = proActiService.donaturalTask(deploymentid, currUser, task, conditionMap, flowMain, targetId);
+                            if (donaturalTaskMap == null) {
+                                return null;
+                            } else {
+                                return donaturalTaskMap;
+                            }
+                        }
+                    }
+
+
+                }
+            }
+        }
+        {//都没有进入自审就运行到这里自然结束
+            Map<String, String> stringStringHashMap = new HashMap<>();
+            stringStringHashMap.put("roleType", flow_role);
+            return stringStringHashMap;
+        }
+    }
+}