From f92a593ff88038b77cc01eb31a8b6bfa2c6e2ee1 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Fri, 30 Jan 2026 18:24:32 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E5=8D=95=E4=BD=8D-=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/ShopProdCategoryController.java | 7 ++++ .../admin/ShopProdUnitController.java | 7 ++++ .../product/dto/ProductCategoryExportDTO.java | 20 ++++++++++ .../czg/product/dto/ProductUnitExportDTO.java | 40 +++++++++++++++++++ .../service/ShopProdCategoryService.java | 3 ++ .../product/service/ShopProdUnitService.java | 3 ++ .../service/impl/ProductServiceImpl.java | 2 +- .../impl/ShopProdCategoryServiceImpl.java | 11 +++++ .../service/impl/ShopProdUnitServiceImpl.java | 11 +++++ 9 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductCategoryExportDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductUnitExportDTO.java diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java index 44a281260..d1a146b5c 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java @@ -13,6 +13,7 @@ import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -52,6 +53,12 @@ public class ShopProdCategoryController { return CzgResult.success(data); } + @GetMapping("/export") + @OperationLog("商品分类-导出") + public void exportShopProdCategory(ShopProdCategoryDTO param, HttpServletResponse response) { + shopProdCategoryService.exportShopProdCategory(param, response); + } + @GetMapping("{id}") @OperationLog("商品分类-详情") //@SaAdminCheckPermission("shopProdCategory:info") diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java index 1b2fc86b2..32fc238c8 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java @@ -13,6 +13,7 @@ import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -53,6 +54,12 @@ public class ShopProdUnitController { return CzgResult.success(data); } + @GetMapping("/export") + @OperationLog("商品单位-导出") + public void exportProduct(ShopProdUnitDTO param, HttpServletResponse response) { + shopProdUnitService.exportShopProdUnit(param, response); + } + @GetMapping("{id}") @OperationLog("商品单位-详情") //@SaAdminCheckPermission("shopProdUnit:info") diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductCategoryExportDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductCategoryExportDTO.java new file mode 100644 index 000000000..59e1dd3ac --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductCategoryExportDTO.java @@ -0,0 +1,20 @@ +package com.czg.product.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * @author yjjie + * @date 2026/1/30 18:15 + */ +@Data +public class ProductCategoryExportDTO { + + @ExcelProperty("分类名称") + private String name; + + + @ExcelProperty("简称") + private String shortName; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductUnitExportDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductUnitExportDTO.java new file mode 100644 index 000000000..17687630e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductUnitExportDTO.java @@ -0,0 +1,40 @@ +package com.czg.product.dto; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * 商品单位导出 + * @author yjjie + * @date 2026/1/30 17:51 + */ +@Data +public class ProductUnitExportDTO { + + @ExcelProperty("单位名称") + private String name; + /** + * 单位类型 number-计数 weight-记重 + */ + @ExcelIgnore + private String unitType; + @ExcelProperty("单位类型") + private String unitTypeRemark; + + /** + * 单位来源 1-系统预设 0-商家创建 + */ + @ExcelIgnore + private Integer isSystem; + @ExcelProperty("单位来源") + private String isSystemRemark; + + public String getUnitTypeRemark() { + return "number".equals(unitType) ? "计数" : "记重"; + } + + public String getIsSystemRemark() { + return isSystem == 1 ? "系统预设" : "商家创建"; + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdCategoryService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdCategoryService.java index 4af1e0a30..380bc03ac 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdCategoryService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdCategoryService.java @@ -4,6 +4,7 @@ import com.czg.product.dto.ShopProdCategoryDTO; import com.czg.product.entity.ShopProdCategory; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; +import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -30,6 +31,8 @@ public interface ShopProdCategoryService extends IService { */ List getShopProdCategoryList(ShopProdCategoryDTO param); + void exportShopProdCategory(ShopProdCategoryDTO param, HttpServletResponse response); + /** * 获取店铺商品分类详情 * @param id id diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java index c45f856e5..97135badf 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java @@ -4,6 +4,7 @@ import com.czg.product.dto.ShopProdUnitDTO; import com.czg.product.entity.ShopProdUnit; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; +import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -31,6 +32,8 @@ public interface ShopProdUnitService extends IService { */ List getShopProdUnitList(ShopProdUnitDTO param); + void exportShopProdUnit(ShopProdUnitDTO param, HttpServletResponse response); + /** * 获取商品单位详情 * diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index d80c65797..710d9a032 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -277,7 +277,7 @@ public class ProductServiceImpl extends ServiceImpl impl .setIsSale(getMainSkuIsSale(exportDTO)) .setGroupTitleName(proGroupDTO.getTitle()) .setGroupProductNumber(Optional.ofNullable(proGroupDTO.getNumber()).map(String::valueOf).orElse("")) - .setGroupProductName(good.getProName() + " " + good.getSkuName()); + .setGroupProductName(good.getProName() + "-" + good.getSkuName()); dataList.add(pkgDto); } diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java index f285d79d4..09b4e2b85 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java @@ -3,7 +3,9 @@ package com.czg.service.product.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.czg.constants.SystemConstants; +import com.czg.excel.ExcelExportUtil; import com.czg.exception.CzgException; +import com.czg.product.dto.ProductCategoryExportDTO; import com.czg.product.dto.ShopProdCategoryDTO; import com.czg.product.entity.ShopProdCategory; import com.czg.product.service.ProductService; @@ -16,6 +18,7 @@ import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -62,6 +65,14 @@ public class ShopProdCategoryServiceImpl extends ServiceImpl exportList = listAs(queryWrapper, ProductCategoryExportDTO.class); + ExcelExportUtil.exportToResponse(exportList, ProductCategoryExportDTO.class, "商品分类列表", response); + } + @Override public ShopProdCategoryDTO getShopProdCategoryById(Long id) { Long shopId = StpKit.USER.getShopId(0L); diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdUnitServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdUnitServiceImpl.java index 5b093147c..4da692a26 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdUnitServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdUnitServiceImpl.java @@ -3,7 +3,9 @@ package com.czg.service.product.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.czg.constants.SystemConstants; +import com.czg.excel.ExcelExportUtil; import com.czg.exception.CzgException; +import com.czg.product.dto.ProductUnitExportDTO; import com.czg.product.dto.ShopProdUnitDTO; import com.czg.product.entity.ShopProdUnit; import com.czg.product.enums.UnitTypeEnum; @@ -15,6 +17,7 @@ import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Service; import java.util.List; @@ -59,6 +62,14 @@ public class ShopProdUnitServiceImpl extends ServiceImpl unitExportDTOList = listAs(queryWrapper, ProductUnitExportDTO.class); + ExcelExportUtil.exportToResponse(unitExportDTOList, ProductUnitExportDTO.class, "单位列表", response); + } + @Override public ShopProdUnitDTO getShopProdUnitById(Long id) { Long shopId = StpKit.USER.getShopId(0L); From 0d4b1ace60de6901080d2a6a6931d2cc6a3c0962 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Sat, 31 Jan 2026 14:06:23 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/HandoverRecordController.java | 9 +- .../admin/SaleSummaryController.java | 8 +- .../admin/TableSummaryController.java | 10 +- .../com/czg/handel/ExcelMergeHandler.java | 151 ------------------ .../com/czg/handel/TableRefundCellHandel.java | 55 ------- cash-api/pom.xml | 4 - .../admin/ShopProdCategoryController.java | 28 +++- .../admin/ShopProdUnitController.java | 30 +++- cash-common/cash-common-service/pom.xml | 5 +- .../czg/account/vo/HandoverProductListVo.java | 8 +- .../czg/order/entity/ShopProdStatistic.java | 18 +-- .../order/service/TableSummaryService.java | 3 +- .../czg/order/vo/TableSummaryExportVo.java | 24 +-- .../java/com/czg/excel/ExcelExportUtil.java | 60 +++---- cash-dependencies/pom.xml | 7 - .../account/service/impl/GeoServiceImpl.java | 4 +- .../service/impl/ShopSongServiceImpl.java | 16 +- .../service/impl/TableSummaryServiceImpl.java | 114 ++++++++++++- .../service/impl/ProductServiceImpl.java | 3 +- 19 files changed, 244 insertions(+), 313 deletions(-) delete mode 100644 cash-api/order-server/src/main/java/com/czg/handel/ExcelMergeHandler.java delete mode 100644 cash-api/order-server/src/main/java/com/czg/handel/TableRefundCellHandel.java diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java index ae033468b..f5313e297 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java @@ -8,10 +8,11 @@ import com.czg.account.vo.HandoverProductListVo; import com.czg.account.vo.HandoverTotalVo; import com.czg.annotation.SaAdminCheckPermission; import com.czg.constants.SystemConstants; +import com.czg.excel.ExcelExportUtil; import com.czg.log.annotation.OperationLog; import com.czg.resp.CzgResult; import com.mybatisflex.core.paginate.Page; -import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -62,12 +63,12 @@ public class HandoverRecordController { * * @param id 交班记录ID */ - @ResponseExcel(name = "交班售出商品明细") @GetMapping("/export/{id}") @OperationLog("交班记录-导出") @SaAdminCheckPermission(parentName = "交班记录", value = "handoverRecord:export", name = "交班记录-导出") - public List export(@PathVariable Long id) { - return handoverRecordService.getHandoverProductListById(id); + public void export(@PathVariable Long id, HttpServletResponse response) { + List list = handoverRecordService.getHandoverProductListById(id); + ExcelExportUtil.exportToResponse(list, HandoverProductListVo.class, "交班售出商品明细", response); } /** diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/SaleSummaryController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/SaleSummaryController.java index 648cf51c8..71654f8e0 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/SaleSummaryController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/SaleSummaryController.java @@ -1,5 +1,6 @@ package com.czg.controller.admin; +import com.czg.excel.ExcelExportUtil; import com.czg.log.annotation.OperationLog; import com.czg.order.entity.ShopProdStatistic; import com.czg.order.param.SaleSummaryCountParam; @@ -7,8 +8,8 @@ import com.czg.order.service.ShopProdStatisticService; import com.czg.order.vo.SaleSummaryCountVo; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; -import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; @@ -59,13 +60,12 @@ public class SaleSummaryController { return CzgResult.success(list); } - @ResponseExcel(name = "销售统计明细") @GetMapping("/export") - public List summaryExport(SaleSummaryCountParam param) { + public void summaryExport(SaleSummaryCountParam param, HttpServletResponse response) { if (param.getShopId() == null) { param.setShopId(StpKit.USER.getShopId()); } - return prodStatisticService.getArchiveTradeData(param); + ExcelExportUtil.exportToResponse(prodStatisticService.getArchiveTradeData(param), ShopProdStatistic.class, "销售统计明细", response); } } diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/TableSummaryController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/TableSummaryController.java index 0faa5c824..4435ff058 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/TableSummaryController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/TableSummaryController.java @@ -1,7 +1,6 @@ package com.czg.controller.admin; -import com.czg.handel.ExcelMergeHandler; -import com.czg.handel.TableRefundCellHandel; +import com.czg.excel.ExcelExportUtil; import com.czg.log.annotation.OperationLog; import com.czg.order.entity.ShopTableOrderStatistic; import com.czg.order.param.DataSummaryTradeParam; @@ -11,8 +10,8 @@ import com.czg.order.service.TableSummaryService; import com.czg.order.vo.TableSummaryExportVo; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; -import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -54,15 +53,14 @@ public class TableSummaryController { /** * 导出 */ - @ResponseExcel(name = "台桌统计", writeHandler = {ExcelMergeHandler.class, TableRefundCellHandel.class}) @GetMapping("export") @OperationLog("导出") //@SaAdminCheckPermission("tableSummary:export") - public List summaryExport(TableSummaryParam param) { + public void summaryExport(TableSummaryParam param, HttpServletResponse response) { if (param.getShopId() == null) { param.setShopId(StpKit.USER.getShopId()); } - return tableSummaryService.summaryExportList(param); + tableSummaryService.summaryExportList(param, response); } } diff --git a/cash-api/order-server/src/main/java/com/czg/handel/ExcelMergeHandler.java b/cash-api/order-server/src/main/java/com/czg/handel/ExcelMergeHandler.java deleted file mode 100644 index 3106f5813..000000000 --- a/cash-api/order-server/src/main/java/com/czg/handel/ExcelMergeHandler.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.czg.handel; - -import cn.idev.excel.metadata.Head; -import cn.idev.excel.metadata.data.WriteCellData; -import cn.idev.excel.write.handler.CellWriteHandler; -import cn.idev.excel.write.metadata.holder.WriteSheetHolder; -import cn.idev.excel.write.metadata.holder.WriteTableHolder; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.ss.util.CellRangeAddress; - -import java.util.List; - - -/** - * @author tankaikai - * @since 2025-04-01 18:41 - */ -public class ExcelMergeHandler implements CellWriteHandler { - // 要合并的列索引数组 - private int[] mergeColumnIndex = {0, 1, 2, 3, 8, 9}; - // 合并开始的行索引 - private int mergeRowIndex = 1; - - public ExcelMergeHandler() { - - } - - /** - * 构造函数 - * - * @param mergeRowIndex 合并开始的行索引 - * @param mergeColumnIndex 要合并的列索引数组 - */ - public ExcelMergeHandler(int mergeRowIndex, int[] mergeColumnIndex) { - this.mergeRowIndex = mergeRowIndex; - this.mergeColumnIndex = mergeColumnIndex; - } - - @Override - public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { - // 当前行索引 - int curRowIndex = cell.getRowIndex(); - // 当前列索引 - int curColIndex = cell.getColumnIndex(); - - // 如果当前行大于合并开始行且当前列在需要合并的列中 - if (curRowIndex > mergeRowIndex && isMergeColumn(curColIndex)) { - // 进行合并操作 - mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); - } - } - - /** - * 检查当前列是否在需要合并的列中 - * - * @param curColIndex 当前列索引 - * @return 如果是需要合并的列返回true,否则返回false - */ - private boolean isMergeColumn(int curColIndex) { - for (int columnIndex : mergeColumnIndex) { - if (curColIndex == columnIndex) { - return true; - } - } - return false; - } - - /** - * 当前单元格向上合并 - * - * @param writeSheetHolder 当前工作表持有者 - * @param cell 当前单元格 - * @param curRowIndex 当前行索引 - * @param curColIndex 当前列索引 - */ - private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) { - // 获取当前单元格的数据 - Object curData = getCellData(cell); - // 获取前一个单元格的数据 - Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex); - Object preData = getCellData(preCell); - - // 判断当前单元格和前一个单元格的数据以及主键是否相同 - if (curData.equals(preData) && isSamePrimaryKey(cell, curRowIndex)) { - // 获取工作表 - Sheet sheet = writeSheetHolder.getSheet(); - // 合并单元格 - mergeCells(sheet, curRowIndex, curColIndex); - CellStyle style = preCell.getCellStyle(); - // 设置水平居中 - style.setAlignment(HorizontalAlignment.CENTER); - // 设置垂直居中 - style.setVerticalAlignment(VerticalAlignment.CENTER); - preCell.setCellStyle(style); - } - } - - /** - * 获取单元格的数据 - * - * @param cell 单元格 - * @return 单元格数据 - */ - private Object getCellData(Cell cell) { - return cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue(); - } - - /** - * 判断当前单元格和前一个单元格的主键是否相同 - * - * @param cell 当前单元格 - * @param curRowIndex 当前行索引 - * @return 如果主键相同返回true,否则返回false - */ - private boolean isSamePrimaryKey(Cell cell, int curRowIndex) { - String currentPrimaryKey = cell.getRow().getCell(0).getStringCellValue(); - String previousPrimaryKey = cell.getSheet().getRow(curRowIndex - 1).getCell(0).getStringCellValue(); - return currentPrimaryKey.equals(previousPrimaryKey); - } - - /** - * 合并单元格 - * - * @param sheet 工作表 - * @param curRowIndex 当前行索引 - * @param curColIndex 当前列索引 - */ - private void mergeCells(Sheet sheet, int curRowIndex, int curColIndex) { - // 获取已合并的区域 - List mergeRegions = sheet.getMergedRegions(); - boolean isMerged = false; - - // 检查前一个单元格是否已经被合并 - for (int i = 0; i < mergeRegions.size() && !isMerged; i++) { - CellRangeAddress cellRangeAddr = mergeRegions.get(i); - if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) { - sheet.removeMergedRegion(i); - cellRangeAddr.setLastRow(curRowIndex); - sheet.addMergedRegion(cellRangeAddr); - isMerged = true; - } - } - - // 如果前一个单元格未被合并,则新增合并区域 - if (!isMerged) { - CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex); - sheet.addMergedRegion(cellRangeAddress); - } - } -} - diff --git a/cash-api/order-server/src/main/java/com/czg/handel/TableRefundCellHandel.java b/cash-api/order-server/src/main/java/com/czg/handel/TableRefundCellHandel.java deleted file mode 100644 index 42ed65f37..000000000 --- a/cash-api/order-server/src/main/java/com/czg/handel/TableRefundCellHandel.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.czg.handel; - -import cn.hutool.core.util.ArrayUtil; -import cn.idev.excel.metadata.Head; -import cn.idev.excel.metadata.data.WriteCellData; -import cn.idev.excel.write.handler.CellWriteHandler; -import cn.idev.excel.write.metadata.holder.WriteSheetHolder; -import cn.idev.excel.write.metadata.holder.WriteTableHolder; -import org.apache.poi.ss.usermodel.*; - -import java.util.List; - -/** - * 台桌统计退单单元格处理器 - * - * @author tankaikai - * @since 2025-04-02 09:50 - */ -public class TableRefundCellHandel implements CellWriteHandler { - // 要处理的列索引数组 - private int[] yellowColumnIndex = {10, 11}; - - public TableRefundCellHandel() { - - } - - @Override - public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { - // 当前行索引 - int curRowIndex = cell.getRowIndex(); - // 当前列索引 - int curColIndex = cell.getColumnIndex(); - if (curRowIndex == 0) { - return; - } - // 如果是指定要处理的列,则要进行加黄操作 - if (ArrayUtil.contains(yellowColumnIndex, curColIndex)) { - Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex); - if (preCell.getCellType() == CellType.NUMERIC) { - if (preCell.getNumericCellValue() < 0) { - //System.out.println("设置黄色背景:" + curRowIndex + "行," + curColIndex + "列" + preCell.getNumericCellValue()); - CellStyle style = preCell.getSheet().getWorkbook().createCellStyle(); - style.cloneStyleFrom(preCell.getCellStyle()); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); - style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); - // 设置水平居中 - style.setAlignment(HorizontalAlignment.CENTER); - // 设置垂直居中 - style.setVerticalAlignment(VerticalAlignment.CENTER); - preCell.setCellStyle(style); - } - } - } - } -} diff --git a/cash-api/pom.xml b/cash-api/pom.xml index 60cdea5bc..d7510b7f9 100644 --- a/cash-api/pom.xml +++ b/cash-api/pom.xml @@ -52,10 +52,6 @@ cash-common-service ${project.version} - - com.pig4cloud.excel - excel-spring-boot-starter - diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java index d1a146b5c..2d03e514d 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java @@ -37,14 +37,19 @@ public class ShopProdCategoryController { @Resource private ShopSyncService shopSyncService; + /** + * 分页 + */ @GetMapping("page") @OperationLog("商品分类-分页") - //@SaAdminCheckPermission("shopProdCategory:page") public CzgResult> getShopProdCategoryPage(ShopProdCategoryDTO param) { Page data = shopProdCategoryService.getShopProdCategoryPage(param); return CzgResult.success(data); } + /** + * 列表 + */ @GetMapping("list") @OperationLog("商品分类-列表") //@SaAdminCheckPermission("shopProdCategory:list") @@ -53,12 +58,18 @@ public class ShopProdCategoryController { return CzgResult.success(data); } + /** + * 导出 + */ @GetMapping("/export") @OperationLog("商品分类-导出") public void exportShopProdCategory(ShopProdCategoryDTO param, HttpServletResponse response) { shopProdCategoryService.exportShopProdCategory(param, response); } + /** + * 详情 + */ @GetMapping("{id}") @OperationLog("商品分类-详情") //@SaAdminCheckPermission("shopProdCategory:info") @@ -68,6 +79,9 @@ public class ShopProdCategoryController { return CzgResult.success(data); } + /** + * 新增 + */ @PostMapping @OperationLog("商品分类-新增") //@SaAdminCheckPermission("shopProdCategory:add") @@ -77,6 +91,9 @@ public class ShopProdCategoryController { return CzgResult.success(); } + /** + * 修改 + */ @PutMapping @OperationLog("商品分类-修改") //@SaAdminCheckPermission("shopProdCategory:update") @@ -86,6 +103,9 @@ public class ShopProdCategoryController { return CzgResult.success(); } + /** + * 删除 + */ @DeleteMapping("{id}") @OperationLog("商品分类-删除") //@SaAdminCheckPermission("shopProdCategory:delete") @@ -96,6 +116,9 @@ public class ShopProdCategoryController { return CzgResult.success(); } + /** + * 禁用 + */ @PostMapping("disable/{id}") @OperationLog("商品分类-禁用") //@SaAdminCheckPermission("shopProdCategory:able") @@ -107,6 +130,9 @@ public class ShopProdCategoryController { return CzgResult.success(); } + /** + * 启用 + */ @PostMapping("enable/{id}") @OperationLog("商品分类-启用") //@SaAdminCheckPermission("shopProdCategory:able") diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java index 32fc238c8..d30a807bf 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java @@ -22,7 +22,7 @@ import java.util.List; /** - * 商品单位 + * 管理端/商品单位 * * @author Tankaikai tankaikai@aliyun.com * @since 1.0 2025-02-10 @@ -37,7 +37,9 @@ public class ShopProdUnitController { @Resource private ShopSyncService shopSyncService; - + /** + * 分页 + */ @GetMapping("page") @OperationLog("商品单位-分页") //@SaAdminCheckPermission("shopProdUnit:page") @@ -46,6 +48,9 @@ public class ShopProdUnitController { return CzgResult.success(data); } + /** + * 列表 + */ @GetMapping("list") @OperationLog("商品单位-列表") //@SaAdminCheckPermission("shopProdUnit:list") @@ -54,12 +59,18 @@ public class ShopProdUnitController { return CzgResult.success(data); } + /** + * 导出 + */ @GetMapping("/export") @OperationLog("商品单位-导出") public void exportProduct(ShopProdUnitDTO param, HttpServletResponse response) { shopProdUnitService.exportShopProdUnit(param, response); } + /** + * 详情 + */ @GetMapping("{id}") @OperationLog("商品单位-详情") //@SaAdminCheckPermission("shopProdUnit:info") @@ -69,6 +80,9 @@ public class ShopProdUnitController { return CzgResult.success(data); } + /** + * 新增 + */ @PostMapping @OperationLog("商品单位-新增") //@SaAdminCheckPermission("shopProdUnit:add") @@ -78,6 +92,9 @@ public class ShopProdUnitController { return CzgResult.success(); } + /** + * 修改 + */ @PutMapping @OperationLog("商品单位-修改") //@SaAdminCheckPermission("shopProdUnit:update") @@ -87,6 +104,9 @@ public class ShopProdUnitController { return CzgResult.success(); } + /** + * 删除 + */ @DeleteMapping("{id}") @OperationLog("商品单位-删除") //@SaAdminCheckPermission("shopProdUnit:delete") @@ -97,6 +117,9 @@ public class ShopProdUnitController { return CzgResult.success(); } + /** + * 禁用 + */ @PostMapping("disable/{id}") @OperationLog("商品单位-禁用") //@SaAdminCheckPermission("shopProdUnit:able") @@ -108,6 +131,9 @@ public class ShopProdUnitController { return CzgResult.success(); } + /** + * 启用 + */ @PostMapping("enable/{id}") @OperationLog("商品单位-启用") //@SaAdminCheckPermission("shopProdUnit:able") diff --git a/cash-common/cash-common-service/pom.xml b/cash-common/cash-common-service/pom.xml index ce95f89fe..7572c3a21 100644 --- a/cash-common/cash-common-service/pom.xml +++ b/cash-common/cash-common-service/pom.xml @@ -30,10 +30,7 @@ com.mybatis-flex mybatis-flex-processor - - com.pig4cloud.excel - excel-spring-boot-starter - + org.apache.dubbo dubbo-spring-boot-starter diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java index f3f3b1c7c..76c222322 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java @@ -1,10 +1,9 @@ package com.czg.account.vo; -import cn.idev.excel.annotation.ExcelIgnore; -import cn.idev.excel.annotation.ExcelProperty; -import cn.idev.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.fastjson2.annotation.JSONField; -import com.pig4cloud.plugin.excel.annotation.ExcelLine; import lombok.Data; import java.io.Serial; @@ -26,7 +25,6 @@ public class HandoverProductListVo implements Serializable { /** * 导入时候回显行号 */ - @ExcelLine @ExcelIgnore @JSONField(serialize = false) private Long lineNum; diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java index 6a87d3770..7b92c7dd0 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java @@ -1,8 +1,8 @@ package com.czg.order.entity; -import cn.idev.excel.annotation.ExcelIgnore; -import cn.idev.excel.annotation.ExcelProperty; -import cn.idev.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; @@ -59,42 +59,42 @@ public class ShopProdStatistic implements Serializable { * 销售数量 */ @ExcelProperty("销量") - @ColumnWidth(5) + @ColumnWidth(15) private BigDecimal saleCount; /** * 销售金额 */ @ExcelProperty("销售金额") - @ColumnWidth(7) + @ColumnWidth(15) private BigDecimal saleAmount; /** * 退单量 */ @ExcelProperty("退单量") - @ColumnWidth(5) + @ColumnWidth(15) private BigDecimal refundCount; /** * 退单金额 */ @ExcelProperty("退款金额") - @ColumnWidth(7) + @ColumnWidth(15) private BigDecimal refundAmount; /** * 实际销售数量(过滤掉退单后的数量) */ @ExcelProperty("实际销量") - @ColumnWidth(5) + @ColumnWidth(15) private BigDecimal validSaleCount; /** * 实际销售金额(过滤掉退单后的金额) */ @ExcelProperty("实际销售额") - @ColumnWidth(7) + @ColumnWidth(15) private BigDecimal validSaleAmount; /** diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/TableSummaryService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/TableSummaryService.java index f2094d99a..4d7a74998 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/service/TableSummaryService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/TableSummaryService.java @@ -2,6 +2,7 @@ package com.czg.order.service; import com.czg.order.param.TableSummaryParam; import com.czg.order.vo.TableSummaryExportVo; +import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -14,7 +15,7 @@ import java.util.List; public interface TableSummaryService { - List summaryExportList(TableSummaryParam param); + void summaryExportList(TableSummaryParam param, HttpServletResponse response); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/vo/TableSummaryExportVo.java b/cash-common/cash-common-service/src/main/java/com/czg/order/vo/TableSummaryExportVo.java index 7c71c74c2..77e7c6eb4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/vo/TableSummaryExportVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/vo/TableSummaryExportVo.java @@ -1,10 +1,9 @@ package com.czg.order.vo; -import cn.idev.excel.annotation.ExcelIgnore; -import cn.idev.excel.annotation.ExcelProperty; -import cn.idev.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.fastjson2.annotation.JSONField; -import com.pig4cloud.plugin.excel.annotation.ExcelLine; import lombok.Data; import java.io.Serial; @@ -25,7 +24,6 @@ public class TableSummaryExportVo implements Serializable { /** * 导入时候回显行号 */ - @ExcelLine @ExcelIgnore @JSONField(serialize = false) private Long lineNum; @@ -36,18 +34,20 @@ public class TableSummaryExportVo implements Serializable { private String tableConcatDate; @ExcelIgnore private String tableCode; - /** - * 台桌 - */ - @ExcelProperty("台桌") - @ColumnWidth(10) - private String tableName; /** * 日期 */ @ExcelProperty("日期") - @ColumnWidth(10) + @ColumnWidth(15) private String createDate; + + /** + * 台桌 + */ + @ExcelProperty("台桌") + @ColumnWidth(13) + private String tableName; + /** * 商品分类 */ diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/excel/ExcelExportUtil.java b/cash-common/cash-common-tools/src/main/java/com/czg/excel/ExcelExportUtil.java index fffa512d7..ba12b7501 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/excel/ExcelExportUtil.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/excel/ExcelExportUtil.java @@ -8,6 +8,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; @@ -26,6 +27,7 @@ import java.util.List; /** * EasyExcel导出工具类 + * * @author yjjie * @date 2026/1/28 10:48 */ @@ -34,14 +36,18 @@ public class ExcelExportUtil { private static final ExcelExportConfig DEFAULT_CONFIG = new ExcelExportConfig(); + public static OnceAbsoluteMergeStrategy createMergeStrategy(int firstRow, int lastRow, int firstCol, int lastCol) { + return new OnceAbsoluteMergeStrategy(firstRow, lastRow, firstCol, lastCol); + } + /** * 导出Excel到HttpServletResponse * - * @param data 数据列表 - * @param clazz 数据类型 + * @param data 数据列表 + * @param clazz 数据类型 * @param fileName 文件名(不含扩展名) * @param response HttpServletResponse - * @param 数据类型 + * @param 数据类型 */ public static void exportToResponse(List data, Class clazz, String fileName, HttpServletResponse response) { @@ -51,12 +57,12 @@ public class ExcelExportUtil { /** * 导出Excel到HttpServletResponse(自定义配置) * - * @param data 数据列表 - * @param clazz 数据类型 + * @param data 数据列表 + * @param clazz 数据类型 * @param fileName 文件名(不含扩展名) - * @param config 配置信息 + * @param config 配置信息 * @param response HttpServletResponse - * @param 数据类型 + * @param 数据类型 */ public static void exportToResponse(List data, Class clazz, String fileName, ExcelExportConfig config, @@ -86,10 +92,10 @@ public class ExcelExportUtil { /** * 导出Excel到文件 * - * @param data 数据列表 - * @param clazz 数据类型 + * @param data 数据列表 + * @param clazz 数据类型 * @param filePath 文件路径 - * @param 数据类型 + * @param 数据类型 */ public static void exportToFile(List data, Class clazz, String filePath) { exportToFile(data, clazz, filePath, DEFAULT_CONFIG); @@ -98,11 +104,11 @@ public class ExcelExportUtil { /** * 导出Excel到文件(自定义配置) * - * @param data 数据列表 - * @param clazz 数据类型 + * @param data 数据列表 + * @param clazz 数据类型 * @param filePath 文件路径 - * @param config 配置信息 - * @param 数据类型 + * @param config 配置信息 + * @param 数据类型 */ public static void exportToFile(List data, Class clazz, String filePath, ExcelExportConfig config) { @@ -124,11 +130,11 @@ public class ExcelExportUtil { /** * 带样式的Excel导出到Response * - * @param data 数据列表 - * @param clazz 数据类型 + * @param data 数据列表 + * @param clazz 数据类型 * @param fileName 文件名 * @param response HttpServletResponse - * @param 数据类型 + * @param 数据类型 */ public static void exportWithStyleToResponse(List data, Class clazz, String fileName, HttpServletResponse response) { @@ -162,11 +168,11 @@ public class ExcelExportUtil { * 大数据量分批导出(避免内存溢出) * * @param dataSupplier 数据提供者(分页获取数据) - * @param clazz 数据类型 - * @param fileName 文件名 - * @param response HttpServletResponse - * @param batchSize 每批大小 - * @param 数据类型 + * @param clazz 数据类型 + * @param fileName 文件名 + * @param response HttpServletResponse + * @param batchSize 每批大小 + * @param 数据类型 */ public static void exportBigDataToResponse(DataSupplier dataSupplier, Class clazz, String fileName, @@ -254,13 +260,13 @@ public class ExcelExportUtil { * 带合并单元格的导出到Response * 多sheet导出到response * - * @param sheetDataList 数据列表 - * @param fileName 文件名 - * @param response HttpServletResponse + * @param sheetDataList 数据列表 + * @param fileName 文件名 + * @param response HttpServletResponse */ public static void exportMultipleSheetsToResponse(List sheetDataList, - String fileName, - HttpServletResponse response) { + String fileName, + HttpServletResponse response) { if (CollectionUtil.isEmpty(sheetDataList)) { throw new CzgException("数据列表不能为空"); } diff --git a/cash-dependencies/pom.xml b/cash-dependencies/pom.xml index 3622a95df..7e67c6bd2 100644 --- a/cash-dependencies/pom.xml +++ b/cash-dependencies/pom.xml @@ -250,13 +250,6 @@ spring-data-redis ${spring-data-redis.version} - - - - com.pig4cloud.excel - excel-spring-boot-starter - 3.4.0 - diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/GeoServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/GeoServiceImpl.java index 3d2b8f559..1407ce0fa 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/GeoServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/GeoServiceImpl.java @@ -1,11 +1,11 @@ package com.czg.service.account.service.impl; +import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSONObject; import com.czg.account.service.GeoService; import com.czg.exception.CzgException; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; @@ -49,7 +49,7 @@ public class GeoServiceImpl implements GeoService { param.put("key", "7a7f2e4790ea222660a027352ee3af39"); param.put("keywords", keywords); param.put("subdistrict", "1"); - if (StringUtils.isNotBlank(subdistrict)) { + if (StrUtil.isNotBlank(subdistrict)) { param.put("subdistrict", "2"); } param.put("extensions", "base"); diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java index 76008dd58..791cc9c05 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java @@ -7,13 +7,13 @@ import com.czg.config.RedisCst; import com.czg.exception.CzgException; import com.czg.sa.StpKit; import com.czg.service.RedisService; +import com.czg.utils.CzgRandomUtils; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.czg.account.entity.ShopSong; import com.czg.account.service.ShopSongService; import com.czg.service.account.mapper.ShopSongMapper; import jakarta.annotation.Resource; -import org.apache.commons.lang3.RandomStringUtils; import org.springframework.stereotype.Service; /** @@ -23,7 +23,7 @@ import org.springframework.stereotype.Service; * @since 2025-03-01 */ @Service -public class ShopSongServiceImpl extends ServiceImpl implements ShopSongService{ +public class ShopSongServiceImpl extends ServiceImpl implements ShopSongService { @Resource private RedisService redisService; @@ -49,18 +49,12 @@ public class ShopSongServiceImpl extends ServiceImpl i public String getSongUrl(Long shopId) { String code; String key = RedisCst.getSongUrlKey(shopId); - if(redisService.hasKey(key)){ + if (redisService.hasKey(key)) { code = (String) redisService.get(key); - }else { - code = RandomStringUtils.randomAlphanumeric(12); + } else { + code = CzgRandomUtils.randomString(12); redisService.set(key, code); } return code; } - - public static void main(String[] args) { - String string = RandomStringUtils.randomAlphanumeric(12); - System.out.println(string); - - } } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java index 67a4330eb..2cc134135 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java @@ -1,16 +1,21 @@ package com.czg.service.order.service.impl; import cn.hutool.core.collection.CollUtil; +import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.czg.excel.ExcelExportUtil; +import com.czg.excel.SheetData; import com.czg.order.param.TableSummaryParam; import com.czg.order.service.TableSummaryService; import com.czg.order.vo.TableSummaryExportVo; import com.czg.service.order.mapper.ShopTableOrderStatisticMapper; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -29,7 +34,7 @@ public class TableSummaryServiceImpl implements TableSummaryService { @Override - public List summaryExportList(TableSummaryParam param) { + public void summaryExportList(TableSummaryParam param, HttpServletResponse response) { if (param.getBeginDate() == null && param.getEndDate() == null) { // 获取当前日期 LocalDate currentDate = LocalDate.now(); @@ -48,7 +53,8 @@ public class TableSummaryServiceImpl implements TableSummaryService { } List list = shopTableOrderStatisticMapper.findSummaryExportList(param); if (CollUtil.isEmpty(list)) { - return List.of(); + ExcelExportUtil.exportToResponse(new ArrayList<>(), TableSummaryExportVo.class, "台桌统计", response); + return; } record TableSummary(String tableKey, BigDecimal totalSales, Map productSales) {} @@ -85,10 +91,106 @@ public class TableSummaryServiceImpl implements TableSummaryService { vo.setSalesAmount(summary.productSales().getOrDefault(vo.getProductId(), BigDecimal.ZERO)); } }); - // 追加个空行用于处理表格样式 - TableSummaryExportVo nullVo = new TableSummaryExportVo(); - list.add(nullVo); - return list; + + List strategies = calculateMergeCells(list); + ExcelExportUtil.exportMultipleSheetsToResponse( + List.of(new SheetData() + .setData(list) + .setSheetName("台桌统计") + .setHandlers(strategies) + .setClazz(TableSummaryExportVo.class)), + "台桌统计", + response); + } + + /** + * 计算需要合并的单元格信息 + */ + private List calculateMergeCells(List list) { + List mergeInfos = new ArrayList<>(); + + if (CollUtil.isEmpty(list)) { + return mergeInfos; + } + + // 按createDate分组 + Map> byCreateDate = list.stream() + .collect(Collectors.groupingBy(TableSummaryExportVo::getCreateDate)); + + List keyList = byCreateDate.keySet().stream().sorted().toList(); + + // Excel行号从1开始(假设第0行是标题) + int startRow = 1; + + for (String key : keyList) { + List dateGroup = byCreateDate.get(key); + int dateGroupSize = dateGroup.size(); + + // 合并createDate列(假设是第1列) + if (dateGroupSize > 1) { + mergeInfos.add(ExcelExportUtil.createMergeStrategy(startRow, startRow + dateGroupSize - 1, 0, 0)); + mergeInfos.add(ExcelExportUtil.createMergeStrategy(startRow, startRow + dateGroupSize - 1, 9, 9)); + } + + // 在销售额组内按tableName分组 + Map> byTableName = dateGroup.stream() + .collect(Collectors.groupingBy(TableSummaryExportVo::getTableName)); + + List nameKeyList = byTableName.keySet().stream().sorted().toList(); + + int currentRow = startRow; + for (String nameKey : nameKeyList) { + int nameGroupSize = byTableName.get(nameKey).size(); + + // 合并tableName列(假设是第4列,根据实际Excel列调整) + if (nameGroupSize > 1) { + mergeInfos.add(ExcelExportUtil.createMergeStrategy(currentRow, currentRow + nameGroupSize - 1, 1, 1)); + } + + // 移动到下一组 + currentRow += nameGroupSize; + } + + // 在日期组内按totalSalesAmount分组(同台桌同日期) + Map> byTotalSales = dateGroup.stream() + .collect(Collectors.groupingBy(TableSummaryExportVo::getTotalSalesAmount)); + + List salesKeyList = byTotalSales.keySet().stream().sorted().toList(); + + int nameRow = startRow; + + for (BigDecimal saleKey : salesKeyList) { + List salesGroup = byTotalSales.get(saleKey); + int salesGroupSize = salesGroup.size(); + + // 合并totalSalesAmount列(假设是第8列,根据实际Excel列调整) + if (salesGroupSize > 1) { + mergeInfos.add(ExcelExportUtil.createMergeStrategy(nameRow, nameRow + salesGroupSize - 1, 9, 9)); + } + +// // 在销售额组内按tableName分组 +// Map> byTableName = salesGroup.stream() +// .collect(Collectors.groupingBy(TableSummaryExportVo::getTableName)); +// +// List nameKeyList = byTableName.keySet().stream().sorted().toList(); +// +// for (List nameGroup : byTableName.values()) { +// int nameGroupSize = nameGroup.size(); +// +// // 合并tableName列(假设是第4列,根据实际Excel列调整) +// if (nameGroupSize > 1) { +// mergeInfos.add(ExcelExportUtil.createMergeStrategy(currentRow, currentRow + nameGroupSize - 1, 1, 1)); +// } +// +// // 移动到下一组 +// currentRow += nameGroupSize; +// } + } + + startRow += dateGroupSize; + } + + return mergeInfos; } } diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index 710d9a032..2a7cd2589 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -327,8 +327,7 @@ public class ProductServiceImpl extends ServiceImpl impl } private void addMergeHandler(List handlers, int firstRow, int lastRow, int firstCol, int lastCol) { - OnceAbsoluteMergeStrategy strategy = new OnceAbsoluteMergeStrategy(firstRow, lastRow, firstCol, lastCol); - handlers.add(strategy); + handlers.add(ExcelExportUtil.createMergeStrategy(firstRow, lastRow, firstCol, lastCol)); } @Override From c9e154299bca82b76fbefafd655742e37685e300 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Sat, 31 Jan 2026 14:14:01 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E5=BD=93=E6=97=A5=E6=80=BB=E9=94=80?= =?UTF-8?q?=E5=94=AE=E9=A2=9D=E4=B8=8D=E6=AD=A3=E7=A1=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TableSummaryServiceImpl.java | 150 ++++++------------ 1 file changed, 52 insertions(+), 98 deletions(-) diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java index 2cc134135..c01eaf66d 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/TableSummaryServiceImpl.java @@ -15,9 +15,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -32,7 +30,6 @@ public class TableSummaryServiceImpl implements TableSummaryService { @Resource private ShopTableOrderStatisticMapper shopTableOrderStatisticMapper; - @Override public void summaryExportList(TableSummaryParam param, HttpServletResponse response) { if (param.getBeginDate() == null && param.getEndDate() == null) { @@ -51,47 +48,41 @@ public class TableSummaryServiceImpl implements TableSummaryService { param.setBeginDate(formattedStartDate + " 00:00:00"); param.setEndDate(formattedEndDate + " 23:59:59"); } + List list = shopTableOrderStatisticMapper.findSummaryExportList(param); if (CollUtil.isEmpty(list)) { ExcelExportUtil.exportToResponse(new ArrayList<>(), TableSummaryExportVo.class, "台桌统计", response); return; } - record TableSummary(String tableKey, BigDecimal totalSales, Map productSales) {} - Map summaryMap = list.stream() + // === Step 1: 按日期计算 当日总销售额 === + Map dailyTotalMap = list.stream() .collect(Collectors.groupingBy( - vo -> vo.getTableCode() + "_" + vo.getCreateDate(), - Collectors.collectingAndThen( - Collectors.toList(), - vos -> { - String tableKey = vos.getFirst().getTableCode() + "_" + vos.getFirst().getCreateDate(); - BigDecimal totalSales = vos.stream() - .map(TableSummaryExportVo::getAmount) - .reduce(BigDecimal.ZERO, BigDecimal::add); - - Map productSales = vos.stream() - .collect(Collectors.groupingBy( - TableSummaryExportVo::getProductId, - Collectors.reducing( - BigDecimal.ZERO, - TableSummaryExportVo::getAmount, - BigDecimal::add - ) - )); - - return new TableSummary(tableKey, totalSales, productSales); - } - ) + TableSummaryExportVo::getCreateDate, + Collectors.reducing(BigDecimal.ZERO, TableSummaryExportVo::getAmount, BigDecimal::add) )); - list.forEach(vo -> { - TableSummary summary = summaryMap.get(vo.getTableConcatDate()); - if (summary != null) { - vo.setTotalSalesAmount(summary.totalSales()); - vo.setSalesAmount(summary.productSales().getOrDefault(vo.getProductId(), BigDecimal.ZERO)); - } - }); + // === Step 2: 按 台桌+日期 计算 每台桌当日销售额 === + Map tableDailyTotalMap = list.stream() + .collect(Collectors.groupingBy( + vo -> vo.getTableCode() + "_" + vo.getCreateDate(), + Collectors.reducing(BigDecimal.ZERO, TableSummaryExportVo::getAmount, BigDecimal::add) + )); + + // === Step 3: 回填字段 === + for (TableSummaryExportVo vo : list) { + String dateKey = vo.getCreateDate(); + String tableDateKey = vo.getTableCode() + "_" + dateKey; + + // 设置“总销售额” = 该台桌当天总销售额 + vo.setSalesAmount(tableDailyTotalMap.getOrDefault(tableDateKey, BigDecimal.ZERO)); + + // 设置“当日总销售额” = 当天所有台桌总和 + vo.setTotalSalesAmount(dailyTotalMap.getOrDefault(dateKey, BigDecimal.ZERO)); + } + + // === Step 4: 导出 === List strategies = calculateMergeCells(list); ExcelExportUtil.exportMultipleSheetsToResponse( List.of(new SheetData() @@ -108,89 +99,52 @@ public class TableSummaryServiceImpl implements TableSummaryService { */ private List calculateMergeCells(List list) { List mergeInfos = new ArrayList<>(); - if (CollUtil.isEmpty(list)) { return mergeInfos; } - // 按createDate分组 - Map> byCreateDate = list.stream() + // 按日期分组(用于合并“日期”和“当日总销售额”列) + Map> byDate = list.stream() .collect(Collectors.groupingBy(TableSummaryExportVo::getCreateDate)); - List keyList = byCreateDate.keySet().stream().sorted().toList(); + int currentRow = 1; // Excel 数据从第1行开始(第0行为标题) - // Excel行号从1开始(假设第0行是标题) - int startRow = 1; + // 按日期排序 + List sortedDates = byDate.keySet().stream().sorted().toList(); - for (String key : keyList) { - List dateGroup = byCreateDate.get(key); - int dateGroupSize = dateGroup.size(); + for (String date : sortedDates) { + List dateGroup = byDate.get(date); + int dateSize = dateGroup.size(); - // 合并createDate列(假设是第1列) - if (dateGroupSize > 1) { - mergeInfos.add(ExcelExportUtil.createMergeStrategy(startRow, startRow + dateGroupSize - 1, 0, 0)); - mergeInfos.add(ExcelExportUtil.createMergeStrategy(startRow, startRow + dateGroupSize - 1, 9, 9)); + // 合并“日期”列(第0列)和“当日总销售额”列(第9列) + if (dateSize > 1) { + mergeInfos.add(ExcelExportUtil.createMergeStrategy(currentRow, currentRow + dateSize - 1, 0, 0)); + mergeInfos.add(ExcelExportUtil.createMergeStrategy(currentRow, currentRow + dateSize - 1, 9, 9)); } - // 在销售额组内按tableName分组 - Map> byTableName = dateGroup.stream() + // 在日期组内,按台桌分组(用于合并“台桌”和“总销售额”列) + Map> byTable = dateGroup.stream() .collect(Collectors.groupingBy(TableSummaryExportVo::getTableName)); - List nameKeyList = byTableName.keySet().stream().sorted().toList(); + int tableStartRow = currentRow; + List sortedTables = byTable.keySet().stream().sorted().toList(); - int currentRow = startRow; - for (String nameKey : nameKeyList) { - int nameGroupSize = byTableName.get(nameKey).size(); + for (String table : sortedTables) { + List tableGroup = byTable.get(table); + int tableSize = tableGroup.size(); - // 合并tableName列(假设是第4列,根据实际Excel列调整) - if (nameGroupSize > 1) { - mergeInfos.add(ExcelExportUtil.createMergeStrategy(currentRow, currentRow + nameGroupSize - 1, 1, 1)); + // 合并“台桌”列(第1列)和“总销售额”列(第8列) + if (tableSize > 1) { + mergeInfos.add(ExcelExportUtil.createMergeStrategy(tableStartRow, tableStartRow + tableSize - 1, 1, 1)); + mergeInfos.add(ExcelExportUtil.createMergeStrategy(tableStartRow, tableStartRow + tableSize - 1, 8, 8)); } - // 移动到下一组 - currentRow += nameGroupSize; + tableStartRow += tableSize; } - // 在日期组内按totalSalesAmount分组(同台桌同日期) - Map> byTotalSales = dateGroup.stream() - .collect(Collectors.groupingBy(TableSummaryExportVo::getTotalSalesAmount)); - - List salesKeyList = byTotalSales.keySet().stream().sorted().toList(); - - int nameRow = startRow; - - for (BigDecimal saleKey : salesKeyList) { - List salesGroup = byTotalSales.get(saleKey); - int salesGroupSize = salesGroup.size(); - - // 合并totalSalesAmount列(假设是第8列,根据实际Excel列调整) - if (salesGroupSize > 1) { - mergeInfos.add(ExcelExportUtil.createMergeStrategy(nameRow, nameRow + salesGroupSize - 1, 9, 9)); - } - -// // 在销售额组内按tableName分组 -// Map> byTableName = salesGroup.stream() -// .collect(Collectors.groupingBy(TableSummaryExportVo::getTableName)); -// -// List nameKeyList = byTableName.keySet().stream().sorted().toList(); -// -// for (List nameGroup : byTableName.values()) { -// int nameGroupSize = nameGroup.size(); -// -// // 合并tableName列(假设是第4列,根据实际Excel列调整) -// if (nameGroupSize > 1) { -// mergeInfos.add(ExcelExportUtil.createMergeStrategy(currentRow, currentRow + nameGroupSize - 1, 1, 1)); -// } -// -// // 移动到下一组 -// currentRow += nameGroupSize; -// } - } - - startRow += dateGroupSize; + currentRow += dateSize; } return mergeInfos; } - -} +} \ No newline at end of file From 77334e3e736eecd581af7c175e7de68ac0a29d24 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Sat, 31 Jan 2026 14:23:02 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E6=9A=82=E6=97=B6=E4=B8=8D=E7=94=A8?= =?UTF-8?q?=E5=8E=9F=E7=94=9F=E8=BF=9B=E4=BB=B6=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/czg/task/EntryManagerTask.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cash-api/order-server/src/main/java/com/czg/task/EntryManagerTask.java b/cash-api/order-server/src/main/java/com/czg/task/EntryManagerTask.java index 796f86f7f..f2f5411d9 100644 --- a/cash-api/order-server/src/main/java/com/czg/task/EntryManagerTask.java +++ b/cash-api/order-server/src/main/java/com/czg/task/EntryManagerTask.java @@ -14,7 +14,6 @@ import com.czg.service.order.service.ShopDirectMerchantService; import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; @@ -32,13 +31,15 @@ public class EntryManagerTask { @Resource private ShopMerchantService shopMerchantService; + + // TODO 暂时不用原生进件,使用第三方进件 //每10分钟查一次 - @Scheduled(cron = "0 0/10 * * * ? ") +// @Scheduled(cron = "0 0/10 * * * ? ") public void run() { - log.info("进件查询,定时任务执行"); - long start = System.currentTimeMillis(); - entryManager(null); - log.info("进件查询,定时任务执行完毕,耗时:{}ms", System.currentTimeMillis() - start); +// log.info("进件查询,定时任务执行"); +// long start = System.currentTimeMillis(); +// entryManager(null); +// log.info("进件查询,定时任务执行完毕,耗时:{}ms", System.currentTimeMillis() - start); } /** From 9c5b8ea53fd630059570b100cedb2f6b22b897dd Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Sat, 31 Jan 2026 14:37:03 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E5=88=86=E9=94=80=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/czg/account/entity/ShopUser.java | 19 ---- .../market/entity/MkDistributionInvite.java | 75 +++++++++++++ .../service/MkDistributionInviteService.java | 15 +++ .../main/resources/mapper/ShopUserMapper.xml | 21 ++-- .../mapper/MkDistributionInviteMapper.java | 14 +++ .../impl/MkDistributionInviteServiceImpl.java | 22 ++++ .../impl/MkDistributionUserServiceImpl.java | 103 ++++++++++-------- .../mapper/MkDistributionInviteMapper.xml | 7 ++ .../mapper/MkDistributionUserMapper.xml | 6 +- 9 files changed, 203 insertions(+), 79 deletions(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionInvite.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionInviteService.java create mode 100644 cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkDistributionInviteMapper.java create mode 100644 cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionInviteServiceImpl.java create mode 100644 cash-service/market-service/src/main/resources/mapper/MkDistributionInviteMapper.xml diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java index 1fb6dff35..9ee30362d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java @@ -1,6 +1,5 @@ package com.czg.account.entity; -import com.alibaba.fastjson2.annotation.JSONField; import com.czg.utils.CzgRandomUtils; import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; @@ -152,22 +151,6 @@ public class ShopUser implements Serializable { private LocalDateTime nextDeliverTime; // 是否分销员 private String distributionShops; - /** - * 上级分销员id - */ - private Long parentUserId; - /** - * 上上级分销员id - */ - private Long gradeUserId; - /** - * 一级分销收入 - */ - private BigDecimal oneIncome; - /** - * 二级分销收入 - */ - private BigDecimal twoIncome; private String memberCircleName; private Integer memberCircleReward; @@ -179,8 +162,6 @@ public class ShopUser implements Serializable { private Integer discount; @Column(ignore = true) private Integer isMemberPrice; - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime inviteTime; /** * 添加或更新分销店铺:若shopId已存在(无论后缀),则替换为新的id_后缀;否则插入 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionInvite.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionInvite.java new file mode 100644 index 000000000..c96824d36 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionInvite.java @@ -0,0 +1,75 @@ +package com.czg.market.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 全民股东邀请关系 实体类。 + * + * @author ww + * @since 2026-01-31 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("mk_distribution_invite") +public class MkDistributionInvite implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 店铺Id + */ + private Long shopId; + /** + * 用户Id + */ + private Long userId; + + /** + * 用户Id + */ + private Long shopUserId; + + /** + * 邀请人ID mk_distribution_user.id + */ + private Long parentUserId; + + /** + * 邀请人上级ID mk_distribution_user.id + */ + private Long gradeUserId; + + /** + * 一级分润 + */ + private BigDecimal oneIncome; + + /** + * 二级分润 + */ + private BigDecimal twoIncome; + + /** + * 邀请时间 + */ + private LocalDateTime inviteTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionInviteService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionInviteService.java new file mode 100644 index 000000000..e2cd1aaf3 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionInviteService.java @@ -0,0 +1,15 @@ +package com.czg.market.service; + +import com.mybatisflex.core.service.IService; +import com.czg.market.entity.MkDistributionInvite; + +/** + * 全民股东邀请关系 服务层。 + * + * @author ww + * @since 2026-01-31 + */ +public interface MkDistributionInviteService extends IService { + + MkDistributionInvite getByShopIdAndShopUserId(Long shopId, Long shopUserId); +} diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index 7bbf81fc6..7e195d2d6 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -18,7 +18,7 @@ and amount - #{money} >= 0 - update tb_shop_user + update mk_distribution_invite one_income = one_income + #{amount} @@ -27,7 +27,7 @@ two_income = two_income + #{amount} - where id = #{shopUserId} + where shop_user_id = #{shopUserId} and shop_id = #{shopId} @@ -256,10 +256,10 @@ diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkDistributionInviteMapper.java b/cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkDistributionInviteMapper.java new file mode 100644 index 000000000..606eb0b27 --- /dev/null +++ b/cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkDistributionInviteMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.market.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.market.entity.MkDistributionInvite; + +/** + * 全民股东邀请关系 映射层。 + * + * @author ww + * @since 2026-01-31 + */ +public interface MkDistributionInviteMapper extends BaseMapper { + +} diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionInviteServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionInviteServiceImpl.java new file mode 100644 index 000000000..b71e648b7 --- /dev/null +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionInviteServiceImpl.java @@ -0,0 +1,22 @@ +package com.czg.service.market.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.market.entity.MkDistributionInvite; +import com.czg.market.service.MkDistributionInviteService; +import com.czg.service.market.mapper.MkDistributionInviteMapper; +import org.springframework.stereotype.Service; + +/** + * 全民股东邀请关系 服务层实现。 + * + * @author ww + * @since 2026-01-31 + */ +@Service +public class MkDistributionInviteServiceImpl extends ServiceImpl implements MkDistributionInviteService{ + + @Override + public MkDistributionInvite getByShopIdAndShopUserId(Long shopId, Long shopUserId) { + return getOne(query().eq(MkDistributionInvite::getShopId, shopId).eq(MkDistributionInvite::getShopUserId, shopUserId)); + } +} diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java index 774f8feb0..0895e8b28 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java @@ -76,6 +76,8 @@ public class MkDistributionUserServiceImpl extends ServiceImpl + + + + diff --git a/cash-service/market-service/src/main/resources/mapper/MkDistributionUserMapper.xml b/cash-service/market-service/src/main/resources/mapper/MkDistributionUserMapper.xml index 70de08651..9c6d316c7 100644 --- a/cash-service/market-service/src/main/resources/mapper/MkDistributionUserMapper.xml +++ b/cash-service/market-service/src/main/resources/mapper/MkDistributionUserMapper.xml @@ -65,8 +65,10 @@ diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java index 0895e8b28..f365a2293 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java @@ -150,7 +150,7 @@ public class MkDistributionUserServiceImpl extends ServiceImpl Date: Sat, 31 Jan 2026 15:05:28 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E7=BA=A7=E5=85=B3?= =?UTF-8?q?=E7=B3=BB3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../market/service/impl/MkDistributionUserServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java index f365a2293..d4c3133b5 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java @@ -321,13 +321,13 @@ public class MkDistributionUserServiceImpl extends ServiceImpl Date: Sat, 31 Jan 2026 15:08:21 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E7=BA=A7=E5=85=B3?= =?UTF-8?q?=E7=B3=BB4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/service/market/service/impl/MkShareBaseServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShareBaseServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShareBaseServiceImpl.java index 6d774d416..989ea06eb 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShareBaseServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShareBaseServiceImpl.java @@ -62,7 +62,7 @@ public class MkShareBaseServiceImpl extends ServiceImpl distributionUserService.bindInviteUser(fromUserId, toUserId, shopId)); + FunUtils.safeRunVoid(() -> distributionUserService.bindInviteUser(fromUserId, toUserId, shopId), "shareClaim 绑定上下级"); } MkShareBase shareBase = getById(shopId); if (shareBase == null || !shareBase.getIsEnabled().equals(1) || StrUtil.isBlank(shareBase.getRewardSharePages())) { From d58b4d9aedfd7edd17d312326190d3ee58263189 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Sat, 31 Jan 2026 15:27:44 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E9=82=80=E8=AF=B7=E4=BA=BA=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/ShopUserMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index ffe1e4889..5f80a0a15 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -273,7 +273,7 @@ FROM mk_distribution_invite invite left join tb_shop_user u on invite.shop_user_id = u.id left join mk_distribution_user dist on invite.shop_user_id = dist.id - WHERE invite.`parent_user_id` = #{distributionUserId} + WHERE invite.`parent_user_id` = #{distributionUserId} and invite.shop_id = #{shopId} and dist.distribution_level_id = #{distributionLevelId} and invite.id = #{shopUserId} ORDER BY invite.`invite_time` DESC From 9a62fcaddfc67a3b4e157ddb536b1f2a001ef26c Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Sat, 31 Jan 2026 15:34:33 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E9=82=80=E8=AF=B7=E4=BA=BA=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account-service/src/main/resources/mapper/ShopUserMapper.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index 5f80a0a15..4f1f0857a 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -276,6 +276,7 @@ WHERE invite.`parent_user_id` = #{distributionUserId} and invite.shop_id = #{shopId} and dist.distribution_level_id = #{distributionLevelId} and invite.id = #{shopUserId} + GROUP BY invite.id ORDER BY invite.`invite_time` DESC From 0ebe2b1787cda25e7bca1e80bc16d3119f74c652 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Sat, 31 Jan 2026 15:39:55 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../market/service/impl/MkDistributionUserServiceImpl.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java index d4c3133b5..0c2ed1d7f 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java @@ -327,11 +327,8 @@ public class MkDistributionUserServiceImpl extends ServiceImpl Date: Sat, 31 Jan 2026 09:56:29 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E5=88=86=E9=94=80=E7=AD=89=E7=BA=A7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20=E4=BC=98=E6=83=A0=E5=88=B8=E8=8E=B7?= =?UTF-8?q?=E5=BE=97=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/MkDistributionLevelConfigDTO.java | 22 ++++++++----------- .../impl/MkShopCouponRecordServiceImpl.java | 4 +++- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkDistributionLevelConfigDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkDistributionLevelConfigDTO.java index 5e6bb20c2..51431d320 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkDistributionLevelConfigDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkDistributionLevelConfigDTO.java @@ -1,16 +1,17 @@ package com.czg.market.dto; -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import com.alibaba.fastjson2.annotation.JSONField; -import jakarta.validation.constraints.*; -import lombok.experimental.Accessors; -import java.io.Serial; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; /** * 分销员等级配置 实体类。 @@ -50,12 +51,7 @@ public class MkDistributionLevelConfigDTO implements Serializable { * 一级分销比例 */ @NotNull(message = "一级分销比例不为空") - private BigDecimal levelOneCommission; - - /** - * 二级分销比例 - */ - private BigDecimal levelTwoCommission; + private BigDecimal commission; } diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java index 1ffbcb1b1..dec262cbb 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java @@ -67,12 +67,14 @@ public class MkShopCouponRecordServiceImpl extends ServiceImpl TARGET_KEY = Arrays.asList("消费赠券", "充值赠券", "管理员赠送", "兑换码兑换", "群聊发放", "生日赠券", - "购买会员赠券", "短信发放", "公众号发放", "用户弹窗领取", "积分兑换"); + "购买会员赠券", "短信发放", "公众号发放", "用户弹窗领取", "积分兑换", "参与分享获得", "邀请获得"); private static final Map SOURCE_TO_CATEGORY = Map.ofEntries( Map.entry("用户弹窗领取", "用户领取"), Map.entry("兑换码兑换", "用户领取"), Map.entry("积分兑换", "用户领取"), + Map.entry("参与分享获得", "分享获得"), + Map.entry("邀请获得", "分享获得"), Map.entry("群聊发放", "群聊发放"), Map.entry("短信发放", "推广发放"), Map.entry("公众号发放", "推广发放"),