|
@@ -3,6 +3,8 @@ package com.qunzhixinxi.hnqz.admin.service.impl;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
|
+import cn.hutool.core.text.CharSequenceUtil;
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
import cn.hutool.core.util.DesensitizedUtil;
|
|
import cn.hutool.core.util.DesensitizedUtil;
|
|
import cn.hutool.core.util.RandomUtil;
|
|
import cn.hutool.core.util.RandomUtil;
|
|
@@ -28,6 +30,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmDaAgent;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmDaAgent;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEnt;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEnt;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
|
|
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.entity.WmPkgQuizRelation;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmReport;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmReport;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
|
|
@@ -59,6 +62,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRecharge;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRechargeRecord;
|
|
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.RechargeRecordPackageType;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.enums.RechargeRecordType;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.enums.RechargeRecordType;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.event.PackageContractEvent;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRechargeMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRechargeMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRechargeRecordMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRechargeRecordMapper;
|
|
@@ -73,12 +77,15 @@ import com.qunzhixinxi.hnqz.admin.mapper.WmTaskTypeMapper;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysImplementPlanService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysImplementPlanService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.SysPlanPkgService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
|
|
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.WmPkgQuizRelationService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmScoreTaskTypeService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTeamService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTeamService;
|
|
import com.qunzhixinxi.hnqz.admin.util.MapUtil;
|
|
import com.qunzhixinxi.hnqz.admin.util.MapUtil;
|
|
import com.qunzhixinxi.hnqz.common.core.exception.BizException;
|
|
import com.qunzhixinxi.hnqz.common.core.exception.BizException;
|
|
@@ -88,6 +95,7 @@ import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
|
|
import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.commons.lang.ArrayUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
@@ -148,6 +156,9 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
|
|
private final WmDaDrugEntDrugtableService drugEntDrugtableService;
|
|
private final WmDaDrugEntDrugtableService drugEntDrugtableService;
|
|
private final SysPlanPkgMapper sysPlanPkgMapper;
|
|
private final SysPlanPkgMapper sysPlanPkgMapper;
|
|
private final SysImplementPlanService implementPlanService;
|
|
private final SysImplementPlanService implementPlanService;
|
|
|
|
+ private final WmPackageTaskTypeQtyService packageTaskTypeQtyService;
|
|
|
|
+ private final WmScoreTaskTypeService wmScoreTaskTypeService;
|
|
|
|
+ private final SysPlanPkgService planPkgService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<WmScorePackage> listWmScorePackageAndTask(WmScorePackage wmScorePackage) {
|
|
public List<WmScorePackage> listWmScorePackageAndTask(WmScorePackage wmScorePackage) {
|
|
@@ -3932,6 +3943,341 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
|
|
return records;
|
|
return records;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 创建大包
|
|
|
|
+ *
|
|
|
|
+ * @param wmScorePackage 包参数
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public PackageContractEvent saveEntPkg(WmScorePackage wmScorePackage) {
|
|
|
|
+ HnqzUser operator = SecurityUtils.getUser();
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
+ List<Integer> roles = SecurityUtils.getRoles();
|
|
|
|
+ Integer deptId = operator.getDeptId();
|
|
|
|
+ Integer userId = operator.getId();
|
|
|
|
+ Integer planId = wmScorePackage.getPlanId();
|
|
|
|
+
|
|
|
|
+ String relPkgId = wmScorePackage.getRelationScoreId();
|
|
|
|
+ boolean relatedScoreId = CharSequenceUtil.isNotBlank(relPkgId) && Integer.parseInt(relPkgId) > 0;
|
|
|
|
+ SysDeptRecharge deptRecharge = null;
|
|
|
|
+
|
|
|
|
+ // 校验积分值
|
|
|
|
+ if (wmScorePackage.getScore() <= 0) {
|
|
|
|
+ throw new RuntimeException("积分包分值必须大于0");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 校验积分包名称是否存在
|
|
|
|
+ if (CharSequenceUtil.isNotBlank(wmScorePackage.getScorePackageName())) {
|
|
|
|
+
|
|
|
|
+ int existed = this.count(Wrappers.<WmScorePackage>lambdaQuery()
|
|
|
|
+ .eq(WmScorePackage::getDelFlag, "0")
|
|
|
|
+ .eq(WmScorePackage::getScorePackageName, wmScorePackage.getScorePackageName())
|
|
|
|
+ .eq(WmScorePackage::getDeptId, wmScorePackage.getDeptId()));
|
|
|
|
+
|
|
|
|
+ if (existed != 0) {
|
|
|
|
+ throw new RuntimeException("积分包名称已存在");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 校验积分值
|
|
|
|
+ if (!relatedScoreId) {
|
|
|
|
+ // 校验 发包积分 < 积分充值分配的积分 则可以发包
|
|
|
|
+ deptRecharge = sysDeptRechargeMapper.selectOne(Wrappers.<SysDeptRecharge>lambdaQuery().eq(SysDeptRecharge::getDeptId, deptId));
|
|
|
|
+ if (deptRecharge == null) {
|
|
|
|
+ log.error("未配置积分充值信息");
|
|
|
|
+ throw new BizException("积分余额:0,积分不足");
|
|
|
|
+ }
|
|
|
|
+ long limitScore = deptRecharge.getScore() + deptRecharge.getOverdrawScore();
|
|
|
|
+ if (wmScorePackage.getScore() > limitScore) {
|
|
|
|
+ log.error("已分配积分不足,发包积分={},剩余积分={},透支额度={}", wmScorePackage.getScore(), deptRecharge.getScore(), limitScore);
|
|
|
|
+ throw new BizException(String.format("积分余额:%s,积分不足", deptRecharge.getScore()));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // 校验上级可分配积分值
|
|
|
|
+ List<WmScorePackage> scorePackagekfpjf =
|
|
|
|
+ this.getScorePackagekfpjf(
|
|
|
|
+ null,
|
|
|
|
+ null,
|
|
|
|
+ new String[]{"0", "1", "2"},
|
|
|
|
+ new String[]{wmScorePackage.getRelationScoreId()});
|
|
|
|
+
|
|
|
|
+ if (CollUtil.isNotEmpty(scorePackagekfpjf)) {
|
|
|
|
+ int kfpjf = scorePackagekfpjf.get(0).getKfpjf();
|
|
|
|
+ if (wmScorePackage.getScore() > kfpjf) {
|
|
|
|
+ log.error("可分配积分值不足");
|
|
|
|
+ throw new BizException("可分配积分值不足");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ wmScorePackage.setPackageType1("1");
|
|
|
|
+ wmScorePackage.setDelFlag("0");
|
|
|
|
+ wmScorePackage.setEnableFlag("0");
|
|
|
|
+ wmScorePackage.setPackageIsConduct("0");
|
|
|
|
+ wmScorePackage.setDrugEntId(null);
|
|
|
|
+ wmScorePackage.setCreateUser(userId);
|
|
|
|
+ wmScorePackage.setCreateTime(now);
|
|
|
|
+ wmScorePackage.setUpdateTime(now);
|
|
|
|
+ wmScorePackage.setPackageFinishStatus("0");
|
|
|
|
+ wmScorePackage.setPackageAuditStatus("0");
|
|
|
|
+ wmScorePackage.setSendPackageDeptId(deptId.toString());
|
|
|
|
+ wmScorePackage.setAllocationDate(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN).format(now));
|
|
|
|
+ if (wmScorePackage.getEndTime() == null) {
|
|
|
|
+ // 默认截止日期为一年后
|
|
|
|
+ wmScorePackage.setEndTime(now.plusYears(1).toLocalDate());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 关联上级推广药品企业(兼容历史)
|
|
|
|
+ if (org.apache.commons.lang.StringUtils.isEmpty(relPkgId)) {
|
|
|
|
+ wmScorePackage.setDrugProducerList(null);
|
|
|
|
+ } else if (org.apache.commons.lang.StringUtils.isNotEmpty(relPkgId) && ArrayUtils.isEmpty(wmScorePackage.getDrugtable())) {
|
|
|
|
+ // 关联上级推广药品
|
|
|
|
+ WmScorePackage relateSp = this.getById(relPkgId);
|
|
|
|
+ if (relateSp != null) {
|
|
|
|
+ wmScorePackage.setDrugtable(relateSp.getDrugtable());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ SysDept sysDeptRelatedService = sysDeptService.getById(Integer.valueOf(wmScorePackage.getRelatedService()));
|
|
|
|
+ if (CharSequenceUtil.isBlank(wmScorePackage.getTypeid())) {
|
|
|
|
+ WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntService.selectByDeptId(deptId);
|
|
|
|
+ if (wmDaDrugEnt != null) {
|
|
|
|
+ if (null != wmScorePackage.getAcceptSug() && !wmScorePackage.getAcceptSug().equals(wmDaDrugEnt.getId().toString())) {
|
|
|
|
+ WmDaAgent wmDaAgent = wmDaAgentService.getById(wmScorePackage.getAcceptSug());
|
|
|
|
+ SysDept sysDepts = sysDeptService.getById(wmDaAgent.getDeptId());
|
|
|
|
+ if (sysDepts.getLevel() == 3) {
|
|
|
|
+ wmScorePackage.setLevel1Id(wmDaAgent.getId());
|
|
|
|
+ } else if (sysDepts.getLevel() == 4) {
|
|
|
|
+ wmScorePackage.setLevel2Id(wmDaAgent.getId());
|
|
|
|
+ }
|
|
|
|
+ wmScorePackage.setDeptId(wmDaAgent.getDeptId().toString());
|
|
|
|
+ wmScorePackage.setKfpjf(wmScorePackage.getScore());
|
|
|
|
+ } else if (wmDaDrugEnt.getId().toString().equals(wmScorePackage.getAcceptSug())) {
|
|
|
|
+ wmScorePackage.setDeptId(deptId.toString());
|
|
|
|
+ wmScorePackage.setKfpjf(wmScorePackage.getScore());
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (sysDeptRelatedService.getLevel() == 2) {
|
|
|
|
+ WmDaDrugEnt wmDaDrugEnts = wmDaDrugEntService.selectByDeptId(Integer.valueOf(wmScorePackage.getRelatedService()));
|
|
|
|
+ if (null != wmScorePackage.getAcceptSug() && !wmScorePackage.getAcceptSug().equals(wmDaDrugEnts.getId().toString())) {
|
|
|
|
+ WmDaAgent wmDaAgent = wmDaAgentService.getById(wmScorePackage.getAcceptSug());
|
|
|
|
+ SysDept sysDepts = sysDeptService.getById(wmDaAgent.getDeptId());
|
|
|
|
+
|
|
|
|
+ if (sysDepts.getLevel() == 3) {
|
|
|
|
+ wmScorePackage.setLevel1Id(wmDaAgent.getId());
|
|
|
|
+ } else if (sysDepts.getLevel() == 4) {
|
|
|
|
+ wmScorePackage.setLevel2Id(wmDaAgent.getId());
|
|
|
|
+ }
|
|
|
|
+ wmScorePackage.setDeptId(wmDaAgent.getDeptId().toString());
|
|
|
|
+ wmScorePackage.setKfpjf(wmScorePackage.getScore());
|
|
|
|
+ } else if (wmScorePackage.getAcceptSug().equals(wmDaDrugEnt.getId().toString())) {
|
|
|
|
+ wmScorePackage.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
|
|
|
|
+ wmScorePackage.setKfpjf(wmScorePackage.getScore());
|
|
|
|
+ }
|
|
|
|
+ } else if (sysDeptRelatedService.getLevel() == 3) {
|
|
|
|
+ WmDaAgent wmDaAgent1 = wmDaAgentService.selectByDeptId(Integer.valueOf(wmScorePackage.getRelatedService()));
|
|
|
|
+ if (null != wmScorePackage.getAcceptSug() && !wmScorePackage.getAcceptSug().equals(wmDaAgent1.getId().toString())) {
|
|
|
|
+ WmDaAgent wmDaAgent = wmDaAgentService.getById(wmScorePackage.getAcceptSug());
|
|
|
|
+ SysDept sysDepts = sysDeptService.getById(wmDaAgent.getDeptId());
|
|
|
|
+ if (sysDepts.getLevel() == 3) {
|
|
|
|
+ wmScorePackage.setLevel1Id(wmDaAgent.getId());
|
|
|
|
+ } else if (sysDepts.getLevel() == 4) {
|
|
|
|
+ wmScorePackage.setLevel2Id(wmDaAgent.getId());
|
|
|
|
+ }
|
|
|
|
+ wmScorePackage.setDeptId(wmDaAgent.getDeptId().toString());
|
|
|
|
+ wmScorePackage.setKfpjf(wmScorePackage.getScore());
|
|
|
|
+ } else if (wmDaAgent1.getId().toString().equals(wmScorePackage.getAcceptSug())) {
|
|
|
|
+ wmScorePackage.setDeptId(deptId.toString());
|
|
|
|
+ wmScorePackage.setKfpjf(wmScorePackage.getScore());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 药企规则ID
|
|
|
|
+ SysDept sysDeptRuleId = sysDeptService.getById(deptId);
|
|
|
|
+ Integer deptLevel = sysDeptRuleId.getLevel();
|
|
|
|
+
|
|
|
|
+ if (deptLevel == 2) {
|
|
|
|
+ WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntService.selectByDeptId(sysDeptRuleId.getDeptId());
|
|
|
|
+ if (wmScorePackage.getAcceptSug().equals(wmDaDrugEnt.getId().toString())) {
|
|
|
|
+ wmScorePackage.setRuleId(wmScorePackage.getAcceptSug());
|
|
|
|
+ wmScorePackage.setDrugEntId(wmDaDrugEnt.getId());
|
|
|
|
+ } else {
|
|
|
|
+ WmTaskType wmTaskType = new WmTaskType();
|
|
|
|
+ wmTaskType.setRuleId(wmDaDrugEnt.getId() + wmScorePackage.getAcceptSug());
|
|
|
|
+ List<WmTaskType> wmTaskTypeList = wmTaskTypeMapper.selectByRuleId(wmTaskType);
|
|
|
|
+ if (CollUtil.isNotEmpty(wmTaskTypeList)) {
|
|
|
|
+ wmScorePackage.setRuleId(wmDaDrugEnt.getId() + wmScorePackage.getAcceptSug());
|
|
|
|
+ wmScorePackage.setDrugEntId(wmDaDrugEnt.getId());
|
|
|
|
+ } else {
|
|
|
|
+ log.error("请药企给下级cso分配积分规则");
|
|
|
|
+ throw new RuntimeException("请药企给下级cso分配积分规则");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ } else if (deptLevel == 3) {
|
|
|
|
+ // 一级cso规则ID
|
|
|
|
+ WmDaAgent daAgent = wmDaAgentService.getOne(Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
|
+ .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
|
+ .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
|
+ .eq(WmDaAgent::getDeptId, String.valueOf(sysDeptRuleId.getDeptId())));
|
|
|
|
+ if (org.apache.commons.lang.StringUtils.isNotBlank(wmScorePackage.getRelationScoreId())) {
|
|
|
|
+ // 关联了积分包的情况
|
|
|
|
+ WmScorePackage relationScorePackage = this.getById(wmScorePackage.getRelationScoreId());
|
|
|
|
+ if (relationScorePackage != null) {
|
|
|
|
+ wmScorePackage.setRuleId(relationScorePackage.getRuleId());
|
|
|
|
+ wmScorePackage.setDrugEntId(relationScorePackage.getDrugEntId());
|
|
|
|
+ } else {
|
|
|
|
+ log.error("cso没有分配积分规则");
|
|
|
|
+ throw new RuntimeException("cso没有分配积分规则");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // 没有关联积分包的情况
|
|
|
|
+ List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
|
+ .eq(WmTaskType::getRuleId, daAgent.getId()));
|
|
|
|
+ if (CollectionUtil.isNotEmpty(taskTypeList)) {
|
|
|
|
+ wmScorePackage.setRuleId(daAgent.getId().toString());
|
|
|
|
+ wmScorePackage.setDrugEntId(null);
|
|
|
|
+ } else {
|
|
|
|
+ log.error("cso没有分配积分规则");
|
|
|
|
+ throw new RuntimeException("cso没有分配积分规则");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 保存积分包
|
|
|
|
+ String typeId = "";
|
|
|
|
+ if (roles.contains(4) || roles.contains(37) || roles.contains(3)) {
|
|
|
|
+ if (deptLevel == 2) {
|
|
|
|
+ typeId = wmScorePackage.getDeptId().equals(deptId.toString()) ? "0" : "1";
|
|
|
|
+ } else if (deptLevel == 3) {
|
|
|
|
+ typeId = wmScorePackage.getDeptId().equals(deptId.toString()) ? "1" : "2";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ wmScorePackage.setTypeid(typeId);
|
|
|
|
+ boolean isAnswer = this.save(wmScorePackage);
|
|
|
|
+
|
|
|
|
+ // 发包成功 更新 上级包
|
|
|
|
+ if (isAnswer) {
|
|
|
|
+ if ((roles.contains(4) || roles.contains(37) || roles.contains(3)) && deptLevel == 3) {
|
|
|
|
+ WmScorePackage relPkg = this.getById(relPkgId);
|
|
|
|
+ // 是当前操作人所在企业的的关联包
|
|
|
|
+ if (relPkg != null && deptId.toString().equals(relPkg.getDeptId())) {
|
|
|
|
+ relPkg.setKfpjf((int) Math.ceil(relPkg.getKfpjf() - wmScorePackage.getScore()));
|
|
|
|
+ // 判断积分包是否被发放 (原有外包业务逻辑,不知道为什么)
|
|
|
|
+ int count = this.count(Wrappers.<WmScorePackage>lambdaQuery()
|
|
|
|
+ .ne(WmScorePackage::getId, wmScorePackage.getId())
|
|
|
|
+ .eq(WmScorePackage::getId, relPkgId)
|
|
|
|
+ .eq(WmScorePackage::getEnableFlag, "0")
|
|
|
|
+ .notIn(WmScorePackage::getTypeid, 3, 4));
|
|
|
|
+
|
|
|
|
+ relPkg.setPackageIsConduct(count == 0 ? "0" : "1");
|
|
|
|
+ this.updateById(relPkg);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 失败了
|
|
|
|
+ else {
|
|
|
|
+ throw new RuntimeException("下发积分包失败");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<WmScoreTaskType> taskTypeList = wmScorePackage.getWmScoreTaskTypeList();
|
|
|
|
+ if (CollUtil.isNotEmpty(taskTypeList)) {
|
|
|
|
+
|
|
|
|
+ if (CharSequenceUtil.isBlank(relPkgId) || (CharSequenceUtil.isNotBlank(relPkgId) && deptLevel == 3)) {
|
|
|
|
+ List<WmScoreTaskType> scoreTaskTypes = taskTypeList.stream().map(taskType -> {
|
|
|
|
+ WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
|
|
|
|
+ wmScoreTaskType.setScoreId(wmScorePackage.getId());
|
|
|
|
+ wmScoreTaskType.setType("1");
|
|
|
|
+ wmScoreTaskType.setTaskTypeId(taskType.getTaskTypeId());
|
|
|
|
+
|
|
|
|
+ return wmScoreTaskType;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ wmScoreTaskTypeService.deleteByScoreId(wmScorePackage.getId());
|
|
|
|
+ // todo
|
|
|
|
+ wmScoreTaskTypeService.saveBatch(scoreTaskTypes);
|
|
|
|
+ // wmScoreTaskTypeService.batchInsertType(scoreTaskTypes);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (!relatedScoreId) {
|
|
|
|
+ // 更新积分充值信息
|
|
|
|
+ long currentScore = deptRecharge.getScore() - (long) wmScorePackage.getScore();
|
|
|
|
+ int updateRecharge = sysDeptRechargeMapper.update(null, Wrappers.<SysDeptRecharge>lambdaUpdate()
|
|
|
|
+ .eq(SysDeptRecharge::getId, deptRecharge.getId())
|
|
|
|
+ .eq(SysDeptRecharge::getVersion, deptRecharge.getVersion())
|
|
|
|
+ .set(SysDeptRecharge::getScore, currentScore)
|
|
|
|
+ .set(SysDeptRecharge::getVersion, deptRecharge.getVersion() + 1)
|
|
|
|
+ .set(SysDeptRecharge::getUpdateTime, now)
|
|
|
|
+ .set(SysDeptRecharge::getUpdateUser, userId));
|
|
|
|
+ if (updateRecharge <= 0) {
|
|
|
|
+ log.warn("更新积分充值信息失败");
|
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
|
+ }
|
|
|
|
+ // 更新积分充值记录
|
|
|
|
+ SysDeptRechargeRecord rechargeRecord = new SysDeptRechargeRecord();
|
|
|
|
+ rechargeRecord.setDeptId(deptId);
|
|
|
|
+ rechargeRecord.setChangeScore((long) -wmScorePackage.getScore());
|
|
|
|
+ rechargeRecord.setRechargeId(deptRecharge.getId());
|
|
|
|
+ rechargeRecord.setPackageId(wmScorePackage.getId());
|
|
|
|
+ rechargeRecord.setPackageType(RechargeRecordPackageType.TO_ENTERPRISE);
|
|
|
|
+ rechargeRecord.setType(RechargeRecordType.SEND_PACKAGE_DEPT);
|
|
|
|
+ rechargeRecord.setCurrentScore(currentScore);
|
|
|
|
+ rechargeRecord.setCreateUser(userId);
|
|
|
|
+ rechargeRecord.setCreateTime(now);
|
|
|
|
+ sysDeptRechargeRecordMapper.insert(rechargeRecord);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 保存关联的试卷
|
|
|
|
+ if (CollUtil.isNotEmpty(wmScorePackage.getQuizIds())) {
|
|
|
|
+ pkgQuizRelationService.createPkgQuizzes(wmScorePackage.getQuizIds(), Integer.parseInt(wmScorePackage.getId()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 判断是否有关联关系
|
|
|
|
+ if (CollUtil.isNotEmpty(wmScorePackage.getQuizRelationIds())) {
|
|
|
|
+ pkgQuizRelationService.copyQuizRelations(wmScorePackage.getQuizRelationIds(), Integer.parseInt(wmScorePackage.getId()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 关联计划
|
|
|
|
+ SysPlanPkg rel = new SysPlanPkg();
|
|
|
|
+ rel.setPlanId(planId);
|
|
|
|
+ rel.setPkgId(Integer.valueOf(wmScorePackage.getId()));
|
|
|
|
+ rel.setCreateTime(LocalDateTime.now());
|
|
|
|
+
|
|
|
|
+ planPkgService.save(rel);
|
|
|
|
+
|
|
|
|
+ // 保存积分包任务类型数量限制 && 异步生成合同
|
|
|
|
+ List<Map<String, Object>> typeQtyList = wmScorePackage.getPkgTaskTypeQtyList();
|
|
|
|
+ List<WmPackageTaskTypeQty> collect = null;
|
|
|
|
+ if (CollUtil.isNotEmpty(typeQtyList)) {
|
|
|
|
+
|
|
|
|
+ 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);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ PackageContractEvent event = new PackageContractEvent();
|
|
|
|
+ event.setPackageId(Integer.valueOf(wmScorePackage.getId()));
|
|
|
|
+ event.setTaskTypeQtiyList(collect);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return event;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 结算数据字段拼接转换
|
|
* 结算数据字段拼接转换
|
|
*
|
|
*
|