Bläddra i källkod

个贷出库申请相关&&工作流逻辑优化

wucl 1 år sedan
förälder
incheckning
ec15e9f146
25 ändrade filer med 293 tillägg och 53 borttagningar
  1. 13 0
      biz-base/src/main/java/com/dayou/controller/BusinessProductionController.java
  2. 12 0
      biz-base/src/main/java/com/dayou/controller/PersonalController.java
  3. 11 1
      biz-base/src/main/java/com/dayou/controller/ProductionOutWarehouseController.java
  4. 2 0
      dao/src/main/java/com/dayou/mapper/CustomerCompanyMapper.java
  5. 5 0
      dao/src/main/java/com/dayou/mapper/PersonalProductionMapper.java
  6. 2 0
      dao/src/main/java/com/dayou/mapper/ProductionOutWarehouseMapper.java
  7. 15 0
      dao/src/main/resources/mapper/CustomerCompanyMapper.xml
  8. 38 0
      dao/src/main/resources/mapper/PersonalProductionMapper.xml
  9. 15 0
      dao/src/main/resources/mapper/ProductionOutWarehouseMapper.xml
  10. 1 0
      domain/src/main/java/com/dayou/dto/OrderProductionsBag.java
  11. 15 0
      domain/src/main/java/com/dayou/dto/ProductionDTO.java
  12. 16 3
      domain/src/main/java/com/dayou/entity/ProductionOutWarehouse.java
  13. 18 11
      service/src/main/java/com/dayou/service/ICustomerCompanyService.java
  14. 3 0
      service/src/main/java/com/dayou/service/IPersonalProductionService.java
  15. 2 0
      service/src/main/java/com/dayou/service/IPersonalService.java
  16. 2 0
      service/src/main/java/com/dayou/service/IProductionOutWarehouseService.java
  17. 11 0
      service/src/main/java/com/dayou/service/impl/CustomerCompanyServiceImpl.java
  18. 34 17
      service/src/main/java/com/dayou/service/impl/PersonalProductionServiceImpl.java
  19. 6 0
      service/src/main/java/com/dayou/service/impl/PersonalServiceImpl.java
  20. 36 9
      service/src/main/java/com/dayou/service/impl/ProductionOutWarehouseServiceImpl.java
  21. 3 1
      service/src/main/java/com/dayou/service/workflow/IWorkNodeService.java
  22. 12 4
      service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java
  23. 2 2
      service/src/main/java/com/dayou/workflow/handler/MajorNodeHandler.java
  24. 8 5
      service/src/main/java/com/dayou/workflow/handler/PersonalNodeHandler.java
  25. 11 0
      sql/update_sql.sql

+ 13 - 0
biz-base/src/main/java/com/dayou/controller/BusinessProductionController.java

@@ -7,6 +7,7 @@ import com.dayou.dto.OrderReportDTO;
 import com.dayou.dto.ReportDTO;
 import com.dayou.service.IBusinessProductionService;
 import com.dayou.service.IMajorProductionService;
+import com.dayou.service.IPersonalProductionService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -31,6 +32,9 @@ public class BusinessProductionController {
     @Autowired
     private IBusinessProductionService businessProductionService;
 
+    @Autowired
+    private IPersonalProductionService personalProductionService;
+
     /**
      * 大中型产品包
      */
@@ -41,6 +45,15 @@ public class BusinessProductionController {
     }
 
     /**
+     * 个贷产品包
+     */
+    @GetMapping("/bag/personal/{id}")
+    public RestResponse<OrderProductionsBag> productionPersonalBag(@PathVariable("id") Long id){
+        OrderProductionsBag bag = personalProductionService.productionBag(id);
+        return RestResponse.data(bag);
+    }
+
+    /**
      * 大中型列表
      */
     @GetMapping("/major/{orderFundId}")

+ 12 - 0
biz-base/src/main/java/com/dayou/controller/PersonalController.java

@@ -105,5 +105,17 @@ public class PersonalController extends BaseController {
         Boolean ret =personalService.doRecall(id);
         return RestResponse.data(ret);
     }
+
+    /**
+     * 我的待认领实收款订单
+     * @param page
+     * @param personalVO
+     * @return
+     */
+    @GetMapping("/waiting/claim")
+    public RestResponse<Page<PersonalVO>> waitingClaimOrder(Page page,PersonalVO personalVO){
+        Page<PersonalVO> ret = personalService.waitingClaimOrder(page,personalVO);
+        return RestResponse.data(ret);
+    }
 }
 

