diff --git a/src/main/java/com/gxwebsoft/sdy/controller/SdyDealerOrderController.java b/src/main/java/com/gxwebsoft/sdy/controller/SdyDealerOrderController.java new file mode 100644 index 0000000..ca47b42 --- /dev/null +++ b/src/main/java/com/gxwebsoft/sdy/controller/SdyDealerOrderController.java @@ -0,0 +1,136 @@ +package com.gxwebsoft.sdy.controller; + +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.hutool.core.util.ObjectUtil; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.sdy.param.SdyDealerOrderImportParam; +import com.gxwebsoft.shop.entity.ShopDealerApply; +import com.gxwebsoft.shop.entity.ShopDealerOrder; +import com.gxwebsoft.shop.service.ShopDealerApplyService; +import com.gxwebsoft.shop.service.ShopDealerOrderService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 售电云分销订单控制器 + * + * @author 科技小王子 + * @since 2025-08-12 11:55:18 + */ +@Tag(name = "售电云分销订单管理") +@RestController +@RequestMapping("/api/sdy/sdy-dealer-order") +public class SdyDealerOrderController extends BaseController { + @Resource + private ShopDealerOrderService shopDealerOrderService; + @Resource + private ShopDealerApplyService shopDealerApplyService; + + /** + * excel批量导入售电云分销订单 + */ + @PreAuthorize("hasAuthority('shop:shopDealerOrder:save')") + @OperationLog + @Operation(summary = "批量导入售电云分销订单") + @Transactional(rollbackFor = {Exception.class}) + @PostMapping("/import") + public ApiResult> importBatch(MultipartFile file) { + ImportParams importParams = new ImportParams(); + try { + System.out.println("开始导入数据..."); + System.out.println("文件大小: " + (file != null ? file.getSize() : "null")); + + // 导入XLS文件的内容 + List list = ExcelImportUtil.importExcel(file.getInputStream(), SdyDealerOrderImportParam.class, importParams); + + // 打印导入的数据条数用于调试 + System.out.println("导入数据条数: " + (list != null ? list.size() : 0)); + + // 打印第一条数据用于调试 + if (list != null && !list.isEmpty()) { + SdyDealerOrderImportParam first = list.get(0); + System.out.println("第一条数据: " + first); + System.out.println("comments: " + first.getComments()); + System.out.println("userId: " + first.getUserId()); + System.out.println("orderId: " + first.getOrderId()); + } + + if (list == null || list.isEmpty()) { + return fail("未读取到任何数据,请检查Excel文件格式和数据行位置", null); + } + + int importedCount = 0; + + for (SdyDealerOrderImportParam d : list) { + // 检查是否已存在相同的记录(根据comments字段和未结算状态) + com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper queryWrapper = new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>(); + queryWrapper.eq(ShopDealerOrder::getComments, d.getComments()); // 使用comments字段 + queryWrapper.eq(ShopDealerOrder::getIsSettled, 0); // 未结算状态 + + if (shopDealerOrderService.count(queryWrapper) == 0) { + // 不存在相同记录,可以导入 + ShopDealerOrder item = new ShopDealerOrder(); + + // 手动映射字段 + item.setOrderId(d.getOrderId()); + item.setOrderPrice(d.getOrderPrice()); + item.setFirstUserId(d.getFirstUserId()); + item.setSecondUserId(d.getSecondUserId()); + item.setThirdUserId(d.getThirdUserId()); + item.setFirstMoney(d.getFirstMoney()); + item.setSecondMoney(d.getSecondMoney()); + item.setThirdMoney(d.getThirdMoney()); + item.setTenantId(d.getTenantId()); + item.setComments(d.getComments()); + item.setIsInvalid(1); + item.setIsSettled(0); // 新导入的数据设为未结算 + + // 查询绑定关系 + ShopDealerApply dealerApply = shopDealerApplyService.getByDealerNameRel(d.getComments()); + + // 已签约客户 + if(dealerApply != null){ + item.setIsInvalid(0); + item.setUserId(dealerApply.getUserId()); + item.setFirstUserId(dealerApply.getRefereeId()); + } + + System.out.println("准备导入数据: " + item); + if (ObjectUtil.isNotEmpty(item)) { + shopDealerOrderService.save(item); + importedCount++; + } + } else { + System.out.println("跳过重复数据: " + d.getComments()); + } + } + return success("成功导入" + importedCount + "条,重复或已存在" + (list.size() - importedCount) + "条", null); + } catch (Exception e) { + e.printStackTrace(); + return fail("导入失败: " + e.getMessage(), null); + } + } + + @PreAuthorize("hasAuthority('shop:shopDealerOrder:update')") + @OperationLog + @Operation(summary = "结算订单") + @PutMapping() + public ApiResult saveSettled(@RequestBody ShopDealerOrder shopDealerOrder) { + shopDealerOrder.setSettleTime(LocalDateTime.now()); + if (shopDealerOrderService.updateById(shopDealerOrder)) { + return success("结算成功"); + } + return fail("结算失败"); + } +} diff --git a/src/main/java/com/gxwebsoft/sdy/param/SdyDealerOrderImportParam.java b/src/main/java/com/gxwebsoft/sdy/param/SdyDealerOrderImportParam.java new file mode 100644 index 0000000..57314cd --- /dev/null +++ b/src/main/java/com/gxwebsoft/sdy/param/SdyDealerOrderImportParam.java @@ -0,0 +1,52 @@ +package com.gxwebsoft.sdy.param; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 售电云分销订单导入参数 + * + * @author 科技小王子 + * @since 2025-08-12 11:55:18 + */ +@Data +public class SdyDealerOrderImportParam implements Serializable { + private static final long serialVersionUID = 1L; + + @Excel(name = "用户ID") + private Integer userId; + + @Excel(name = "订单ID") + private Integer orderId; + + @Excel(name = "结算电量") + private BigDecimal orderPrice; + + @Excel(name = "一级分销商ID") + private Integer firstUserId; + + @Excel(name = "二级分销商ID") + private Integer secondUserId; + + @Excel(name = "三级分销商ID") + private Integer thirdUserId; + + @Excel(name = "一级佣金") + private BigDecimal firstMoney; + + @Excel(name = "二级佣金") + private BigDecimal secondMoney; + + @Excel(name = "三级佣金") + private BigDecimal thirdMoney; + + @Excel(name = "公司名称") + private String comments; + + @Excel(name = "租户ID") + private Integer tenantId; +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerOrderController.java b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerOrderController.java index 9356f7e..2ecc05e 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerOrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerOrderController.java @@ -1,19 +1,27 @@ package com.gxwebsoft.shop.controller; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.shop.service.ShopDealerOrderService; import com.gxwebsoft.shop.entity.ShopDealerOrder; import com.gxwebsoft.shop.param.ShopDealerOrderParam; +import com.gxwebsoft.shop.param.ShopDealerOrderImportParam; +import com.gxwebsoft.common.core.utils.JSONUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -126,4 +134,38 @@ public class ShopDealerOrderController extends BaseController { return fail("删除失败"); } + /** + * excel批量导入分销商订单记录表 + */ + @PreAuthorize("hasAuthority('shop:shopDealerOrder:save')") + @OperationLog + @Operation(summary = "批量导入分销商订单记录表") + @Transactional(rollbackFor = {Exception.class}) + @PostMapping("/import") + public ApiResult> importBatch(MultipartFile file) { + ImportParams importParams = new ImportParams(); + try { + + // 第三步:导入XLS文件的内容 + List list = ExcelImportUtil.importExcel(file.getInputStream(), ShopDealerOrderImportParam.class, importParams); + list.forEach(d -> { + ShopDealerOrder item = JSONUtil.parseObject(JSONUtil.toJSONString(d), ShopDealerOrder.class); + assert item != null; + if (ObjectUtil.isNotEmpty(item)) { + // 设置默认值 + if (item.getIsInvalid() == null) { + item.setIsInvalid(0); // 新导入的数据isInvalid设为0(未失效) + } + if (item.getIsSettled() == null) { + item.setIsSettled(0); // 新导入的数据isSettled设为0(未结算) + } + shopDealerOrderService.save(item); + } + }); + return success("成功导入" + list.size() + "条", null); + } catch (Exception e) { + e.printStackTrace(); + } + return fail("导入失败", null); + } } diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerOrder.java b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerOrder.java index 9157c32..d9b3d74 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerOrder.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerOrder.java @@ -2,6 +2,7 @@ package com.gxwebsoft.shop.entity; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; @@ -30,6 +31,10 @@ public class ShopDealerOrder implements Serializable { @Schema(description = "买家用户ID") private Integer userId; + @Schema(description = "买家用户昵称") + @TableField(exist = false) + private String nickname; + @Schema(description = "订单ID") private Integer orderId; @@ -39,12 +44,24 @@ public class ShopDealerOrder implements Serializable { @Schema(description = "分销商用户id(一级)") private Integer firstUserId; + @Schema(description = "分销商用户昵称(一级)") + @TableField(exist = false) + private String firstNickname; + @Schema(description = "分销商用户id(二级)") private Integer secondUserId; + @Schema(description = "分销商用户昵称(二级)") + @TableField(exist = false) + private String secondNickname; + @Schema(description = "分销商用户id(三级)") private Integer thirdUserId; + @Schema(description = "分销商用户昵称(三级)") + @TableField(exist = false) + private String thirdNickname; + @Schema(description = "分销佣金(一级)") private BigDecimal firstMoney; @@ -54,6 +71,14 @@ public class ShopDealerOrder implements Serializable { @Schema(description = "分销佣金(三级)") private BigDecimal thirdMoney; + @Schema(description = "佣金比例") + @TableField(exist = false) + private BigDecimal rate; + + @Schema(description = "单价") + @TableField(exist = false) + private BigDecimal price; + @Schema(description = "订单是否失效(0未失效 1已失效)") private Integer isInvalid; @@ -63,6 +88,9 @@ public class ShopDealerOrder implements Serializable { @Schema(description = "结算时间") private LocalDateTime settleTime; + @Schema(description = "备注") + private String comments; + @Schema(description = "商城ID") private Integer tenantId; diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerUser.java b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerUser.java index a90d0f1..99853a4 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerUser.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerUser.java @@ -50,6 +50,12 @@ public class ShopDealerUser implements Serializable { @Schema(description = "累积提现佣金") private BigDecimal totalMoney; + @Schema(description = "单价") + private BigDecimal price; + + @Schema(description = "佣金比例") + private BigDecimal rate; + @Schema(description = "推荐人用户ID") private Integer refereeId; diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml index 29b4b81..cbf1c3a 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml @@ -4,8 +4,13 @@ - SELECT a.* + SELECT a.*, b.nickname, c.nickname AS firstNickname, d.nickname AS secondNickname, e.nickname AS thirdNickname, f.rate, f.price FROM shop_dealer_order a + LEFT JOIN gxwebsoft_core.sys_user b ON a.user_id = b.user_id + LEFT JOIN gxwebsoft_core.sys_user c ON a.first_user_id = c.user_id + LEFT JOIN gxwebsoft_core.sys_user d ON a.second_user_id = d.user_id + LEFT JOIN gxwebsoft_core.sys_user e ON a.third_user_id = e.user_id + LEFT JOIN shop_dealer_user f ON a.user_id = f.user_id AND a.id = #{param.id} @@ -43,6 +48,9 @@ AND a.is_settled = #{param.isSettled} + + AND a.comments = #{param.comments} + AND a.settle_time = #{param.settleTime} diff --git a/src/main/java/com/gxwebsoft/shop/param/ShopDealerOrderParam.java b/src/main/java/com/gxwebsoft/shop/param/ShopDealerOrderParam.java index d631622..b5aca77 100644 --- a/src/main/java/com/gxwebsoft/shop/param/ShopDealerOrderParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/ShopDealerOrderParam.java @@ -74,4 +74,8 @@ public class ShopDealerOrderParam extends BaseParam { @QueryField(type = QueryType.EQ) private String settleTime; + @Schema(description = "备注") + @QueryField(type = QueryType.EQ) + private String comments; + } diff --git a/src/main/java/com/gxwebsoft/shop/param/ShopDealerUserParam.java b/src/main/java/com/gxwebsoft/shop/param/ShopDealerUserParam.java index 67aaa12..9953b1f 100644 --- a/src/main/java/com/gxwebsoft/shop/param/ShopDealerUserParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/ShopDealerUserParam.java @@ -55,6 +55,10 @@ public class ShopDealerUserParam extends BaseParam { @QueryField(type = QueryType.EQ) private BigDecimal totalMoney; + @Schema(description = "佣金比例") + @QueryField(type = QueryType.EQ) + private BigDecimal rate; + @Schema(description = "推荐人用户ID") @QueryField(type = QueryType.EQ) private Integer refereeId; diff --git a/src/main/java/com/gxwebsoft/shop/service/ShopDealerApplyService.java b/src/main/java/com/gxwebsoft/shop/service/ShopDealerApplyService.java index dd982d6..9ea4d40 100644 --- a/src/main/java/com/gxwebsoft/shop/service/ShopDealerApplyService.java +++ b/src/main/java/com/gxwebsoft/shop/service/ShopDealerApplyService.java @@ -40,4 +40,6 @@ public interface ShopDealerApplyService extends IService { ShopDealerApply getByIdRel(Integer applyId); ShopDealerApply getByUserIdRel(Integer userId); + + ShopDealerApply getByDealerNameRel(String dealerName); } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerApplyServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerApplyServiceImpl.java index 690e624..ab445bf 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerApplyServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerApplyServiceImpl.java @@ -51,4 +51,12 @@ public class ShopDealerApplyServiceImpl extends ServiceImpl