浏览代码

大中型提成申报详情查看

wucl 1 年之前
父节点
当前提交
9be3619bfa
共有 24 个文件被更改,包括 332 次插入55 次删除
  1. 13 1
      biz-base/src/main/java/com/dayou/controller/CommissionDeclareController.java
  2. 2 0
      dao/src/main/java/com/dayou/mapper/CommissionDeclareMapper.java
  3. 1 0
      dao/src/main/java/com/dayou/mapper/GlobalConfigMapper.java
  4. 3 0
      dao/src/main/java/com/dayou/mapper/MajorProductionAllotMapper.java
  5. 37 10
      dao/src/main/resources/mapper/CommissionDeclareMapper.xml
  6. 5 0
      dao/src/main/resources/mapper/MajorProductionAllotMapper.xml
  7. 2 1
      domain/src/main/java/com/dayou/dto/CommissionDeclareDTO.java
  8. 2 0
      domain/src/main/java/com/dayou/dto/UserShareRate.java
  9. 1 3
      domain/src/main/java/com/dayou/entity/CommissionDeclare.java
  10. 5 0
      domain/src/main/java/com/dayou/entity/MajorProductionAllot.java
  11. 1 0
      domain/src/main/java/com/dayou/enums/FinanceInvoiceState.java
  12. 66 0
      domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java
  13. 36 0
      domain/src/main/java/com/dayou/vo/CommissionDeclareDetailVO.java
  14. 9 5
      domain/src/main/java/com/dayou/vo/CommissionDeclareVO.java
  15. 4 0
      service/src/main/java/com/dayou/service/ICommissionDeclareService.java
  16. 2 0
      service/src/main/java/com/dayou/service/IGlobalConfigService.java
  17. 4 0
      service/src/main/java/com/dayou/service/IMajorProductionAllotService.java
  18. 43 10
      service/src/main/java/com/dayou/service/impl/CommissionDeclareServiceImpl.java
  19. 4 0
      service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java
  20. 7 0
      service/src/main/java/com/dayou/service/impl/MajorProductionAllotServiceImpl.java
  21. 1 1
      service/src/main/java/com/dayou/service/workflow/IWorkFlowService.java
  22. 22 21
      service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java
  23. 54 2
      service/src/main/java/com/dayou/workflow/config/WorkNodeProcessable.java
  24. 8 1
      sql/update_sql.sql

+ 13 - 1
biz-base/src/main/java/com/dayou/controller/CommissionDeclareController.java

@@ -1,6 +1,8 @@
 package com.dayou.controller;
 
 import com.dayou.dto.CommissionDeclareDTO;
+import com.dayou.dto.WorkNodeCommit;
+import com.dayou.vo.CommissionDeclareDetailVO;
 import com.dayou.vo.CommissionDeclareVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
@@ -63,7 +65,7 @@ public class CommissionDeclareController extends BaseController {
      * @return
      */
     @PostMapping("/major")
-    public RestResponse<Boolean> commissionDeclare(@RequestBody @Valid CommissionDeclareDTO declareDTO){
+    public synchronized RestResponse<Boolean> commissionDeclare(@RequestBody @Valid CommissionDeclareDTO declareDTO){
         Boolean ret = commissionDeclareService.commissionDeclare(declareDTO);
         return RestResponse.data(ret);
     }
@@ -77,6 +79,16 @@ public class CommissionDeclareController extends BaseController {
         return RestResponse.data(ret);
     }
 
+    /**
+     * 申报详情
+     * @param id
+     * @return
+     */
+    @GetMapping("/{id}")
+    public RestResponse<CommissionDeclareDetailVO> detail(@PathVariable("id") Long id){
+        CommissionDeclareDetailVO detail = commissionDeclareService.detail(id);
+        return RestResponse.data(detail);
+    }
 
 }
 

+ 2 - 0
dao/src/main/java/com/dayou/mapper/CommissionDeclareMapper.java

@@ -19,4 +19,6 @@ public interface CommissionDeclareMapper extends CustomBaseMapper<CommissionDecl
     Page<CommissionDeclareVO> majorMarketDeclarePage(Page page, @Param("declare") CommissionDeclareVO commissionDeclare,@Param("marketUserId") Long marketUserId);
 
     Page<CommissionDeclareVO> majorEvaluateDeclarePage(Page page, @Param("declare")CommissionDeclareVO commissionDeclare, @Param("evaluateUserId")Long currentEvaluateUserId);
+
+    CommissionDeclareVO detail(@Param("id") Long id);
 }