+ 11 - 1
biz-base/src/main/java/com/dayou/controller/ProductionOutWarehouseController.java

@@ -99,7 +99,7 @@ public class ProductionOutWarehouseController extends BaseController {
     }
 
     /**
-     * 出库申请列表 (业务类型和产品id查询)
+     * 大中型出库申请列表 (业务类型和产品id查询)
      * @return
      */
     @GetMapping("/production/{businessType}/{productionId}")
@@ -110,6 +110,16 @@ public class ProductionOutWarehouseController extends BaseController {
     }
 
     /**
+     * 个贷出库申请列表
+     * @return
+     */
+    @GetMapping("/personal/{orderId}")
+    public RestResponse<List<ProductionOutWarehouseApplyVO>> getPersonalByOrderId(@PathVariable("orderId") Long orderId){
+        List<ProductionOutWarehouseApplyVO> list = productionOutWarehouseService.getPersonalByOrderId(orderId);
+        return RestResponse.data(list);
+    }
+
+    /**
      * 撤销申请
      * @param id
      * @return

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

@@ -2,6 +2,7 @@ package com.dayou.mapper;
 
 import com.dayou.entity.CustomerCompany;
 import com.dayou.dao.CustomBaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +14,5 @@ import com.dayou.dao.CustomBaseMapper;
  */
 public interface CustomerCompanyMapper extends CustomBaseMapper<CustomerCompany> {
 
+    Long avoidWareHouseApplyByTargetId(@Param("targetId") Long targetId);
 }

+ 5 - 0
dao/src/main/java/com/dayou/mapper/PersonalProductionMapper.java

@@ -1,7 +1,11 @@
 package com.dayou.mapper;
 
+import com.dayou.dto.ProductionDTO;
 import com.dayou.entity.PersonalProduction;
 import com.dayou.dao.CustomBaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.dayou.dao.CustomBaseMapper;
  */
 public interface PersonalProductionMapper extends CustomBaseMapper<PersonalProduction> {
 
+    List<ProductionDTO> getProductions(@Param("id") Long id);
 }

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

@@ -23,4 +23,6 @@ public interface ProductionOutWarehouseMapper extends CustomBaseMapper<Productio
     Page<ProductionOutWarehouse> getPage(Page page, @Param("vo") ProductionOutWarehouse productionOutWarehouse,@Param("keyword") String keyword);
 
     List<ProductionOutWarehouseApplyVO> getListByBizTypeProductionId(@Param("businessType") String businessType,@Param("productionId") Long productionId);
+
+    List<ProductionOutWarehouseApplyVO> getPersonalByOrderId(@Param("orderId")Long orderId);
 }

+ 15 - 0
dao/src/main/resources/mapper/CustomerCompanyMapper.xml

@@ -27,4 +27,19 @@
         parent_id, level, name, terminal, company_type, org_type, address, phone
     </sql>
 
