Browse Source

feat: 积分包任务类型限制

shc 10 tháng trước cách đây
mục cha
commit
84cfe7e6ad

+ 5 - 3
doc/db/34wm_pkg_tt_qty.sql

@@ -11,15 +11,17 @@ CREATE TABLE `wm_pkg_tt_qty`
 (
     `record_id`   INT UNSIGNED AUTO_INCREMENT NOT NULL COMMENT '信息',
     `pkg_id`      INT                         NOT NULL COMMENT '企业ID',
-    `tt_id`       INT                         NOT NULL COMMENT '企业名称',
-    `qty`         VARCHAR(64)                 NOT NULL COMMENT '企业法人',
+    `tt_id`       INT                         NOT NULL COMMENT '任务类型ID',
+    `tt_name`     VARCHAR(64)                 NOT NULL COMMENT '任务类型名称',
+    `tt_price`    INT UNSIGNED                NOT NULL COMMENT '任务单价',
+    `qty`         VARCHAR(64)                 NOT NULL COMMENT '任务类型数量',
     `create_time` DATETIME                    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     PRIMARY KEY `pk_id` (`record_id`) USING BTREE,
     KEY `idx_pid` (`pkg_id`) USING BTREE
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4
   COLLATE = utf8mb4_general_ci
-  ROW_FORMAT = DYNAMIC COMMENT ='企业合同信息';
+  ROW_FORMAT = DYNAMIC COMMENT ='积分包任务类型数量';
 
 
 -- ----------------------------

+ 6 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmPackageTaskTypeQty.java

@@ -30,6 +30,12 @@ public class WmPackageTaskTypeQty implements Serializable {
     @TableField(value = "tt_id")
     private Integer taskTypeId;
 
+    @TableField(value = "tt_name")
+    private String taskTypeName;
+
+    @TableField(value = "tt_price")
+    private Integer price;
+
     private Integer qty;
 
     private LocalDateTime createTime;

+ 7 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmScorePackage.java

@@ -16,6 +16,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -586,6 +587,12 @@ public class WmScorePackage implements Serializable {
     @TableField(exist = false)
     private SysImplementPlan plan;
 
+    /**
+     * 积分包任务类型数量
+     */
+    @TableField(exist = false)
+    private List<Map<String, Object>> pkgTaskTypeQtyList;
+
     @Getter
     @AllArgsConstructor
     public enum PackageStopStatus {

+ 8 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/SysImplementPlanVO.java

@@ -1,12 +1,15 @@
 package com.qunzhixinxi.hnqz.admin.api.vo;
 
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysImplPlanDetails;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysImplPlanDetailsItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysImplementPlan;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -65,6 +68,11 @@ public final class SysImplementPlanVO {
          */
         private SysImplPlanDetails planDetails;
 
+        /**
+         * 详情子项
+         */
+        private List<SysImplPlanDetailsItem> planItems;
+
 
     }
 }

+ 32 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -31,6 +31,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEnt;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPkgQuizRelation;
 import com.qunzhixinxi.hnqz.admin.api.constant.enums.TargetType;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
@@ -53,6 +54,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRecharge;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRechargeRecord;
 import com.qunzhixinxi.hnqz.admin.api.constant.enums.RechargeRecordPackageType;
 import com.qunzhixinxi.hnqz.admin.api.constant.enums.RechargeRecordType;
+import com.qunzhixinxi.hnqz.admin.event.PackageContractEvent;
 import com.qunzhixinxi.hnqz.admin.manager.WmPackageManager;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRechargeMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRechargeRecordMapper;
@@ -69,6 +71,7 @@ import com.qunzhixinxi.hnqz.admin.service.WmBizReminderService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
+import com.qunzhixinxi.hnqz.admin.service.WmPackageTaskTypeQtyService;
 import com.qunzhixinxi.hnqz.admin.service.WmPkgQuizRelationService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
@@ -89,6 +92,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -165,6 +169,8 @@ public class WmScorePackageController {
     private final Sequence pkgSequence;
     private final SysPlanPkgService planPkgService;
     private final WmPackageManager packageManager;
+    private final WmPackageTaskTypeQtyService packageTaskTypeQtyService;
+    private final ApplicationEventPublisher applicationEventPublisher;
 
 
     @GetMapping(value = "/quiz/relation/list")
@@ -1774,8 +1780,9 @@ public class WmScorePackageController {
         return R.ok(answerList);
     }
 
-
     /**
+     *
+     * todo 记录qtyxx
      * 新增积分包(大包)
      * <p>
      * 满足以下任一条件,则可以发包
@@ -2066,7 +2073,7 @@ public class WmScorePackageController {
             rechargeRecord.setPackageId(wmScorePackage.getId());
             rechargeRecord.setPackageType(RechargeRecordPackageType.TO_ENTERPRISE);
             rechargeRecord.setType(RechargeRecordType.SEND_PACKAGE_DEPT);
-            rechargeRecord.setCurrentScore((long) currentScore);
+            rechargeRecord.setCurrentScore(currentScore);
             rechargeRecord.setCreateUser(userId);
             rechargeRecord.setCreateTime(now);
             sysDeptRechargeRecordMapper.insert(rechargeRecord);
@@ -2090,6 +2097,29 @@ public class WmScorePackageController {
 
         planPkgService.save(rel);
 
+        // 保存积分包任务类型数量限制 && 异步生成合同
+        List<Map<String, Object>> typeQtyList = wmScorePackage.getPkgTaskTypeQtyList();
+        if (CollUtil.isNotEmpty(typeQtyList)) {
+
+            List<WmPackageTaskTypeQty> collect = typeQtyList.stream().map(m -> {
+                WmPackageTaskTypeQty typeQty = new WmPackageTaskTypeQty();
+                typeQty.setPackageId(Integer.valueOf(wmScorePackage.getId()));
+                typeQty.setTaskTypeName((String) m.get("taskTypeName"));
+                typeQty.setPrice((Integer) m.get("price"));
+                typeQty.setTaskTypeId((Integer) m.get("taskTypeId"));
+                typeQty.setQty((Integer) m.get("qty"));
+                typeQty.setCreateTime(LocalDateTime.now());
+                return typeQty;
+            }).collect(Collectors.toList());
+
+            packageTaskTypeQtyService.saveBatch(collect);
+
+            // 异步生成合同
+            applicationEventPublisher.publishEvent(new PackageContractEvent(Integer.valueOf(wmScorePackage.getId()), collect));
+
+
+        }
+
         return R.ok();
     }
 

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/event/PackageContractEvent.java

@@ -1,8 +1,11 @@
 package com.qunzhixinxi.hnqz.admin.event;
 
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.List;
+
 /**
  * 积分包合同事件
  *
@@ -15,4 +18,6 @@ public class PackageContractEvent {
 
     private Integer packageId;
 
+    private List<WmPackageTaskTypeQty> taskTypeQtiyList;
+
 }

+ 10 - 18
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/listener/PackageContractEventListener.java

@@ -1,21 +1,17 @@
 package com.qunzhixinxi.hnqz.admin.listener;
 
 import cn.hutool.core.date.DatePattern;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysEntContractInfo;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageContract;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
-import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.event.PackageContractEvent;
 import com.qunzhixinxi.hnqz.admin.mapper.SysEntContractInfoMapper;
-import com.qunzhixinxi.hnqz.admin.mapper.WmPackageTaskTypeQtyMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
 import com.qunzhixinxi.hnqz.admin.service.WmPackageContractService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
-import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
 import com.qunzhixinxi.hnqz.admin.util.OsEnvUtils;
 import com.qunzhixinxi.hnqz.common.core.util.PdfUtils;
 import lombok.AllArgsConstructor;
@@ -36,8 +32,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -83,8 +77,6 @@ public class PackageContractEventListener {
     private final WmScorePackageService packageService;
     private final WmDaDrugEntDrugtableService drugEntDrugtableService;
     private final SysEntContractInfoMapper entContractInfoMapper;
-    private final WmPackageTaskTypeQtyMapper packageTaskTypeQtyMapper;
-    private final WmTaskTypeService taskTypeService;
 
 
     /**
@@ -116,7 +108,7 @@ public class PackageContractEventListener {
                         + "_" + now.format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATETIME_PATTERN))
                         + ".pdf";
 
-        Map<String, String> params = buildContractParams(pkgId, now);
+        Map<String, String> params = buildContractParams(event, now);
 
         PdfUtils.resumeGenerate(templatePath, outFilePath, envPaths.get(OsEnvUtils.TargetFile.FONT.getName()) + "SimSun.ttc", params);
 
@@ -137,12 +129,12 @@ public class PackageContractEventListener {
 
     }
 
-    private Map<String, String> buildContractParams(Integer pkgId, LocalDateTime now) {
+    private Map<String, String> buildContractParams(PackageContractEvent event, LocalDateTime now) {
 
         Map<String, String> params = new HashMap<>(29);
 
         // 获取积分包
-        WmScorePackage pkg = packageService.getById(pkgId.toString());
+        WmScorePackage pkg = packageService.getById(event.getPackageId().toString());
 
         // 通过药品获取甲方信息
         String[] drugtable = pkg.getDrugtable();
@@ -173,23 +165,23 @@ public class PackageContractEventListener {
 
         // 任务数量统计
 
-        List<WmPackageTaskTypeQty> qtyList = packageTaskTypeQtyMapper.listByPackageId(pkgId);
+        List<WmPackageTaskTypeQty> qtyList = event.getTaskTypeQtiyList();
         int total = qtyList.stream().mapToInt(WmPackageTaskTypeQty::getQty).sum();
-        Set<Integer> ttIds = qtyList.stream().map(WmPackageTaskTypeQty::getTaskTypeId).collect(Collectors.toSet());
+        // Set<Integer> ttIds = qtyList.stream().map(WmPackageTaskTypeQty::getTaskTypeId).collect(Collectors.toSet());
 
-        List<WmTaskType> list = taskTypeService.list(Wrappers.<WmTaskType>lambdaQuery().in(WmTaskType::getId, ttIds));
-        Map<String, WmTaskType> collect = list.stream().collect(Collectors.toMap(WmTaskType::getId, Function.identity()));
+        // List<WmTaskType> list = taskTypeService.list(Wrappers.<WmTaskType>lambdaQuery().in(WmTaskType::getId, ttIds));
+        // Map<Integer, String> collect = qtyList.stream().collect(Collectors.toMap(WmPackageTaskTypeQty::getTaskTypeId, WmPackageTaskTypeQty::getTaskTypeName));
 
 
         for (int i = 1, size = qtyList.size() + 1; i <= size; i++) {
             String prefix = "s" + i;
             WmPackageTaskTypeQty qty = qtyList.get(i);
-            WmTaskType taskType = collect.get(qty.getTaskTypeId().toString());
+            // WmTaskType taskType = collect.get(qty.getTaskTypeId().toString());
 
             Integer count = qty.getQty();
-            params.put(prefix + "_name", taskType.getTaskTypeName());
+            params.put(prefix + "_name", qty.getTaskTypeName());
             params.put(prefix + "_qty", count.toString());
-            params.put(prefix + "_price", taskType.getScore().toString());
+            params.put(prefix + "_price", qty.getPrice().toString());
 
 
             params.put(prefix + "_rate", String.format(".2%f%%", count.doubleValue() / total));

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/SysImplementPlanManager.java

@@ -462,6 +462,16 @@ public class SysImplementPlanManager {
             skuInfo.put("manufacturer", MapUtil.isEmpty(sku) ? "" : sku.get("ent_name"));
             copied.setSkuInfo(skuInfo);
 
+            // 拆解详情
+            SysImplPlanDetails details = implPlanDetailsService.getDetailsByPlanId(p.getPlanId());
+            copied.setPlanDetails(details);
+            if (details != null) {
+                // 拆解子项
+                List<SysImplPlanDetailsItem> detailsItems = implPlanDetailsItemService.listDetailItems(details.getDetailsId()).stream().filter(item -> item.getQty() > 0).collect(Collectors.toList());
+                copied.setPlanItems(detailsItems);
+            }
+
+
             return copied;
 
         }).collect(Collectors.toList());

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysImplPlanDetailsService.java

@@ -26,4 +26,12 @@ public interface SysImplPlanDetailsService extends IService<SysImplPlanDetails>
      * @return 更新结果
      */
     Boolean updateDetails(SysImplPlanDetails details);
+
+    /**
+     * 获取计划的详情
+     *
+     * @param planId 计划ID
+     * @return 计划详情
+     */
+    SysImplPlanDetails getDetailsByPlanId(Integer planId);
 }

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPackageTaskTypeQtyService.java

@@ -0,0 +1,12 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
+
+/**
+ * 积分包任务类型数量
+ * @author jimmy
+ * @date 2024-08-18 12:30
+ */
+public interface WmPackageTaskTypeQtyService extends IService<WmPackageTaskTypeQty> {
+}

+ 17 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysImplPlanDetailsServiceImpl.java

@@ -1,13 +1,18 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysImplPlanDetails;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysImplementPlan;
 import com.qunzhixinxi.hnqz.admin.mapper.SysImplPlanDetailsMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysImplPlanDetailsService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 /**
  * 执行计划详情服务实现
  *
@@ -42,6 +47,18 @@ public class SysImplPlanDetailsServiceImpl extends ServiceImpl<SysImplPlanDetail
     public Boolean updateDetails(SysImplPlanDetails details) {
         return this.updateById(details);
     }
+
+    /**
+     * 获取计划的详情
+     *
+     * @param planId 计划ID
+     * @return 计划详情
+     */
+    @Override
+    public SysImplPlanDetails getDetailsByPlanId(Integer planId) {
+        List<SysImplPlanDetails> list = this.list(Wrappers.<SysImplPlanDetails>lambdaQuery().eq(SysImplPlanDetails::getPlanId, planId));
+        return CollUtil.isNotEmpty(list) ? list.get(0) : null;
+    }
 }
 
 

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPackageTaskTypeQtyServiceImpl.java

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
+import com.qunzhixinxi.hnqz.admin.mapper.WmPackageTaskTypeQtyMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmPackageTaskTypeQtyService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 包任务类型数量服务实现
+ *
+ * @author jimmy
+ * @date 2024-08-18 12:30
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class WmPackageTaskTypeQtyServiceImpl extends ServiceImpl<WmPackageTaskTypeQtyMapper, WmPackageTaskTypeQty> implements WmPackageTaskTypeQtyService {
+}