Kaynağa Gözat

限购方法

yuhongqi 1 ay önce
ebeveyn
işleme
28f7d0061d

+ 1 - 5
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -3811,11 +3811,7 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                 liveOrderItem.setNum(Long.valueOf(liveOrder.getTotalNum()));
                 liveOrderItem.setJsonInfo(JSON.toJSONString(dto));
                 liveOrderItemMapper.insertLiveOrderItem(liveOrderItem);
-                
-                // 记录限购数量(订单创建成功后记录)
-                if (fsStoreProduct.getPurchaseLimit() != null && fsStoreProduct.getPurchaseLimit() > 0) {
-                    purchaseLimitService.increasePurchaseLimit(liveOrder.getProductId(), userId, purchaseNum);
-                }
+
                 
                 redisCache.deleteObject("orderKey:" + liveOrder.getOrderKey());
                 //添加支付到期时间

+ 194 - 0
fs-user-app/src/main/java/com/fs/app/controller/live/LiveController.java

@@ -15,10 +15,19 @@ import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.bean.BeanUtils;
 import com.fs.common.utils.http.HttpUtils;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyMoneyLogs;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyMapper;
+import com.fs.company.mapper.CompanyMoneyLogsMapper;
 import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.live.domain.LiveOrder;
+import java.math.BigDecimal;
+import java.util.Date;
 import com.fs.erp.domain.ErpDeliverys;
 import com.fs.erp.domain.ErpOrderQuery;
 import com.fs.erp.dto.ErpOrderQueryRequert;