+    <select id="avoidWareHouseApplyByTargetId" parameterType="java.lang.Long" resultType="java.lang.Long">
+        SELECT
+            id
+        FROM
+            customer_company
+        WHERE
+                id = (
+                SELECT
+                    clientele_id
+                FROM
+                    personal
+                WHERE
+                    id = ( SELECT personal_id FROM personal_target WHERE id = #{targetId} AND deleted = 0 ))
+          and terminal = 0 and company_type = '银行及金融机构' and parent_id is null
+    </select>
 </mapper>

+ 38 - 0
dao/src/main/resources/mapper/PersonalProductionMapper.xml

@@ -31,4 +31,42 @@
         target_id, production, qr_code, repertory_state, repertory_in_time, repertory_out_time, check_state, save_file_check, if_save_file, file_path, save_file_date, user_id
     </sql>
 
+    <select id="getProductions" parameterType="java.lang.Long" resultType="com.dayou.dto.ProductionDTO">
+        SELECT
+            pp.*,
+            pt.location AS NAME,
+            pt.acreage AS evaluateAcreage,
+            pt.price AS evaluatePrice,
+            pt.amount AS evaluateAmount,
+            trim(
+                    BOTH '"'
+                    FROM
+                    JSON_EXTRACT( pt.selling_ability, '$.createDateD' )) AS createDate,
+            trim(
+                    BOTH '"'
+                    FROM
+                    JSON_EXTRACT( pt.selling_ability, '$.sceneDateD' )) AS sceneDate,
+            trim(
+                    BOTH '"'
+                    FROM
+                    JSON_EXTRACT( pt.selling_ability, '$.limitDate' )) AS limitDate
+        FROM
+            (
+                SELECT
+                    id,
+                    target_id,
+                    production,
+                    repertory_state,
+                    repertory_in_time,
+                    repertory_out_time,
+                    if_save_file,
+                    save_file_date
+                FROM
+                    `personal_production`
+                WHERE
+                        target_id = ( SELECT id FROM personal_target WHERE personal_id = 16 AND deleted = 0 )) pp
+                LEFT JOIN personal_target pt ON pt.id = pp.target_id
+        WHERE
+            pt.deleted = 0
+    </select>
 </mapper>

+ 15 - 0
dao/src/main/resources/mapper/ProductionOutWarehouseMapper.xml

@@ -55,6 +55,21 @@
         order by pow.created DESC
     </select>
 
+    <select id="getPersonalByOrderId" parameterType="java.lang.Long" resultType="com.dayou.vo.ProductionOutWarehouseApplyVO">
+        SELECT
+            pow.*,
+            u.name AS applyName,
+            u1.NAME AS departmentChecker,
+            u2.name as financeChecker
+        FROM
+            `production_out_warehouse` pow
+                LEFT JOIN user u ON u.id = pow.apply_id
+                LEFT JOIN user u1 ON u1.id = pow.department_checker_id
+                left join user u2 on u2.id = pow.finance_checker_id
+        WHERE
+            pow.deleted = 0 and pow.business_type = 'PERSONAL_BUSINESS' and pow.order_id = #{orderId}
+        order by pow.created DESC
+    </select>
     <select id="getPage" parameterType="com.dayou.entity.ProductionOutWarehouse" resultType="com.dayou.entity.ProductionOutWarehouse">
         SELECT
             pow.*,

+ 1 - 0
domain/src/main/java/com/dayou/dto/OrderProductionsBag.java

@@ -2,6 +2,7 @@ package com.dayou.dto;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**

+ 15 - 0
domain/src/main/java/com/dayou/dto/ProductionDTO.java

@@ -109,4 +109,19 @@ public class ProductionDTO {
      * 产品实收款金额
      */
     private BigDecimal realAmount;
+
+    /**
+     * 出具报告日期
+     */
+    private String createDate;
+
+    /**
+     * 实勘日期
+     */
+    private String sceneDate;
+
+    /**
+     * 报告使用期限
+     */
+    private String limitDate;
 }

+ 16 - 3
domain/src/main/java/com/dayou/entity/ProductionOutWarehouse.java

@@ -34,7 +34,12 @@ public class ProductionOutWarehouse extends BaseEntity {
     private String businessType;
 
     /**
-     * 产品id
+     *订单id(个贷)
+     */
+    private Long orderId;
+
+    /**
+     * 产品id(大中型)
      */
     private Long productionId;
 
@@ -44,7 +49,12 @@ public class ProductionOutWarehouse extends BaseEntity {
     private String reportNo;
 
     /**
-     * 产品应收款id
+     * 订单应收款id(个贷)
+     */
+    private Long orderFundId;
+
+    /**
+     * 产品应收款id(大中型)
      */
     @AbcValidate(required = true,message = "该产品还没分配实收款,无法申请。" , fun = Check.NotNull)
     private Long productionFundId;
@@ -124,7 +134,10 @@ public class ProductionOutWarehouse extends BaseEntity {
     private String departmentChecker;
     @TableField(exist = false)
     private String financeChecker;
-
+    @TableField(exist = false)
+    private BigDecimal shouldAmount;
+    @TableField(exist = false)
+    private Long businessId;
     /**
      * 0:部门 1:财务
      */

+ 18 - 11
service/src/main/java/com/dayou/service/ICustomerCompanyService.java

@@ -18,22 +18,29 @@ import java.util.List;
  */
 public interface ICustomerCompanyService extends IService<CustomerCompany> {
 
-        Page<CustomerCompany> selectPage(Page page,CustomerCompany customerCompany);
+    Page<CustomerCompany> selectPage(Page page,CustomerCompany customerCompany);
 
-        CustomerCompany detail(Long id);
+    CustomerCompany detail(Long id);
 
-        Boolean add(CustomerCompany customerCompany);
+    Boolean add(CustomerCompany customerCompany);
 
-        Boolean update(CustomerCompany customerCompany);
+    Boolean update(CustomerCompany customerCompany);
 
-        Boolean delete(Long id);
+    Boolean delete(Long id);
 
     List<CustomerCompany> simpleAll(CustomerCompany customer);
 
-        /**
-         * 判断客户是否是出库免申请
-         * @param id
-         * @return
-         */
-        Boolean avoidWareHouseApply(Long id);
+    /**
+     * 判断客户是否是出库免申请
+     * @param id
+     * @return
+     */
+    Boolean avoidWareHouseApply(Long id);
+
+    /**
+     * 通过产品id判断客户是否是出库免申请
+     * @param targetId
+     * @return
+     */
+    Boolean avoidWareHouseApplyByTargetId(Long targetId);
 }

+ 3 - 0
service/src/main/java/com/dayou/service/IPersonalProductionService.java

@@ -1,4 +1,5 @@
 package com.dayou.service;
+import com.dayou.dto.OrderProductionsBag;
 import com.dayou.dto.TaskRecordDTO;
 import com.dayou.entity.PersonalProduction;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -37,4 +38,6 @@ public interface IPersonalProductionService extends IService<PersonalProduction>
     Boolean repertoryIn(TaskRecordDTO<PersonalProduction> taskRecordDTO);
 
     Boolean repertoryOut(TaskRecordDTO<PersonalProduction> taskRecordDTO);
+
+    OrderProductionsBag productionBag(Long id);
 }

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

@@ -34,4 +34,6 @@ public interface IPersonalService extends IService<Personal> {
     void updateCertificates(Long targetId, CertificateEnum cer);
 
     Boolean doRecall(Long id);
+
+    Page<PersonalVO> waitingClaimOrder(Page page, PersonalVO personalVO);
 }

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

@@ -34,4 +34,6 @@ public interface IProductionOutWarehouseService extends IService<ProductionOutWa
         Boolean cancel(Long id);
 
     List<ProductionOutWarehouseApplyVO> getListByBizTypeProductionId(String businessType, Long productionId);
+
+        List<ProductionOutWarehouseApplyVO> getPersonalByOrderId(Long orderId);
 }

+ 11 - 0
service/src/main/java/com/dayou/service/impl/CustomerCompanyServiceImpl.java

@@ -3,10 +3,13 @@ package com.dayou.service.impl;
 import com.dayou.common.BaseEntity;
 import com.dayou.entity.CustomerCompany;
 import com.dayou.entity.CustomerLinkman;
+import com.dayou.entity.PersonalTarget;
 import com.dayou.mapper.CustomerCompanyMapper;
 import com.dayou.service.ICustomerCompanyService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.service.IPersonalTargetService;
 import com.dayou.utils.LoginContext;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -38,6 +41,8 @@ import com.dayou.enums.BatchTaskTypeEnum;
 @Service
 public class CustomerCompanyServiceImpl extends ServiceImpl<CustomerCompanyMapper, CustomerCompany> implements ICustomerCompanyService {
 
+    @Autowired
+    private CustomerCompanyMapper customerCompanyMapper;
 
     @Override
     @SuppressWarnings("unchecked")
@@ -93,4 +98,10 @@ public class CustomerCompanyServiceImpl extends ServiceImpl<CustomerCompanyMappe
                 .eq(CustomerCompany::getTerminal, Boolean.FALSE).eq(CustomerCompany::getCompanyType, "银行及金融机构").eq(BaseEntity::getDeleted, Boolean.FALSE));
         return cc!=null;
     }
+
+    @Override
+    public Boolean avoidWareHouseApplyByTargetId(Long targetId) {
+        Long ccId = customerCompanyMapper.avoidWareHouseApplyByTargetId(targetId);
+        return ccId!=null;
+    }
 }

+ 34 - 17
service/src/main/java/com/dayou/service/impl/PersonalProductionServiceImpl.java

@@ -6,11 +6,10 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.configuration.DfsConfig;
-import com.dayou.dto.ItemData;
-import com.dayou.dto.NameUrlDTO;
-import com.dayou.dto.TaskRecordDTO;
+import com.dayou.dto.*;
 import com.dayou.entity.*;
 import com.dayou.enums.CertificateEnum;
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.ProductionEnum;
 import com.dayou.enums.ReportStatus;
 import com.dayou.exception.ErrorCode;
@@ -76,6 +75,14 @@ public class PersonalProductionServiceImpl extends ServiceImpl<PersonalProductio
     @Autowired
     private DfsConfig dfsConfig;
 
+    @Autowired
+    private ICustomerCompanyService customerCompanyService;
+
+    @Autowired
+    private PersonalProductionMapper personalProductionMapper;
+
+
+
     @Override
     public void setResourceLoader(ResourceLoader resourceLoader) {
         this.resourceLoader = resourceLoader;
@@ -397,13 +404,14 @@ public class PersonalProductionServiceImpl extends ServiceImpl<PersonalProductio
     public Boolean repertoryOut(TaskRecordDTO<PersonalProduction> taskRecordDTO) {
         PersonalProduction taskData = taskRecordDTO.getTaskData();
         List<PersonalProduction> productions;
+        Long targetId = taskData.getTargetId();
         if (taskData.getProduction().equals(STATEMENT.name())){
             productions = this.list(new LambdaQueryWrapper<PersonalProduction>()
-                    .eq(PersonalProduction::getTargetId,taskData.getTargetId()).eq(PersonalProduction::getProduction,taskData.getProduction())
+                    .eq(PersonalProduction::getTargetId, targetId).eq(PersonalProduction::getProduction,taskData.getProduction())
                     .eq(BaseEntity::getDeleted, Boolean.FALSE));
         }else {
             productions = this.list(new LambdaQueryWrapper<PersonalProduction>()
-                    .eq(PersonalProduction::getTargetId,taskData.getTargetId()).ne(PersonalProduction::getProduction,STATEMENT.name())
+                    .eq(PersonalProduction::getTargetId, targetId).ne(PersonalProduction::getProduction,STATEMENT.name())
                     .eq(BaseEntity::getDeleted, Boolean.FALSE));
         }
 
@@ -412,18 +420,27 @@ public class PersonalProductionServiceImpl extends ServiceImpl<PersonalProductio
             return this.update(new LambdaUpdateWrapper<PersonalProduction>().set(PersonalProduction::getRepertoryState, Boolean.TRUE).set(PersonalProduction::getRepertoryOutTime,new Date())
                     .eq(BaseEntity::getId, productions.get(0).getId()));
         }else{
-            //非价值意见书 需做出库前校验
-//            Long outId = beforeOutCheck(production);
-//            //更新申请记录中的出库状态
-//            if (outId!=null){
-//                outWarehouseService.update(new LambdaUpdateWrapper<ProductionOutWarehouse>().set(ProductionOutWarehouse::getProductionOut,Boolean.TRUE).eq(BaseEntity::getId,outId));
-//                return this.update(new LambdaUpdateWrapper<MajorProduction>().set(MajorProduction::getRepertoryState, Boolean.TRUE)
-//                        .set(MajorProduction::getRepertoryOutTime,new Date()).set(MajorProduction::getDelivery,Boolean.TRUE)
-//                        .eq(BaseEntity::getId, production.getId()));
-//            }else{
-//                ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR, "财务部未审核或审核不通过,产品暂时无法出库。");
-//                return Boolean.FALSE;
-//            }
+            //非意见书 需做出库前校验
+            if (!customerCompanyService.avoidWareHouseApplyByTargetId(targetId)){
+                //验证是否有出库申请并且审核通过
+
+            }
+            List<Long> productionIds = productions.stream().map(BaseEntity::getId).collect(Collectors.toList());
+            return this.update(new LambdaUpdateWrapper<PersonalProduction>().set(PersonalProduction::getRepertoryState,Boolean.TRUE)
+                    .set(PersonalProduction::getRepertoryOutTime,new Date()).in(BaseEntity::getId,productionIds));
+        }
+    }
+
+    @Override
+    public OrderProductionsBag productionBag(Long id) {
+        //获取产品信息
+        List<ProductionDTO> productions = personalProductionMapper.getProductions(id);
+        if (CollectionUtil.isNotEmpty(productions)){
+            OrderProductionsBag orderProductionsBag = new OrderProductionsBag();
+            orderProductionsBag.setBusinessId(id);
+            orderProductionsBag.setBusinessType(MainBusinessEnum.PERSONAL_BUSINESS.name());
+            orderProductionsBag.setProductions(productions);
+            return orderProductionsBag;
         }
         return null;
     }

+ 6 - 0
service/src/main/java/com/dayou/service/impl/PersonalServiceImpl.java

@@ -144,6 +144,12 @@ public class PersonalServiceImpl extends ServiceImpl<PersonalMapper, Personal> i
         }
     }
 