+ 1 - 0
dao/src/main/java/com/dayou/mapper/GlobalConfigMapper.java

@@ -27,4 +27,5 @@ public interface GlobalConfigMapper extends BaseMapper<GlobalConfig> {
     List<GlobalConfig> getConfigByKey(@Param("key") String key);
 
     GlobalConfig getGlobalConfig(@Param("key") String key, @Param("field") String field);
+
 }

+ 3 - 0
dao/src/main/java/com/dayou/mapper/MajorProductionAllotMapper.java

@@ -1,5 +1,6 @@
 package com.dayou.mapper;
 
+import com.dayou.dto.UserShareRate;
 import com.dayou.entity.Major;
 import com.dayou.entity.MajorProductionAllot;
 import com.dayou.dao.CustomBaseMapper;
@@ -24,4 +25,6 @@ public interface MajorProductionAllotMapper extends CustomBaseMapper<MajorProduc
     List<MajorProductionAllot> blankAllot(@Param("members") List<Long> members);
 
     void deleteByMajorProductionId(@Param("productionId")Long productionId);
+
+    List<UserShareRate> allotRateByDeclareId(@Param("declareId")Long declareId);
 }

+ 37 - 10
dao/src/main/resources/mapper/CommissionDeclareMapper.xml

@@ -83,14 +83,17 @@
                                 <if test="declare!=null and declare.declareType!=null and declare.declareType==false">
                                     and bus.productionId is null
                                 </if>
-                                <if test="declare!=null and declare.result!=null and declare.result==0">
+                                <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='待申报'">
                                     and bus.declare_result is null
                                 </if>
-                                <if test="declare!=null and declare.result!=null and declare.result==1">
-                                    and bus.declare_result=1
+                                <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='审核中'">
+                                    and bus.declare_result = #{declare.declareResult}
                                 </if>
-                                <if test="declare!=null and declare.result!=null and declare.result==2">
-                                    and  bus.declare_result=0
+                                <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='审核通过'">
+                                    and bus.declare_result = #{declare.declareResult}
+                                </if>
+                                <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='审核拒绝'">
+                                    and bus.declare_result = #{declare.declareResult}
                                 </if>
                             </where>
         order by bus.created DESC ,bus.orderCreated DESC
@@ -155,16 +158,40 @@
             <if test="declare!=null and declare.declareType!=null and declare.declareType==false">
                 and bus.productionId is null
             </if>
-            <if test="declare!=null and declare.result!=null and declare.result==0">
+            <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='待申报'">
                 and bus.declare_result is null
             </if>
-            <if test="declare!=null and declare.result!=null and declare.result==1">
-                and bus.declare_result=1
+            <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='审核中'">
+                and bus.declare_result = #{declare.declareResult}
+            </if>
+            <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='审核通过'">
+                and bus.declare_result = #{declare.declareResult}
             </if>
-            <if test="declare!=null and declare.result!=null and declare.result==2">
-                and  bus.declare_result=0
+            <if test="declare!=null and declare.declareResult!=null and declare.declareResult=='审核拒绝'">
+                and bus.declare_result = #{declare.declareResult}
             </if>
         </where>
         order by bus.created DESC ,bus.orderCreated DESC
     </select>
+
+    <select id="detail" parameterType="java.lang.Long" resultType="com.dayou.vo.CommissionDeclareVO">
+        SELECT
+            cd.id,
+            cd.commission_rate_id,
+            cd.business_id,
+            cd.production_id,
+            cd.created,
+            cd.declare_result,
+            dd.NAME AS businessCate,
+            u.NAME AS declareUser,
+            bcr.business_cate_id,
+            bcr.business_type,
+            cd.created
+        FROM
+            commission_declare cd
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN user u ON u.id = cd.declare_user_id
+            where cd.deleted = 0 and bcr.deleted = 0 and cd.id =#{id}
+    </select>
 </mapper>

+ 5 - 0
dao/src/main/resources/mapper/MajorProductionAllotMapper.xml

@@ -56,4 +56,9 @@
     <delete id="deleteByMajorProductionId" parameterType="java.lang.Long">
         delete from major_production_allot where major_production_id = #{productionId}
     </delete>
