浏览代码

fix: 修改大包/小包可分配积分值的校验

lixuesong 1 年之前
父节点
当前提交
40b224ac3b

+ 23 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -2572,7 +2572,14 @@ public class WmScorePackageController {
 				.eq(SysDeptRechargeRecord::getPackageId, wmScorePackage.getId())
 				.in(SysDeptRechargeRecord::getType, RechargeRecordType.SEND_PACKAGE_DEPT, RechargeRecordType.SEND_PACKAGE_PERSONAL));
 		LocalDateTime now = LocalDateTime.now();
-		if (rechargeRecord != null) {
+
+		boolean relatedScoreId = StrUtil.isNotBlank(wmScorePackage.getRelationScoreId()) && Integer.parseInt(wmScorePackage.getRelationScoreId()) > 0;
+
+		// 积分值相比修改前的变动(相对于积分余额,增加则为负-消耗,减少则为正-回收)
+		int changeScore = oldPackageScore - wmScorePackage.getScore();
+
+		if (!relatedScoreId) {
+			// 没有关联上级包的情况
 			log.info("修改积分包,更新积分配置信息");
 			// 校验 发包积分 < 积分充值分配的积分 则可以发包
 			SysDeptRecharge deptRecharge = sysDeptRechargeMapper.selectOne(Wrappers.<SysDeptRecharge>lambdaQuery()
@@ -2582,8 +2589,6 @@ public class WmScorePackageController {
 				throw new RuntimeException("积分余额:0。积分不足");
 			}
 
-			// 积分值相比修改前的变动(相对于积分余额,增加则为负-消耗,减少则为正-回收)
-			int changeScore = oldPackageScore - wmScorePackage.getScore();
 			int currentScore = deptRecharge.getScore() + changeScore;
 
 			int limitScore = deptRecharge.getScore() + deptRecharge.getOverdrawScore();
@@ -2613,11 +2618,25 @@ public class WmScorePackageController {
 			newRechargeRecord.setCurrentScore(currentScore);
 			newRechargeRecord.setType(RechargeRecordType.RECOVERY);
 			newRechargeRecord.setDeptId(deptRecharge.getDeptId());
-			newRechargeRecord.setRelationDeptId(rechargeRecord.getRelationDeptId());
+			newRechargeRecord.setRelationDeptId(rechargeRecord != null ? rechargeRecord.getRelationDeptId() : null);
 			newRechargeRecord.setPackageType(RechargeRecordPackageType.TO_ENTERPRISE);
 			newRechargeRecord.setPackageId(wmScorePackage.getId());
 			newRechargeRecord.setCreateUser(userId);
 			sysDeptRechargeRecordMapper.insert(newRechargeRecord);
+		} else {
+			// 关联了上级包的情况
+			if (changeScore < 0) {
+				// 变动积分后比原先多,则校验上级可分配积分值
+				List<WmScorePackage> scorePackagekfpjf = wmScorePackageService.getScorePackagekfpjf(null, null, new String[]{"0", "1", "2"},
+						new String[]{wmScorePackage.getRelationScoreId()});
+
+				if (CollUtil.isNotEmpty(scorePackagekfpjf)) {
+					int kfpjf = scorePackagekfpjf.get(0).getKfpjf();
+					if (Math.abs(changeScore) > kfpjf) {
+						throw new RuntimeException("可分配积分值不足");
+					}
+				}
+			}
 		}
 
 		return R.ok(Boolean.TRUE);

+ 26 - 6
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java

@@ -1682,17 +1682,24 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		SysDeptRechargeRecord rechargeRecord = sysDeptRechargeRecordMapper.selectOne(Wrappers.<SysDeptRechargeRecord>lambdaQuery()
 				.eq(SysDeptRechargeRecord::getPackageId, wmScorePackage.getId())
 				.in(SysDeptRechargeRecord::getType, RechargeRecordType.SEND_PACKAGE_DEPT, RechargeRecordType.SEND_PACKAGE_PERSONAL));
-		if (rechargeRecord != null) {
+
+		boolean relatedScoreId = StrUtil.isNotBlank(wmScorePackage.getRelationScoreId()) && Integer.parseInt(wmScorePackage.getRelationScoreId()) > 0;
+
+		// 积分值相比修改前的变动(相对于积分余额,增加则为负-消耗,减少则为正-回收)
+		int changeScore = oldPackageScore - wmScorePackage.getScore();
+
+		if (!relatedScoreId) {
+			// 没有关联上级积分包的情况
 			log.info("修改积分包,更新积分配置信息");
 			Integer userId = SecurityUtils.getUser().getId();
-			SysDeptRecharge deptRecharge = sysDeptRechargeMapper.selectById(rechargeRecord.getRechargeId());
+			Integer deptId = SecurityUtils.getUser().getDeptId();
+			SysDeptRecharge deptRecharge = sysDeptRechargeMapper.selectOne(Wrappers.<SysDeptRecharge>lambdaQuery()
+					.eq(SysDeptRecharge::getDeptId, deptId));
 			if (deptRecharge == null) {
 				log.warn("未配置积分充值信息");
 				throw new RuntimeException("积分余额:0。积分不足");
 			}
 
-			// 积分值相比修改前的变动(相对于积分余额,增加则为负-消耗,减少则为正-回收)
-			int changeScore = oldPackageScore - wmScorePackage.getScore();
 			int currentScore = deptRecharge.getScore() + changeScore;
 
 			int limitScore = deptRecharge.getScore() + deptRecharge.getOverdrawScore();
@@ -1705,7 +1712,7 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 
 			// 更新企业配置的积分信息
 			int update = sysDeptRechargeMapper.update(null, Wrappers.<SysDeptRecharge>lambdaUpdate()
-					.eq(SysDeptRecharge::getId, rechargeRecord.getRechargeId())
+					.eq(SysDeptRecharge::getId, deptRecharge.getId())
 					.eq(SysDeptRecharge::getVersion, deptRecharge.getVersion())
 					.set(SysDeptRecharge::getScore, currentScore)
 					.set(SysDeptRecharge::getVersion, deptRecharge.getVersion() + 1)
@@ -1722,11 +1729,24 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 			newRechargeRecord.setCurrentScore(currentScore);
 			newRechargeRecord.setType(RechargeRecordType.RECOVERY);
 			newRechargeRecord.setDeptId(deptRecharge.getDeptId());
-			newRechargeRecord.setRelationDeptId(rechargeRecord.getRelationDeptId());
+			newRechargeRecord.setRelationDeptId(rechargeRecord != null ? rechargeRecord.getRelationDeptId() : null);
 			newRechargeRecord.setPackageType(RechargeRecordPackageType.TO_PERSON);
 			newRechargeRecord.setPackageId(wmScorePackage.getId());
 			newRechargeRecord.setCreateUser(userId);
 			sysDeptRechargeRecordMapper.insert(newRechargeRecord);
+		} else {
+			if (changeScore < 0) {
+				// 变动积分值为增加,则校验上级可分配积分值
+				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 (Math.abs(changeScore) > kfpjf) {
+						throw new RuntimeException("可分配积分值不足");
+					}
+				}
+			}
 		}
 
 		return R.ok();