+    @Override
+    public Page<PersonalVO> waitingClaimOrder(Page page, PersonalVO personalVO) {
+
+        return null;
+    }
+
     private synchronized Long nextInwardStaff(){
         GlobalConfig inwardStaffRoll = globalConfigService.getGlobalConfig(GlobalConfigEnum.DEPARTMENT_TURNS.getCode(), GlobalConfigEnum.DepartmentTurns.INWARD_STAFF_ROLL.getCode());
         List<User> users = userService.simplePostName(PERSONAL_INWARD);

+ 36 - 9
service/src/main/java/com/dayou/service/impl/ProductionOutWarehouseServiceImpl.java

@@ -2,18 +2,13 @@ package com.dayou.service.impl;
 
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.TaskRecordDTO;
-import com.dayou.entity.MajorProduction;
-import com.dayou.entity.ProductionFund;
-import com.dayou.entity.ProductionOutWarehouse;
+import com.dayou.entity.*;
 import com.dayou.enums.FinanceInvoiceState;
 import com.dayou.enums.MainBusinessEnum;
 import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.ProductionOutWarehouseMapper;
-import com.dayou.service.IMajorProductionService;
-import com.dayou.service.IProductionFundService;
-import com.dayou.service.IProductionOutWarehouseService;
+import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dayou.service.IUserService;
 import com.dayou.utils.DateUtils;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.ProductionOutWarehouseApplyVO;
@@ -36,6 +31,7 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.ArrayList;
@@ -57,10 +53,13 @@ public class ProductionOutWarehouseServiceImpl extends ServiceImpl<ProductionOut
     private ProductionOutWarehouseMapper outWarehouseMapper;
 
     @Autowired
-    private IUserService userService;
+    private IMajorProductionService majorProductionService;
 
     @Autowired
-    private IMajorProductionService majorProductionService;
+    private IOrderFundService orderFundService;
+
+    @Autowired
+    private IPersonalService personalService;
 
     @Override
     @SuppressWarnings("unchecked")
@@ -90,6 +89,29 @@ public class ProductionOutWarehouseServiceImpl extends ServiceImpl<ProductionOut
                 return  this.save(productionOutWarehouse);
             }
         }