+
+    <select id="allotRateByDeclareId" parameterType="java.lang.Long" resultType="com.dayou.dto.UserShareRate">
+        select mpa.ratio as rate,mpa.user_id,u.name from major_production_allot mpa left join user u on u.id = mpa.user_id
+        where mpa.declare_id = #{declareId} and mpa.deleted = 0
+    </select>
 </mapper>

+ 2 - 1
domain/src/main/java/com/dayou/dto/CommissionDeclareDTO.java

@@ -4,7 +4,6 @@ import com.github.liangbaika.validate.annations.AbcValidate;
 import com.github.liangbaika.validate.enums.Check;
 import lombok.Data;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -30,4 +29,6 @@ public class CommissionDeclareDTO {
 
     private List<UserShareRate> userShareRates;
 
+
+
 }

+ 2 - 0
domain/src/main/java/com/dayou/dto/UserShareRate.java

@@ -19,6 +19,8 @@ public class UserShareRate {
     @AbcValidate(required = true,message = "用户不能为空",fun = Check.NotNull)
     private Long userId;
 
+    private String name;
+
     @AbcValidate(required = true,message = "提成比例不能为空",fun = Check.NotNull)
     private BigDecimal rate;
 }

+ 1 - 3
domain/src/main/java/com/dayou/entity/CommissionDeclare.java

@@ -50,9 +50,7 @@ public class CommissionDeclare extends BaseEntity {
     /**
      * 审批结果(0:驳回,1:通过)
      */
-    @ImportCell
-    @ExportCell(columnName = "审批结果(0:驳回,1:通过)")
-    private Boolean declareResult;
+    private String declareResult;
 
 
 }

+ 5 - 0
domain/src/main/java/com/dayou/entity/MajorProductionAllot.java

@@ -34,6 +34,11 @@ public class MajorProductionAllot extends BaseEntity {
     private Long majorProductionId;
 
     /**
+     * 提成申报id
+     */
+    private Long declareId;
+
+    /**
      * 项目成员id
      */
     private Long userId;

+ 1 - 0
domain/src/main/java/com/dayou/enums/FinanceInvoiceState.java

@@ -16,4 +16,5 @@ public enum FinanceInvoiceState {
     撤销,
     审核通过,
     审核拒绝,
+    待申报,
 }

+ 66 - 0
domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java

@@ -14,6 +14,8 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
     DEPARTMENT_TURNS("DEPARTMENT_TURNS",DepartmentTurns.values(),"部门轮单"),
     LAND_RISK_FTL("LAND_RISK_FTL",LandRiskFTL.values(),"土规部社会稳定性风险评估报告模板配置"),
     LAND_CITY_PRICE("LAND_CITY_PRICE",LandCityPrice.values(),"土规部城区土地定级与基准地价技术报告模板配置"),
+    COMMISSION_MAJOR_MARKET_DEPARTMENT("COMMISSION_MAJOR_MARKET_DEPARTMENT",CommissionMajorMarketDepartment.values(),"大中型市场提成部门"),
+    COMMISSION_MAJOR_EVALUATE_DEPARTMENT("COMMISSION_MAJOR_EVALUATE_DEPARTMENT",CommissionMajorEvaluateDepartment.values(),"大中型评估提成部门")
     ;
 
     private String key;
@@ -217,4 +219,68 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
         }
     }
 
+    public enum CommissionMajorMarketDepartment implements CodeMsgEnumInterface<String,String>{
+
+        MAJOR_MARKET_1("MAJOR_MARKET_1",null,"市场一部"),
+        MAJOR_MARKET_2("MAJOR_MARKET_2",null,"市场二部"),
+        ;
+
+        private String filed;
+
+        private String value;
+
+        private String desc;
+
+        CommissionMajorMarketDepartment (String filed, String value, String desc) {
+            this.filed = filed;
+            this.value = value;
+            this.desc = desc;
+        }
+        @Override
+        public String getCode() {
+            return filed;
+        }
+
+        @Override
+        public String getMsg() {
+            return desc;
+        }
+
+        public String getValue() {
+            return value;
+        }
+    }
+
+    public enum CommissionMajorEvaluateDepartment implements CodeMsgEnumInterface<String,String>{
+
+        MAJOR_EVALUATE_1("MAJOR_EVALUATE_1",null,"评估一部"),
+        MAJOR_EVALUATE_2("MAJOR_EVALUATE_2",null,"评估二部"),
+        MAJOR_EVALUATE_3("MAJOR_EVALUATE_3",null,"评估三部"),
+        ;
+
+        private String filed;
+
+        private String value;
+
+        private String desc;
+
+        CommissionMajorEvaluateDepartment (String filed, String value, String desc) {
+            this.filed = filed;
+            this.value = value;
+            this.desc = desc;
+        }
+        @Override
+        public String getCode() {
+            return filed;
+        }
+
+        @Override
+        public String getMsg() {
+            return desc;
+        }
+
+        public String getValue() {
+            return value;
+        }
+    }
 }

