Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/dev' into ecp

纪新园 1 settimana fa
parent
commit
99e31ddffc

+ 76 - 0
blade-service/blade-factory/src/main/java/org/springblade/factory/Summary/SummaryPredictionsController.java

@@ -0,0 +1,76 @@
+package org.springblade.factory.Summary;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.api.R;
+import org.springblade.factory.entity.PcBladeSalesForecastSummary;
+import org.springblade.factory.entity.PjpfStockDesc;
+import org.springblade.factory.service.PcBladeSalesForecastSummaryService;
+import org.springblade.factory.service.PjpfStockDescService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 销售预测汇总 控制器
+ *
+ * @author horizon
+ * @since 2025-08-05
+ */
+@RestController
+@RequestMapping("/api/factory/SummaryPredictions")
+@AllArgsConstructor
+@Slf4j
+public class SummaryPredictionsController {
+
+	// 销售预测明细 service
+	private final PcBladeSalesForecastSummaryService pcBladeSalesForecastSummaryService;
+
+	// 库存 service
+	private final PjpfStockDescService pjpfStockDescService;
+
+	/**
+	 * 按年月日查询库存总数
+	 *
+	 * @param year  年份(如:2025)
+	 * @param month 月份(1-12,可选)
+	 * @return 库存总数统计结果
+	 */
+//	@GetMapping("/getTotal")
+//	public R<Map<String, Object>> getTotal(
+//		@RequestParam(required = false) Integer year,
+//		@RequestParam(required = false) Integer month) {
+
+//		// 构建查询条件(按create_time的年月日筛选)
+//		QueryWrapper<PjpfStockDesc> queryWrapper = new QueryWrapper<>();
+//		queryWrapper.eq("is_deleted", 0);
+//		List<PjpfStockDesc> pjpfStockDescList = pjpfStockDescService.list(queryWrapper);
+//
+//		QueryWrapper<PcBladeSalesForecastSummary> PcBladeSalesForecastSummaryWrapper = new QueryWrapper<>();
+//
+//		PcBladeSalesForecastSummaryWrapper.eq("is_deleted", 0);
+//		PcBladeSalesForecastSummaryWrapper.eq("status", 1);
+//
+//		if (year != null) {
+//			PcBladeSalesForecastSummaryWrapper.eq("year", year);
+//		}
+//
+//		if (year != null && month != null) {
+//			PcBladeSalesForecastSummaryWrapper.eq("month", month);
+//		}
+//
+//
+//		List<PcBladeSalesForecastSummary> pcBladeSalesForecastSummaryList = pcBladeSalesForecastSummaryService.list(PcBladeSalesForecastSummaryWrapper);
+//
+//
+//	}
+}
+

+ 35 - 15
blade-service/blade-factory/src/main/java/org/springblade/factory/api/controller/SalesForecastSummaryController.java

@@ -20,6 +20,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.factory.entity.*;
 import org.springblade.factory.service.*;
 import org.springblade.u9cloud.entity.ZcrmViewCustomerSel;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import springfox.documentation.annotations.ApiIgnore;
@@ -31,10 +32,8 @@ import java.nio.charset.StandardCharsets;
 import java.security.Principal;
 import java.time.LocalDate;
 import java.time.format.DateTimeParseException;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 销售预测接口 控制器