+        //个贷出库申请 创建应收款
+        if (productionOutWarehouse.getBusinessType().equals(MainBusinessEnum.PERSONAL_BUSINESS.name())){
+            Long businessId = productionOutWarehouse.getBusinessId();
+            BigDecimal shouldAmount = productionOutWarehouse.getShouldAmount();
+            Long orderFundId = productionOutWarehouse.getOrderFundId();
+            Personal personal = personalService.getOne(new LambdaQueryWrapper<Personal>().select(Personal::getOrderId, Personal::getLocation).eq(BaseEntity::getId, businessId).eq(BaseEntity::getDeleted, Boolean.FALSE));
+            if (orderFundId==null){
+                OrderFund orderFund = new OrderFund();
+                orderFund.setBusinessType(MainBusinessEnum.PERSONAL_BUSINESS.name());
+                orderFund.setBusinessId(businessId);
+                orderFund.setOrderName(personal.getLocation());
+                orderFund.setOrderId(personal.getOrderId());
+                orderFund.setShouldAmount(shouldAmount);
+                orderFundService.add(orderFund);
+            }else {
+                orderFundService.update(new LambdaUpdateWrapper<OrderFund>().set(OrderFund::getShouldAmount,shouldAmount).eq(BaseEntity::getId,orderFundId));
+            }
+            productionOutWarehouse.setApplyId(LoginContext.getCurrentUserId());
+            productionOutWarehouse.setOrderId(personal.getId());
+            productionOutWarehouse.setReportNo(personal.getOrderId());
+            //获取财务审核人
+            return  this.save(productionOutWarehouse);
+        }
         ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"产品不在库存中,还未入库或则已经出库。请确认。");
         return Boolean.FALSE;
     }