+ 36 - 0
domain/src/main/java/com/dayou/vo/CommissionDeclareDetailVO.java

@@ -0,0 +1,36 @@
+package com.dayou.vo;
+
+import com.dayou.dto.UserShareRate;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/5/16
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class CommissionDeclareDetailVO {
+
+    private Long businessId;
+
+    private String orderId;
+
+    private String reportNo;
+
+    private String name;
+
+    private String businessCate;
+
+    private Date created;
+
+    private String declareUser;
+
+    private String production;
+
+    private List<UserShareRate> userShareRates;
+}

+ 9 - 5
domain/src/main/java/com/dayou/vo/CommissionDeclareVO.java

@@ -89,16 +89,20 @@ public class CommissionDeclareVO {
     /**
      *审核状态
      */
-    private Boolean declareResult;
+    private String declareResult;
 
     private Long commissionRateId;
 
     private Boolean declareType;
 
-    /**
-     * 查询用 审核状态
-     */
-    private Integer result;
+    private String declareUser;
+
+    private String businessCate;
+
+    private Long businessCateId;
+
+    private String businessType;
 
+    private Date created;
 
 }

+ 4 - 0
service/src/main/java/com/dayou/service/ICommissionDeclareService.java

@@ -1,9 +1,11 @@
 package com.dayou.service;
 import com.dayou.dto.CommissionDeclareDTO;
+import com.dayou.dto.WorkNodeCommit;
 import com.dayou.entity.CommissionDeclare;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayou.vo.CommissionDeclareDetailVO;
 import com.dayou.vo.CommissionDeclareVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
@@ -25,4 +27,6 @@ public interface ICommissionDeclareService extends IService<CommissionDeclare> {
     Page<CommissionDeclareVO> majorEvaluateDeclarePage(Page page, CommissionDeclareVO commissionDeclare);
 
     Boolean commissionDeclare(CommissionDeclareDTO declareDTO);
+
+    CommissionDeclareDetailVO detail(Long id);
 }

+ 2 - 0
service/src/main/java/com/dayou/service/IGlobalConfigService.java

@@ -37,4 +37,6 @@ public interface IGlobalConfigService extends IService<GlobalConfig> {
         BigDecimal getValueByFiled(String filed);
 
         GlobalConfig getGlobalConfig(String key, String field);
+
+        List<GlobalConfig> getConfigByKey(String key);
 }

+ 4 - 0
service/src/main/java/com/dayou/service/IMajorProductionAllotService.java

@@ -1,8 +1,10 @@
 package com.dayou.service;
+import com.dayou.dto.UserShareRate;
 import com.dayou.entity.MajorProductionAllot;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -20,4 +22,6 @@ public interface IMajorProductionAllotService extends IService<MajorProductionAl
 
         List<MajorProductionAllot> getList(Long productionId);
         Boolean saveAllot(List<MajorProductionAllot> list);
+
+        List<UserShareRate> allotRateByDeclareId(Long id);
 }

+ 43 - 10
service/src/main/java/com/dayou/service/impl/CommissionDeclareServiceImpl.java

@@ -1,18 +1,21 @@
 package com.dayou.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dayou.common.BaseEntity;
 import com.dayou.dto.CommissionDeclareDTO;
 import com.dayou.dto.UserShareRate;
-import com.dayou.entity.CommissionDeclare;
-import com.dayou.entity.MajorProductionAllot;
+import com.dayou.dto.WorkNodeCommit;
+import com.dayou.entity.*;
+import com.dayou.enums.FinanceInvoiceState;
 import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.UserTypeEnum;
 import com.dayou.mapper.CommissionDeclareMapper;