@@ -130,32 +129,47 @@ public class SalesForecastSummaryController {
 	@ApiOperation(value = "销售预测汇总添加", notes = "添加销售预测主表及明细数据")
 	public R<String> mainAdd(@RequestBody PcBladeSalesForecastMain pcBladeSalesForecastMain) {
 		try {
-			// 验证参数
+			// 1. 基础参数验证
 			if (pcBladeSalesForecastMain == null) {
 				return R.fail("提交数据不能为空");
 			}
-
-			// 验证必要字段
 			if (pcBladeSalesForecastMain.getYear() == null || pcBladeSalesForecastMain.getMonth() == null) {
 				return R.fail("年份和月份为必填项");
 			}
 
-			// 调用Service层批量添加方法
-			boolean success = salesForecastMainService.batchAdd(pcBladeSalesForecastMain);
+			List<PcBladeSalesForecastSummary> summaryList = pcBladeSalesForecastMain.getPcBladeSalesForecastSummaryList();
+			if (summaryList == null || summaryList.isEmpty()) {
+				return R.fail("明细数据不能为空");
+			}
 
-			if (success) {
-				log.info("销售预测数据添加成功,主表ID: {}", pcBladeSalesForecastMain.getId());
-				return R.success("添加成功");
-			} else {
-				log.error("销售预测数据添加失败");
-				return R.fail("添加失败,请稍后重试");
+			// 2. 获取当前用户ID(客户ID)
+			Long currentUserId = AuthUtil.getUserId();
+
+			// 3. 检查主表是否已存在相同记录(核心修改:仅判断主表重复)
+			// 这里假设主表的唯一判断条件是:年份+月份+客户ID
+			boolean mainExists = salesForecastMainService.checkMainDuplicate(
+				pcBladeSalesForecastMain.getYear(),
+				pcBladeSalesForecastMain.getMonth(),
+				currentUserId
+			);
+			if (mainExists) {
+				return R.fail("提交失败:该年月的销售预测主记录已存在");
 			}
+
+			// 4. 调用Service层批量添加方法
+			return salesForecastMainService.batchAdd(pcBladeSalesForecastMain);
+		} catch (DuplicateKeyException e) {
+			// 最终防线:捕获数据库唯一键冲突
+			log.error("销售预测数据重复提交", e);
+			return R.fail("提交失败:已存在相同的销售预测记录,请避免重复提交");
 		} catch (Exception e) {
 			log.error("销售预测添加接口发生异常", e);
 			return R.fail("系统异常,请联系管理员");
 		}
 	}
 
+
+
 	/**
 	 * 销售预测汇总列表 --修改接口
 	 */
@@ -364,6 +378,12 @@ public class SalesForecastSummaryController {
 		ViewCustomerSel zcrmViewCustomerSel = customerSelService.selectZcrmViewCustomerSelByCustomerId(forecast.getCustomerId());
 		forecast.setCustomerCode(zcrmViewCustomerSel.getCustomerCode());
 		forecast.setCustomerName(zcrmViewCustomerSel.getCustomerName());
+
+
+
+
+
+
 		return forecastService.saveOrUpdateForecast(forecast);
 	}
 

+ 4 - 4
blade-service/blade-factory/src/main/java/org/springblade/factory/controller/PcBladeClaimAuditController.java

@@ -63,15 +63,15 @@ public class PcBladeClaimAuditController {
 	 * 新增
 	 */
 	@PostMapping
-	public R<Boolean> save(@RequestBody PcBladeClaimAudit pcBladeClaimAudit) {
-		return R.data(200, claimAuditService.insertPcBladeClaimAudit(pcBladeClaimAudit),"添加成功");
+	public R<String> save(@RequestBody PcBladeClaimAudit pcBladeClaimAudit) {
+		return claimAuditService.insertPcBladeClaimAudit(pcBladeClaimAudit);
 	}
 
 	/**
 	 * 修改
 	 */
 	@PutMapping
-	public R<Boolean> update(@RequestBody PcBladeClaimAudit pcBladeClaimAudit) {
-		return R.data(200,claimAuditService.updatePcBladeClaimAudit(pcBladeClaimAudit),"修改成功");
+	public R<String> update(@RequestBody PcBladeClaimAudit pcBladeClaimAudit) {
+		return claimAuditService.updatePcBladeClaimAudit(pcBladeClaimAudit);
 	}
 }

+ 12 - 0
blade-service/blade-factory/src/main/java/org/springblade/factory/controller/PcBladeSalesForecastMainController.java

@@ -9,10 +9,13 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.factory.entity.PcBladeSalesForecastMain;
+import org.springblade.factory.entity.PcBladeSalesForecastSummary;
 import org.springblade.factory.service.PcBladeSalesForecastMainService;
+import org.springblade.factory.service.PcBladeSalesForecastSummaryService;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -29,6 +32,9 @@ public class PcBladeSalesForecastMainController {
 
 	private final PcBladeSalesForecastMainService salesForecastMainService;
 
+	private final PcBladeSalesForecastSummaryService salesForecastSummaryService;
+
+
 	/**
 	 * 销售预测主表列表
 	 */
@@ -43,6 +49,12 @@ public class PcBladeSalesForecastMainController {
 			.orderByDesc("create_time"); // 按创建时间降序排列(最新的订单排在前面)
 		// 2. 执行分页查询
 		IPage<PcBladeSalesForecastMain> pages = salesForecastMainService.page(Condition.getPage(query), queryWrapper);
+		for(PcBladeSalesForecastMain pcBladeSalesForecastMain1 : pages.getRecords()) {
+			PcBladeSalesForecastSummary pcBladeSalesForecastSummary = new PcBladeSalesForecastSummary();
+			pcBladeSalesForecastSummary.setForecastMainId(pcBladeSalesForecastMain1.getId());
+			List<PcBladeSalesForecastSummary> pcBladeSalesForecastSummaryList = salesForecastSummaryService.selectPcBladeSalesForecastSummaryList(pcBladeSalesForecastSummary);
+			pcBladeSalesForecastMain1.setPcBladeSalesForecastSummaryList(pcBladeSalesForecastSummaryList);
+		}
 		// 3. 返回结果
 		return R.data(pages);
 	}

+ 3 - 2
blade-service/blade-factory/src/main/java/org/springblade/factory/service/PcBladeClaimAuditService.java

@@ -1,6 +1,7 @@
 package org.springblade.factory.service;
 
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
 import org.springblade.factory.entity.PcBladeClaimAudit;
 
 import java.util.List;
@@ -25,12 +26,12 @@ public interface PcBladeClaimAuditService extends BaseService<PcBladeClaimAudit>
 	 * @param pcBladeClaimAudit
 	 * @return
 	 */
-	boolean insertPcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit);
+	R<String> insertPcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit);
 
 	/**
 	 * 修改一条数据
 	 * @param pcBladeClaimAudit
 	 * @return
 	 */
-	boolean updatePcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit);
+	R<String> updatePcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit);
 }

