|
|
@@ -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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|