-import com.dayou.service.ICommissionDeclareService;
+import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dayou.service.IMajorProductionAllotService;
 import com.dayou.service.workflow.IWorkFlowService;
 import com.dayou.utils.LoginContext;
+import com.dayou.vo.CommissionDeclareDetailVO;
 import com.dayou.vo.CommissionDeclareVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -44,6 +47,15 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
     @Autowired
     private IWorkFlowService workFlowService;
 
+    @Autowired
+    private IBusinessCommissionRateService commissionRateService;
+
+    @Autowired
+    private IMajorProductionService majorProductionService;
+
+    @Autowired
+    private IMajorService majorService;
+
 
 
     @Override
@@ -69,6 +81,7 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
     public Boolean commissionDeclare(CommissionDeclareDTO declareDTO) {
         //保存申报记录
         CommissionDeclare commissionDeclare = BeanUtil.copyProperties(declareDTO, CommissionDeclare.class);
+        commissionDeclare.setDeclareResult(FinanceInvoiceState.审核中.name());
         commissionDeclare.setDeclareUserId(LoginContext.getCurrentUserId());
         this.save(commissionDeclare);
         //设置提成比例
@@ -80,17 +93,37 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
             majorProductionAllot.setUserId(x.getUserId());
             majorProductionAllot.setRatio(x.getRate());
             majorProductionAllot.setUserType(UserTypeEnum.MARKET.name());
+            majorProductionAllot.setDeclareId(commissionDeclare.getId());
             return majorProductionAllot;
         }).collect(Collectors.toList());
         majorProductionAllotService.saveBatch(collect);
         //提交审核流程
+        return workFlowService.openingDeclare(MainBusinessEnum.COMMISSION_DECLARE_MAJOR_MARKET, commissionDeclare.getId());
+    }
 
-        Long businessId = declareDTO.getBusinessId();
-        Long productionId = declareDTO.getProductionId();
-        if (productionId==null){
-            productionId = businessId;
+    @Override
+    public CommissionDeclareDetailVO detail(Long id) {
+        CommissionDeclareDetailVO commissionDeclareDetailVO = new CommissionDeclareDetailVO();
+        CommissionDeclareVO declare = commissionDeclareMapper.detail(id);
+        BeanUtil.copyProperties(declare,commissionDeclareDetailVO);
+        if (declare.getBusinessType().equals(MainBusinessEnum.MAJOR_BUSINESS.name())){
+            if (declare.getBusinessId()!=null){
+                Major order = majorService.getOne(new LambdaQueryWrapper<Major>().select(Major::getOrderId, Major::getName).eq(BaseEntity::getId, declare.getBusinessId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
+                commissionDeclareDetailVO.setOrderId(order.getOrderId());
+                commissionDeclareDetailVO.setName(order.getName());
+            }
+            if (declare.getProductionId()!=null){
+                MajorProduction production = majorProductionService.getOne(new LambdaQueryWrapper<MajorProduction>()
+                        .select(MajorProduction::getReportNo, MajorProduction::getProduction, MajorProduction::getName).eq(BaseEntity::getId, declare.getProductionId())
+                        .eq(BaseEntity::getDeleted, Boolean.FALSE));
+                commissionDeclareDetailVO.setName(production.getName());
+                commissionDeclareDetailVO.setReportNo(production.getReportNo());
+                commissionDeclareDetailVO.setProduction(production.getProduction());
+            }
+            List<UserShareRate> rates = majorProductionAllotService.allotRateByDeclareId(id);
+            commissionDeclareDetailVO.setUserShareRates(rates);
         }
-        workFlowService.openingDeclare(MainBusinessEnum.COMMISSION_DECLARE_MAJOR_MARKET,productionId);
-        return null;
+
+        return commissionDeclareDetailVO;
     }
 }

+ 4 - 0
service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java

@@ -160,4 +160,8 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
         return globalConfigMapper.getGlobalConfig(key,field);
     }
 
+    @Override
+    public List<GlobalConfig> getConfigByKey(String key){
+        return globalConfigMapper.getConfigByKey(key);
+    }
 }

+ 7 - 0
service/src/main/java/com/dayou/service/impl/MajorProductionAllotServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.dayou.dto.UserShareRate;
 import com.dayou.entity.Major;
 import com.dayou.entity.MajorProductionAllot;
 import com.dayou.exception.ErrorCode;