@@ -90,6 +99,16 @@ public class LiveController extends AppBaseController {
     private com.fs.live.mapper.LiveUserFirstEntryMapper liveUserFirstEntryMapper;
     @Autowired
     private com.fs.live.mapper.LiveOrderMapper liveOrderMapper;
+    @Autowired
+    private ICompanyService companyService;
+    @Autowired
+    private ICompanyMoneyLogsService companyMoneyLogsService;
+    @Autowired
+    private CompanyMoneyLogsMapper companyMoneyLogsMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+    @Autowired
+    private IFsStoreOrderScrmService fsStoreOrderScrmService;
 
 	/**
 	 * 查询未结束直播间(销售专用)
@@ -392,5 +411,180 @@ public class LiveController extends AppBaseController {
 		}
 	}
 
+	/**
+	 * 重建公司余额
+	 * 清理所有公司余额,删除log_type为3,4的记录,根据其他日志重新计算,然后根据已完成订单添加余额,根据已退款订单减去余额
+	 */
+	@ApiOperation("重建公司余额")
+	@PostMapping("/rebuildCompanyBalance")
+	@Transactional
+	public R rebuildCompanyBalance() {
+		try {
+			log.info("开始重建公司余额");
+
+			// 1. 清理所有公司余额
+			List<Company> allCompanies = companyService.selectCompanyList(new Company());
+			for (Company company : allCompanies) {
+				company.setMoney(BigDecimal.ZERO);
+				companyMapper.updateCompany(company);
+			}
+			log.info("已清理所有公司余额,共{}家公司", allCompanies.size());
+
+			// 2. 删除所有company_money_log中log_type是3,4的记录
+			CompanyMoneyLogs queryLog = new CompanyMoneyLogs();
+			queryLog.setLogsType(3);
+			List<CompanyMoneyLogs> logs3 = companyMoneyLogsService.selectCompanyMoneyLogsList(queryLog);
+			queryLog.setLogsType(4);
+			List<CompanyMoneyLogs> logs4 = companyMoneyLogsService.selectCompanyMoneyLogsList(queryLog);
+			
+			int deleteCount3 = 0;
+			int deleteCount4 = 0;
+			if (logs3 != null && !logs3.isEmpty()) {
+				Long[] ids3 = logs3.stream().map(CompanyMoneyLogs::getLogsId).toArray(Long[]::new);
+				deleteCount3 = companyMoneyLogsService.deleteCompanyMoneyLogsByIds(ids3);
+			}
+			if (logs4 != null && !logs4.isEmpty()) {
+				Long[] ids4 = logs4.stream().map(CompanyMoneyLogs::getLogsId).toArray(Long[]::new);
+				deleteCount4 = companyMoneyLogsService.deleteCompanyMoneyLogsByIds(ids4);
+			}
+			log.info("已删除log_type为3的记录{}条,log_type为4的记录{}条", deleteCount3, deleteCount4);
+
+			// 3. 根据其他的logs日志,添加和删除公司余额(重新计算余额)
+			CompanyMoneyLogs allLogsQuery = new CompanyMoneyLogs();
+			List<CompanyMoneyLogs> allOtherLogs = companyMoneyLogsService.selectCompanyMoneyLogsList(allLogsQuery);
+			if (allOtherLogs != null && !allOtherLogs.isEmpty()) {
+				// 按公司ID分组处理
+				Map<Long, List<CompanyMoneyLogs>> logsByCompany = allOtherLogs.stream()
+					.filter(log -> log.getLogsType() != null && log.getLogsType() != 3 && log.getLogsType() != 4)
+					.collect(java.util.stream.Collectors.groupingBy(CompanyMoneyLogs::getCompanyId));
+				
+				for (Map.Entry<Long, List<CompanyMoneyLogs>> entry : logsByCompany.entrySet()) {
+					Long companyId = entry.getKey();
+					List<CompanyMoneyLogs> companyLogs = entry.getValue();
+					
+					// 按创建时间排序
+					companyLogs.sort((a, b) -> {
+						if (a.getCreateTime() == null && b.getCreateTime() == null) return 0;
+						if (a.getCreateTime() == null) return -1;
+						if (b.getCreateTime() == null) return 1;
+						return a.getCreateTime().compareTo(b.getCreateTime());
+					});
+					
+					Company company = companyMapper.selectCompanyByIdForUpdate(companyId);
+					if (company != null) {
+						BigDecimal currentBalance = BigDecimal.ZERO;
+						for (CompanyMoneyLogs log : companyLogs) {
+							currentBalance = currentBalance.add(log.getMoney());
+						}
+						company.setMoney(currentBalance);
+						companyMapper.updateCompany(company);
+					}
+				}
+				log.info("已根据其他日志重新计算公司余额,共处理{}家公司", logsByCompany.size());
+			}
+
+			// 4. 查询商城和直播订单,查询已完成的订单(status=3),把公司余额进行添加
+			// 查询商城已完成订单
+			FsStoreOrderScrm storeOrderQuery = new FsStoreOrderScrm();
+			storeOrderQuery.setStatus(3);
+			List<FsStoreOrderScrm> completedStoreOrders = fsStoreOrderScrmService.selectFsStoreOrderList(storeOrderQuery);
+			int storeOrderCount = 0;
+			if (completedStoreOrders != null && !completedStoreOrders.isEmpty()) {
+				for (FsStoreOrderScrm order : completedStoreOrders) {
+					if (order.getCompanyId() != null && order.getCompanyId() > 0 && 
+						order.getPayDelivery() != null && order.getPayDelivery().compareTo(BigDecimal.ZERO) == 0 &&
+						(order.getTuiMoneyStatus() == null || order.getTuiMoneyStatus() != 1)) {
+						try {
+							companyService.addCompanyMoney(order);
+							storeOrderCount++;
+						} catch (Exception e) {
+							log.error("添加商城订单{}的公司余额失败: {}", order.getOrderCode(), e.getMessage());
+						}
+					}
+				}
+				log.info("已处理商城已完成订单{}条,成功添加公司余额{}条", completedStoreOrders.size(), storeOrderCount);
+			}
+
+			// 查询直播已完成订单
+			LiveOrder liveOrderQuery = new LiveOrder();
+			liveOrderQuery.setStatus(3);
+			List<LiveOrder> completedLiveOrders = liveOrderService.selectLiveOrderList(liveOrderQuery);
+			int liveOrderCount = 0;
+			if (completedLiveOrders != null && !completedLiveOrders.isEmpty()) {
+				for (LiveOrder order : completedLiveOrders) {
+					if (order.getCompanyId() != null && order.getCompanyId() > 0) {
+						try {
+							companyService.addCompanyMoney(order);
+							liveOrderCount++;
+						} catch (Exception e) {
+							log.error("添加直播订单{}的公司余额失败: {}", order.getOrderCode(), e.getMessage());
+						}
+					}
+				}
+				log.info("已处理直播已完成订单{}条,成功添加公司余额{}条", completedLiveOrders.size(), liveOrderCount);
+			}
+
+			// 5. 查询所有已完成退款的订单,按照特定逻辑完成订单退款佣金
+			// 查询商城已退款订单
+			storeOrderQuery = new FsStoreOrderScrm();
+			// 根据需求,查询tuiMoneyStatus=1的已退款订单
+			storeOrderQuery.setTuiMoneyStatus(1);
+			List<FsStoreOrderScrm> refundedStoreOrders = fsStoreOrderScrmService.selectFsStoreOrderList(storeOrderQuery);
+			int refundStoreOrderCount = 0;
+			if (refundedStoreOrders != null && !refundedStoreOrders.isEmpty()) {
+				for (FsStoreOrderScrm order : refundedStoreOrders) {
+					// 减去公司收入
+					if (order.getCompanyId() != null && order.getCompanyId() > 0 && 
+						order.getTuiMoneyStatus() != null && order.getTuiMoneyStatus() == 1) {
+						try {
+							companyService.subCompanyMoney(order);
+							refundStoreOrderCount++;
+						} catch (Exception e) {
+							log.error("处理商城退款订单{}的公司余额失败: {}", order.getOrderCode(), e.getMessage());
+						}
+					}
+				}
+				log.info("已处理商城退款订单{}条,成功减去公司余额{}条", refundedStoreOrders.size(), refundStoreOrderCount);
+			}
+
+			// 6. 查询所有已完成退款的订单,按照特定逻辑完成订单退款佣金
+			// 查询直播已退款订单
+			liveOrderQuery = new LiveOrder();
+			// 根据需求,查询tuiMoneyStatus=1的已退款订单
+			liveOrderQuery.setTuiMoneyStatus(1);
+			List<LiveOrder> refundedLiveOrders = liveOrderMapper.selectLiveOrderList(liveOrderQuery);
+			int refundLiveOrderCount = 0;
+			if (refundedLiveOrders != null && !refundedLiveOrders.isEmpty()) {
+				for (LiveOrder order : refundedLiveOrders) {
+					// 减去公司收入
+					if (order.getCompanyId() != null && order.getCompanyId() > 0 &&
+							order.getTuiMoneyStatus() != null && order.getTuiMoneyStatus() == 1) {
+						try {
+							companyService.subLiveCompanyMoney(order);
+							refundLiveOrderCount++;
+						} catch (Exception e) {
+							log.error("处理直播退款订单{}的公司余额失败: {}", order.getOrderCode(), e.getMessage());
+						}
+					}
+				}
+				log.info("已处理直播退款订单{}条,成功减去公司余额{}条", refundedLiveOrders.size(), refundLiveOrderCount);
+			}
+
+			log.info("重建公司余额完成");
+			return R.ok()
+				.put("message", "重建公司余额完成")
+				.put("清理公司数", allCompanies.size())
+				.put("删除日志数", deleteCount3 + deleteCount4)
+				.put("商城已完成订单处理数", storeOrderCount)
+				.put("直播已完成订单处理数", liveOrderCount)
+				.put("商城退款订单处理数", refundStoreOrderCount)
+				.put("直播退款订单处理数", refundLiveOrderCount);
+
+		} catch (Exception e) {
+			log.error("重建公司余额失败", e);
+			return R.error("重建公司余额失败: " + e.getMessage());
+		}
+	}
+
 
 }