@@ -144,4 +166,9 @@ public class ProductionOutWarehouseServiceImpl extends ServiceImpl<ProductionOut
     public List<ProductionOutWarehouseApplyVO> getListByBizTypeProductionId(String businessType, Long productionId) {
        return outWarehouseMapper.getListByBizTypeProductionId(businessType,productionId);
     }
+
+    @Override
+    public List<ProductionOutWarehouseApplyVO> getPersonalByOrderId(Long orderId) {
+        return outWarehouseMapper.getPersonalByOrderId(orderId);
+    }
 }

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

@@ -3,6 +3,7 @@ import com.dayou.dto.WorkNodeDTO;
 import com.dayou.entity.WorkNode;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.workflow.WorkflowNodeEnum;
 import com.dayou.vo.NameCodeVO;
 
@@ -57,9 +58,10 @@ public interface IWorkNodeService extends IService<WorkNode> {
      * 当前节点需校验业务数据,若要忽略节点,获取忽略后的第一个节点。
      * @param flowId
      * @param necessaryNodes
+     * @param mainBusinessEnum
      * @return
      */
-    WorkNodeDTO getNextWorkNodeByBusiness(Long flowId,String nodeCode,Map<String,List<WorkflowNodeEnum>> necessaryNodes);
+    WorkNodeDTO getNextWorkNodeByBusiness(Long flowId, MainBusinessEnum mainBusinessEnum, String nodeCode, Map<String,List<WorkflowNodeEnum>> necessaryNodes);
 
     /**
      * 获取下单节点

+ 12 - 4
service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java

@@ -10,6 +10,7 @@ import com.dayou.dto.WorkNodeDTO;
 import com.dayou.entity.WorkFlow;
 import com.dayou.entity.WorkNode;
 import com.dayou.entity.WorkNodeTask;
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.ProductionEnum;
 import com.dayou.enums.ReportStatus;
 import com.dayou.enums.workflow.NodeTaskVersion;
@@ -208,7 +209,7 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
     }
 
     @Override
-    public WorkNodeDTO getNextWorkNodeByBusiness(Long flowId, String nodeCode,Map<String,List<WorkflowNodeEnum>> necessaryNodes) {
+    public WorkNodeDTO getNextWorkNodeByBusiness(Long flowId, MainBusinessEnum mainBusinessEnum, String nodeCode, Map<String,List<WorkflowNodeEnum>> necessaryNodes) {
         List<WorkNodeDTO> flowNodes = getFlowNodes(flowId);
         //报价客户反馈 后有可能出价值意见书、报告、复评函
             if (WorkflowNodeEnum.QUOTATION_FEEDBACK.name().equals(nodeCode)){
@@ -238,10 +239,17 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
                 }
             }
         }
-        //报告出库后或复评函出库后 只有可能 归档审核 (也可能不价值意见书,逻辑不在这里处理)
+        //报告出库后或复评函出库后
         if (WorkflowNodeEnum.REPORT_OUT.name().equals(nodeCode) || WorkflowNodeEnum.LETTER_OUT.name().equals(nodeCode) ){
-            //归档审核
-            return flowNodes.stream().filter(x->x.getCode().equals(WorkflowNodeEnum.CHECK_ARCHIVING.name())).findFirst().get();
+            if (mainBusinessEnum.equals(MainBusinessEnum.MAJOR_BUSINESS)){
+                //大中型业务 :归档审核
+                return flowNodes.stream().filter(x->x.getCode().equals(WorkflowNodeEnum.CHECK_ARCHIVING.name())).findFirst().get();
+            }
+            if (mainBusinessEnum.equals(MainBusinessEnum.PERSONAL_BUSINESS)){
+                //个贷业务 :提交归档资料
+                return flowNodes.stream().filter(x->x.getCode().equals(WorkflowNodeEnum.COMMIT_FILE.name())).findFirst().get();
+            }
+
         }
         return null;
     }

+ 2 - 2
service/src/main/java/com/dayou/workflow/handler/MajorNodeHandler.java

@@ -59,7 +59,7 @@ public class MajorNodeHandler extends WorkNodeProcessable {
 
     @Override
     public boolean forward(WorkNodeCommit workNodeCommit) {
-        WorkFlowNodeInstance currentInstanceNode = workFlowNodeInstanceService.getById(workNodeCommit.getInstanceNodeId());
+        WorkFlowNodeInstance currentInstanceNode = workFlowNodeInstanceMapper.getById(workNodeCommit.getInstanceNodeId());
         WorkNodeDTO nextWorkNode = beforeForward(workNodeCommit,currentInstanceNode);
         if (nextWorkNode!=null){
             String ifVerify = currentInstanceNode.getVerify();
@@ -79,7 +79,7 @@ public class MajorNodeHandler extends WorkNodeProcessable {
                             //2.根据出具的产品类型 确定需要哪些节点
                             Map<String,List<WorkflowNodeEnum>> majorNecessaryNodes = CallbackEnum.NecessaryNode.getByProduction(MainBusinessEnum.MAJOR_BUSINESS.name(),
                                     production);
-                            nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(),currentInstanceNode.getNodeCode(), majorNecessaryNodes);
+                            nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(),MainBusinessEnum.MAJOR_BUSINESS,currentInstanceNode.getNodeCode(), majorNecessaryNodes);
                             break;
                         case CHECK_PRODUCTION_FUND:
                             if (workNodeCommit.getIfProductionFund()){

+ 8 - 5
service/src/main/java/com/dayou/workflow/handler/PersonalNodeHandler.java

@@ -16,6 +16,7 @@ import com.dayou.enums.workflow.HandlerPermissionEnum;
 import com.dayou.enums.workflow.WorkflowNodeEnum;
 import com.dayou.mapper.DepartmentMapper;
 import com.dayou.mapper.PersonalMapper;
+import com.dayou.mapper.WorkFlowNodeInstanceMapper;
 import com.dayou.service.ICustomerCompanyService;
 import com.dayou.service.IUserPostService;
 import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
@@ -49,18 +50,18 @@ public class PersonalNodeHandler extends WorkNodeProcessable {
     private IUserPostService userPostService;
 
     @Autowired
-    private IWorkFlowNodeInstanceService workFlowNodeInstanceService;
-
-    @Autowired
     private IWorkNodeService workNodeService;
 
     @Autowired
     private ICustomerCompanyService customerCompanyService;
 
+    @Autowired
+    private WorkFlowNodeInstanceMapper workFlowNodeInstanceMapper;
+
 
     @Override
     public boolean forward(WorkNodeCommit workNodeCommit) {
-        WorkFlowNodeInstance currentInstanceNode = workFlowNodeInstanceService.getById(workNodeCommit.getInstanceNodeId());
+        WorkFlowNodeInstance currentInstanceNode = workFlowNodeInstanceMapper.getById(workNodeCommit.getInstanceNodeId());
         WorkNodeDTO nextWorkNode = beforeForward(workNodeCommit,currentInstanceNode);
         if (nextWorkNode!=null){
             String ifVerify = currentInstanceNode.getVerify();
@@ -76,7 +77,7 @@ public class PersonalNodeHandler extends WorkNodeProcessable {
                             //2.根据出具的产品类型 确定需要哪些节点
                             Map<String, List<WorkflowNodeEnum>> personalNecessaryNodes = CallbackEnum.NecessaryNode.getByProduction(MainBusinessEnum.PERSONAL_BUSINESS.name(),
                                     production);
-                            nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(), currentInstanceNode.getNodeCode(), personalNecessaryNodes);
+                            nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(),MainBusinessEnum.PERSONAL_BUSINESS, currentInstanceNode.getNodeCode(), personalNecessaryNodes);
                             break;
                         case CHECK_FEEDBACK:
                             if (!workNodeCommit.getIfFeedback()) {
@@ -117,6 +118,8 @@ public class PersonalNodeHandler extends WorkNodeProcessable {
                         :handlerId;
             case DEPARTMENT_LEADER:
                 return departmentMapper.selectOne(new LambdaQueryWrapper<Department>().select(Department::getLeaderId).eq(Department::getName,PERSONAL_DEPARTMENT)).getLeaderId();
+            case CLIENT_MANAGER:
+                return personal.getClientManagerId();
             case OUTWARD_STAFF:
                 return personal.getOutwardStaff();
             case INWARD_STAFF:

+ 11 - 0
sql/update_sql.sql

@@ -220,3 +220,14 @@ ALTER TABLE `assets_production` ADD qr_code varchar(255) NULL COMMENT '二维码
 
 # 新增字段check_value
 ALTER TABLE `assets_evaluation_target` ADD check_value decimal(16,4) NULL COMMENT '审核价格';
+
+/**
+  日期:2024-04-07
+ */
+ # 修改产品出库申请表 production_id 可空  修改个贷订单表 terminal_clientele_type 可空
+ALTER TABLE production_out_warehouse MODIFY COLUMN production_id bigint(20) NULL;
+ALTER TABLE personal MODIFY COLUMN terminal_clientele_type varchar(32) NULL;
+ALTER TABLE production_out_warehouse add COLUMN order_id bigint(32) DEFAULT NULL comment '订单id(个贷)';
+ALTER TABLE production_out_warehouse MODIFY COLUMN production_id bigint(20) comment '产品id(大中型)';
+ALTER TABLE production_out_warehouse add COLUMN order_fund_id bigint(32) DEFAULT NULL comment '订单应收款id(个贷)';
+ALTER TABLE production_out_warehouse MODIFY COLUMN production_fund_id bigint(20) comment '产品应收款id(大中型)';