@@ -78,4 +79,10 @@ public class MajorProductionAllotServiceImpl extends ServiceImpl<MajorProduction
         return Boolean.FALSE;
     }
 
+    @Override
+    public List<UserShareRate> allotRateByDeclareId(Long id) {
+        List<UserShareRate> rates = majorProductionAllotMapper.allotRateByDeclareId(id);
+        return rates;
+    }
+
 }

+ 1 - 1
service/src/main/java/com/dayou/service/workflow/IWorkFlowService.java

@@ -39,6 +39,6 @@ public interface IWorkFlowService extends IService<WorkFlow> {
 
     WorkNodeCommit openingOrder(MainBusinessEnum mainBusinessEnum, Long businessId, String businessSubId,String remark);
 
-    WorkNodeCommit openingDeclare(MainBusinessEnum mainBusinessEnum, Long businessId);
+    Boolean openingDeclare(MainBusinessEnum mainBusinessEnum, Long businessId);
 
 }

+ 22 - 21
service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java

@@ -1,13 +1,16 @@
 package com.dayou.service.workflow;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.common.BaseEntity;
+import com.dayou.dto.HandlerPermissionDTO;
 import com.dayou.dto.WorkNodeCommit;
 import com.dayou.dto.WorkNodeDTO;
 import com.dayou.entity.WorkFlow;
 import com.dayou.entity.WorkFlowNodeInstance;
 import com.dayou.entity.WorkNodeTask;
+import com.dayou.entity.WorkTaskRecord;
 import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.workflow.NodeLogEnum;
 import com.dayou.enums.workflow.NodeStateEnum;
@@ -21,6 +24,7 @@ import com.dayou.workflow.handler.AssetsNodeHandler;
 import com.dayou.workflow.handler.MajorNodeHandler;
 import com.dayou.workflow.config.WorkNodeProcessable;
 import com.dayou.workflow.handler.PersonalNodeHandler;
+import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -65,6 +69,9 @@ public class WorkFlowServiceImpl extends ServiceImpl<WorkFlowMapper, WorkFlow> i
     @Autowired
     private WorkTaskRecordMapper workTaskRecordMapper;
 
+    @Autowired
+    private WorkNodeProcessable workNodeProcessable;
+
 
     @Override
     @SuppressWarnings("unchecked")