+ 12 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/service/PcBladeSalesForecastMainService.java

@@ -61,7 +61,7 @@ public interface PcBladeSalesForecastMainService extends BaseService<PcBladeSale
 	 * @param pcBladeSalesForecastMain
 	 * @return
 	 */
-	boolean batchAdd(PcBladeSalesForecastMain pcBladeSalesForecastMain);
+	R<String> batchAdd(PcBladeSalesForecastMain pcBladeSalesForecastMain);
 
 	/**
 	 * 批量修改销售预测数据
@@ -92,4 +92,15 @@ public interface PcBladeSalesForecastMainService extends BaseService<PcBladeSale
 	List<PcBladeSalesForecastMain> findByUserAndYearAndMonth(Long currentUserId, Integer year, Integer month);
 
 
+
+	/**
+	 * 检查主表是否存在重复记录
+	 * @param year 年份
+	 * @param month 月份
+	 * @param customerId 客户ID
+	 * @return 是否存在重复
+	 */
+	boolean checkMainDuplicate(Integer year, Integer month, Long customerId);
+
+
 }

+ 55 - 4
blade-service/blade-factory/src/main/java/org/springblade/factory/service/impl/PcBladeClaimAuditServiceImpl.java

@@ -2,16 +2,27 @@ package org.springblade.factory.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.api.R;
+import org.springblade.factory.entity.PcBladeClaim;
 import org.springblade.factory.entity.PcBladeClaimAudit;
 import org.springblade.factory.mapper.PcBladeClaimAuditMapper;
+import org.springblade.factory.mapper.PcBladeClaimMapper;
 import org.springblade.factory.service.PcBladeClaimAuditService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Objects;
 
 @Service
 public class PcBladeClaimAuditServiceImpl extends BaseServiceImpl<PcBladeClaimAuditMapper, PcBladeClaimAudit> implements PcBladeClaimAuditService {
 
+	@Autowired
+	private PcBladeClaimMapper pcBladeClaimMapper;
+
+
+
 	@Override
 	public List<PcBladeClaimAudit> selectPcBladeClaimAuditList(PcBladeClaimAudit pcBladeClaimAudit) {
 		QueryWrapper<PcBladeClaimAudit> queryWrapper = new QueryWrapper<>();
@@ -24,12 +35,52 @@ public class PcBladeClaimAuditServiceImpl extends BaseServiceImpl<PcBladeClaimAu
 	}
 
 	@Override
-	public boolean insertPcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit) {
-		return this.save(pcBladeClaimAudit);
+	@Transactional(rollbackFor = Exception.class)
+	public R<String> insertPcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit) {
+		// 修改理赔表的状态
+		PcBladeClaim pcBladeClaim = new PcBladeClaim();
+		pcBladeClaim.setId(pcBladeClaimAudit.getClaimId());
+		PcBladeClaim pcBladeClaim1 = pcBladeClaimMapper.selectById(pcBladeClaimAudit.getClaimId());
+		if (pcBladeClaim1 == null) {
+			return R.fail("主理赔表不存在");
+		}
+
+		if (!Objects.equals(pcBladeClaim1.getAuditStatus(), pcBladeClaimAudit.getAuditResult())) {
+			pcBladeClaim.setAuditStatus(pcBladeClaimAudit.getAuditResult());
+			int res = pcBladeClaimMapper.updateById(pcBladeClaim);
+			if (res == 0) {
+				return R.fail("主理赔表不存在");
+			}
+		}
+		boolean result = this.save(pcBladeClaimAudit);
+		if (result) {
+			return R.data("成功提交审核");
+		} else {
+			return R.fail("提交审核失败");
+		}
 	}
 
 	@Override