@@ -138,22 +145,22 @@ public class WorkFlowServiceImpl extends ServiceImpl<WorkFlowMapper, WorkFlow> i
      */
     @Override
     public WorkNodeCommit openingOrder(MainBusinessEnum mainBusinessEnum,Long businessId,String businessSubId, String remark){
-        WorkFlow majorBusinessFlow = this.getOne(new LambdaQueryWrapper<WorkFlow>()
+        WorkFlow businessFlow = this.getOne(new LambdaQueryWrapper<WorkFlow>()
                 .eq(WorkFlow::getCode, mainBusinessEnum.getCode())
                 .eq(WorkFlow::getState, Boolean.FALSE)
                 .eq(BaseEntity::getDeleted, Boolean.FALSE));
 
-        if (majorBusinessFlow == null){
+        if (businessFlow == null){
             ErrorCode.throwBusinessException(ErrorCode.WORKFLOW_NOT_EXISTS,mainBusinessEnum.getMsg());
         }
 
-        WorkNodeDTO openingOrderNode = workNodeService.getOpeningOrderNode(majorBusinessFlow.getId());
+        WorkNodeDTO openingOrderNode = workNodeService.getOpeningOrderNode(businessFlow.getId());
         if (openingOrderNode == null){
             ErrorCode.throwBusinessException(ErrorCode.OPENING_NODE_NOT_EXISTS,mainBusinessEnum.getMsg());
         }
 
         WorkFlowNodeInstance instance = new WorkFlowNodeInstance();
-        instance.setFlowId(majorBusinessFlow.getId());
+        instance.setFlowId(businessFlow.getId());
         instance.setNodeId(openingOrderNode.getId());
         instance.setBusinessId(businessId);
         instance.setBusinessSubId(businessSubId);
@@ -167,15 +174,15 @@ public class WorkFlowServiceImpl extends ServiceImpl<WorkFlowMapper, WorkFlow> i
 
 
         if (CollectionUtil.isNotEmpty(tasks)){
-            if (mainBusinessEnum.equals(PERSONAL_BUSINESS)){
+            if (mainBusinessEnum.equals(MAJOR_BUSINESS)){
                 //业务成功下单后,将下单任务标记已完成。
                 if (workTaskRecordService.doCreateNodeTaskRecord(majorNodeHandler,tasks, instance, LoginContext.getCurrentUserId())){
-                    workTaskRecordMapper.finishOpening(instance.getId(),majorBusinessFlow.getId());
+                    workTaskRecordMapper.finishOpening(instance.getId(),businessFlow.getId());
                 }
             }else{
                 //业务成功下单后,将下单任务标记已完成。
                 if (workTaskRecordService.doCreateNodeTaskRecord(personalNodeHandler,tasks, instance, LoginContext.getCurrentUserId())){
-                    workTaskRecordMapper.finishOpening(instance.getId(),majorBusinessFlow.getId());
+                    workTaskRecordMapper.finishOpening(instance.getId(),businessFlow.getId());
                 }
             }
 
@@ -191,42 +198,36 @@ public class WorkFlowServiceImpl extends ServiceImpl<WorkFlowMapper, WorkFlow> i
     }
 
     @Override
-    public WorkNodeCommit openingDeclare(MainBusinessEnum mainBusinessEnum, Long businessId) {
-        WorkFlow majorBusinessFlow = this.getOne(new LambdaQueryWrapper<WorkFlow>()
+    public Boolean openingDeclare(MainBusinessEnum mainBusinessEnum, Long businessId) {
+        WorkFlow businessFlow = this.getOne(new LambdaQueryWrapper<WorkFlow>()
                 .eq(WorkFlow::getCode, mainBusinessEnum.getCode())
                 .eq(WorkFlow::getState, Boolean.FALSE)
                 .eq(BaseEntity::getDeleted, Boolean.FALSE));
 
-        if (majorBusinessFlow == null){
+        if (businessFlow == null){
             ErrorCode.throwBusinessException(ErrorCode.WORKFLOW_NOT_EXISTS,mainBusinessEnum.getMsg());
         }
 
-        WorkNodeDTO firstNode = workNodeService.getOpeningOrderNode(majorBusinessFlow.getId());
+        WorkNodeDTO firstNode = workNodeService.getOpeningOrderNode(businessFlow.getId());
         if (firstNode == null){
             ErrorCode.throwBusinessException(ErrorCode.OPENING_NODE_NOT_EXISTS,mainBusinessEnum.getMsg());
         }
 
         WorkFlowNodeInstance instance = new WorkFlowNodeInstance();
-        instance.setFlowId(majorBusinessFlow.getId());
+        instance.setFlowId(businessFlow.getId());
         instance.setNodeId(firstNode.getId());
         instance.setBusinessId(businessId);
         instance.setBusinessType(mainBusinessEnum.getCode());
         instance.setSequence(0);
-        instance.setState(NodeStateEnum.FINISHED.name());
+        instance.setState(NodeStateEnum.PENDING.name());
         workFlowNodeInstanceService.save(instance);
 
         List<WorkNodeTask> tasks = firstNode.getTasks();
 
         if (CollectionUtil.isNotEmpty(tasks)){
-
-
+            workTaskRecordService.doCreateNodeTaskRecord(workNodeProcessable,tasks,instance,null);
         }
-
-        //构造下单提交对象
-        WorkNodeCommit commit = new WorkNodeCommit();
-        commit.setInstanceNodeId(instance.getId());
-        commit.setState(NodeLogEnum.PASS);
-        return commit;
+        return Boolean.TRUE;
     }
 
     private Boolean handleByState(WorkNodeProcessable workNodeProcessable,WorkNodeCommit workNodeCommit){

+ 54 - 2
service/src/main/java/com/dayou/workflow/config/WorkNodeProcessable.java

@@ -1,11 +1,14 @@
 package com.dayou.workflow.config;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.dayou.bo.SimpleParentModel;
 import com.dayou.common.BaseEntity;
+import com.dayou.common.SimpleListModel;
 import com.dayou.dto.HandlerPermissionDTO;
 import com.dayou.dto.WorkNodeCommit;
 import com.dayou.dto.WorkNodeDTO;
@@ -20,6 +23,8 @@ import com.dayou.mapper.DepartmentMapper;
 import com.dayou.mapper.MajorMapper;
 import com.dayou.mapper.PersonalMapper;
 import com.dayou.mapper.WorkTaskRecordMapper;
+import com.dayou.service.IDepartmentService;
+import com.dayou.service.IGlobalConfigService;
 import com.dayou.service.IUserPostService;
 import com.dayou.service.IUserService;
 import com.dayou.service.workflow.IWorkFlowLogService;
@@ -29,16 +34,18 @@ import com.dayou.service.workflow.IWorkTaskRecordService;
 import com.dayou.utils.LoginContext;
 import com.dayou.workflow.handler.MajorNodeHandler;
 import com.dayou.workflow.handler.PersonalNodeHandler;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.dayou.common.Constants.MAJOR_HANDLER;
 import static com.dayou.common.Constants.PERSONAL_HANDLER;
+import static com.dayou.enums.GlobalConfigEnum.COMMISSION_MAJOR_MARKET_DEPARTMENT;
 import static com.dayou.enums.workflow.NodeLogEnum.PASS;
 import static com.dayou.enums.workflow.NodeStateEnum.*;
 
@@ -67,6 +74,12 @@ public class WorkNodeProcessable {
     @Autowired
     private IUserPostService userPostService;
 
+    @Autowired
+    private IGlobalConfigService globalConfigService;
+
+    @Autowired
+    private IDepartmentService departmentService;
+
 
     /**
      * 提交流程前置处理
@@ -197,6 +210,8 @@ public class WorkNodeProcessable {
                 return handlerPermissionDTO.getPowerId();
             case POST:
                 return userPostService.getUniqueHandlerByPostForWorkNode(handlerPermissionDTO.getPowerId());
+            case DEPARTMENT_LEADER:
+                return getDepartmentLeaderByBusinessType(instanceNode.getBusinessType());
             case SYSTEM:
                 //暂无程序处理逻辑
                 return 0L;
@@ -275,4 +290,41 @@ public class WorkNodeProcessable {
         }
     }
 
+    /**
+     * 根据业务类型确定需要找到的部门领导,A既可以是市场部也可以是评估部,确定部门时就需要看是什么样的业务类型
+     * @param businessType
+     * @return
+     */
+    protected Long getDepartmentLeaderByBusinessType(String businessType){
+        List<SimpleParentModel> departmentList = LoginContext.getLoginCacheUserBO().getDepartmentList();
+        List<Long> ownDepIds = departmentList.stream().map(SimpleListModel::getId).collect(Collectors.toList());
+        if (CollectionUtil.isEmpty(ownDepIds)){
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"用户部门岗位未设置。");
+        }
+        switch (MainBusinessEnum.valueOf(businessType)){
+            case COMMISSION_DECLARE_MAJOR_MARKET:
+                List<GlobalConfig> list = globalConfigService.getConfigByKey( COMMISSION_MAJOR_MARKET_DEPARTMENT.name());
+                if (CollectionUtil.isEmpty(list)){
+                    ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"大中型市场部提成部门未配置。");
+                }
+                List<String> dIds = list.stream().filter(x->StrUtil.isNotBlank(x.getValue())).map(GlobalConfig::getValue).collect(Collectors.toList());
+                if (CollectionUtil.isEmpty(dIds)){
+                    ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"大中型市场部提成部门未配置。");
+                }
+                List<Long> xIds = dIds.stream().map(x -> { return  Long.valueOf(x);}).collect(Collectors.toList());
+                List<Long> targetIds = ownDepIds.stream().filter(xIds::contains).collect(Collectors.toList());
+                if (targetIds.size()==0){
+                    ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"抱歉,您不属于大中型市场部门人员。");
+                }
+                //多个默认第一个,保证流程顺畅
+                Department department = departmentService.getById(targetIds.get(0));
+                if (department.getLeaderId()==null){
+                    ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,department.getName() +" 部门领导未设置。");
+                }
+                return department.getLeaderId();
+        }
+        return 0L;
+    }
+
+
 }

+ 8 - 1
sql/update_sql.sql

@@ -395,4 +395,11 @@ CREATE TABLE `commission_declare` (
                                       `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                       `modified` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改时间',
                                       PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='提成申报';
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='提成申报';
+
+/**
+  日期:2024-05-16
+  修改人:吴长林
+ */
+ALTER TABLE commission_declare MODIFY COLUMN declare_result varchar(32) comment '审批结果';
+ALTER TABLE major_production_allot ADD COLUMN declare_id bigint(20) NULL COMMENT '提成申报id';