-	public boolean updatePcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit) {
-		return this.updateById(pcBladeClaimAudit);
+	public R<String> updatePcBladeClaimAudit(PcBladeClaimAudit pcBladeClaimAudit) {
+		// 修改理赔表的状态
+		PcBladeClaim pcBladeClaim = new PcBladeClaim();
+		pcBladeClaim.setId(pcBladeClaimAudit.getClaimId());
+		PcBladeClaim pcBladeClaim1 = pcBladeClaimMapper.selectById(pcBladeClaimAudit.getClaimId());
+		if (pcBladeClaim1 == null) {
+			return R.fail("主理赔表不存在");
+		}
+		if (!Objects.equals(pcBladeClaim1.getAuditStatus(), pcBladeClaimAudit.getAuditResult())) {
+			pcBladeClaim.setAuditStatus(pcBladeClaimAudit.getAuditResult());
+			int res = pcBladeClaimMapper.updateById(pcBladeClaim);
+			if (res == 0) {
+				return R.fail("主理赔表不存在");
+			}
+		}
+		boolean result = this.updateById(pcBladeClaimAudit);
+		if (result) {
+			return R.data("成功修改审核");
+		} else {
+			return R.fail("修改审核失败");
+		}
 	}
 }

+ 23 - 12
blade-service/blade-factory/src/main/java/org/springblade/factory/service/impl/PcBladeSalesForecastMainServiceImpl.java

@@ -33,6 +33,7 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 	private PcBladeSalesForecastSummaryService pcBladeSalesForecastSummaryService;
 	private ZcrmViewCustomerSelService customerSelService;
 	private PcBladeSalesForecastSummaryMapper summaryMapper;
+	private PcBladeSalesForecastMainMapper pcBladeSalesForecastMainMapper;
 
 	@Autowired
 	@Lazy
@@ -147,11 +148,11 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public boolean batchAdd(PcBladeSalesForecastMain pcBladeSalesForecastMain) {
+	public R<String> batchAdd(PcBladeSalesForecastMain pcBladeSalesForecastMain) {
 		try {
 			if (pcBladeSalesForecastMain == null) {
 				log.error("批量添加失败:主表数据不能为空");
-				return false;
+				return R.fail("批量添加失败:主表数据不能为空");
 			}
 
 			Long currentUserId = AuthUtil.getUserId();
@@ -165,10 +166,10 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 			pcBladeSalesForecastMain.setCustomerCode(zcrmViewCustomerSel.getCustomerCode());
 			pcBladeSalesForecastMain.setCustomerName(zcrmViewCustomerSel.getCustomerName());
 
-			boolean mainSaved = save(pcBladeSalesForecastMain);
-			if (!mainSaved) {
+			int mainSaved = baseMapper.insert(pcBladeSalesForecastMain);
+			if (mainSaved == 0) {
 				log.error("批量添加失败:主表数据保存失败");
-				return false;
+				return R.fail("批量添加失败:主表数据保存失败");
 			}
 
 			List<PcBladeSalesForecastSummary> summaryList = pcBladeSalesForecastMain.getPcBladeSalesForecastSummaryList();
@@ -176,7 +177,7 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 				Long mainId = pcBladeSalesForecastMain.getId();
 				if (mainId == null) {
 					log.error("批量添加失败:主表ID生成失败");
-					return false;
+					return R.fail("批量添加失败:主表ID生成失败");
 				}
 
 				for (PcBladeSalesForecastSummary summary : summaryList) {
@@ -186,7 +187,6 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 					summary.setCustomerId(pcBladeSalesForecastMain.getCustomerId());
 					summary.setCustomerCode(pcBladeSalesForecastMain.getCustomerCode());
 					summary.setCustomerName(pcBladeSalesForecastMain.getCustomerName());
-
 					if (summary.getApprovalStatus() == null) {
 						summary.setApprovalStatus(0);
 					}
@@ -195,15 +195,13 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 				boolean summarySaved = pcBladeSalesForecastSummaryService.saveBatch(summaryList);
 				if (!summarySaved) {
 					log.error("批量添加失败:明细表数据保存失败");
-					return false;
+					return R.fail("批量添加失败:明细表数据保存失败");
 				}
 			}
-
-			return true;
-
+			return R.data("添加成功");
 		} catch (Exception e) {
 			log.error("批量添加销售预测数据失败", e);
-			return false;
+			return R.fail("批量添加销售预测数据失败" + e.getMessage());
 		}
 	}
 
@@ -372,4 +370,17 @@ public class PcBladeSalesForecastMainServiceImpl extends BaseServiceImpl<PcBlade
 
 		return mainList;
 	}
+
+	@Override
+	public boolean checkMainDuplicate(Integer year, Integer month, Long customerId) {
+		QueryWrapper<PcBladeSalesForecastMain> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("year", year)
+			.eq("month", month)
+			.eq("customer_id", customerId);
+
+		// 存在相同条件的主表记录则返回true
+		return baseMapper.selectCount(queryWrapper) > 0;
+	}
+
+
 }