diff --git a/DB/2024-05-10_order.sql b/DB/2024-05-10_order.sql deleted file mode 100644 index e487269c..00000000 --- a/DB/2024-05-10_order.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `li_order` - ADD COLUMN `seller_remark` varchar(255) NULL COMMENT '商家订单备注' AFTER `remark`; \ No newline at end of file diff --git a/DB/2024-1-5.sql b/DB/2024-1-5.sql deleted file mode 100644 index 5fc249aa..00000000 --- a/DB/2024-1-5.sql +++ /dev/null @@ -1,10 +0,0 @@ - -/** - 交易唤醒表,增加交易流水详情 - */ -ALTER TABLE li_order_item ADD `is_refund` varchar(255) DEFAULT NULL COMMENT '是否退款'; - -/** - 交易表增加订单状态字段 - */ -ALTER TABLE li_order_item ADD `refund_price` decimal(10,2) DEFAULT NULL COMMENT '退款金额'; diff --git a/DB/2024-3-19.sql b/DB/2024-3-19.sql deleted file mode 100644 index ace617ac..00000000 --- a/DB/2024-3-19.sql +++ /dev/null @@ -1,20 +0,0 @@ - -/** - 文件表增加拥有者名称 - */ -ALTER TABLE li_file ADD `owner_name` varchar(255) DEFAULT NULL COMMENT '拥有者名称'; - -/** - 初始化文件拥有者名称 - */ -UPDATE li_file f JOIN li_store s ON f.owner_id = s.id - SET f.owner_name = s.store_name -WHERE user_enums = 'STORE'; - -UPDATE li_file f JOIN li_admin_user a ON f.owner_id = a.id - SET f.owner_name = a.nick_name -WHERE user_enums = 'MANAGER'; - -UPDATE li_file f JOIN li_member m ON f.owner_id = m.id - SET f.owner_name = m.nick_name -WHERE user_enums = 'MEMBER'; \ No newline at end of file diff --git a/DB/version4.3toMASTER.sql b/DB/version4.3toMASTER.sql index 91d0b3ef..5c0a79d1 100644 --- a/DB/version4.3toMASTER.sql +++ b/DB/version4.3toMASTER.sql @@ -119,3 +119,60 @@ SET b.kanjia_refund_settlement_price =IFNULL(( AND sf.create_time BETWEEN b.start_time AND b.end_time),0); + + +/** + 交易唤醒表,增加交易流水详情 + */ +ALTER TABLE li_order_item ADD `is_refund` varchar(255) DEFAULT NULL COMMENT '是否退款'; + +/** + 交易表增加订单状态字段 + */ +ALTER TABLE li_order_item ADD `refund_price` decimal(10,2) DEFAULT NULL COMMENT '退款金额'; + + + +/** + 文件表增加拥有者名称 + */ +ALTER TABLE li_file ADD `owner_name` varchar(255) DEFAULT NULL COMMENT '拥有者名称'; + +/** + 初始化文件拥有者名称 + */ +UPDATE li_file f JOIN li_store s ON f.owner_id = s.id + SET f.owner_name = s.store_name +WHERE user_enums = 'STORE'; + +UPDATE li_file f JOIN li_admin_user a ON f.owner_id = a.id + SET f.owner_name = a.nick_name +WHERE user_enums = 'MANAGER'; + +UPDATE li_file f JOIN li_member m ON f.owner_id = m.id + SET f.owner_name = m.nick_name +WHERE user_enums = 'MEMBER'; + +ALTER TABLE `li_order` + ADD COLUMN `seller_remark` varchar(255) NULL COMMENT '商家订单备注' AFTER `remark`; + + +ALTER TABLE `li_distribution_cash` + ADD COLUMN `name` varchar(255) NULL COMMENT '会员姓名'; +ALTER TABLE `li_distribution_cash` + ADD COLUMN `id_number` varchar(255) NULL COMMENT '身份证号' ; +ALTER TABLE `li_distribution_cash` + ADD COLUMN `settlement_bank_account_name` varchar(255) NULL COMMENT '结算银行开户行名称' ; +ALTER TABLE `li_distribution_cash` + ADD COLUMN `settlement_bank_account_num` varchar(255) NULL COMMENT '结算银行开户账号' ; +ALTER TABLE `li_distribution_cash` + ADD COLUMN `settlement_bank_branch_name` varchar(255) NULL COMMENT '结算银行开户支行名称' ; + +ALTER TABLE `li_distribution` ADD `distribution_order_price` decimal(10,2) DEFAULT NULL COMMENT '分销订单金额'; + +ALTER TABLE `li_distribution_order` ADD `refund_num` int DEFAULT NULL COMMENT '退款商品数量'; + +ALTER TABLE `li_store_flow` ADD `bill_time` datetime(6) DEFAULT NULL COMMENT '结算时间'; +ALTER TABLE `li_store_flow` ADD `full_refund` bit(1) DEFAULT NULL COMMENT '是否全部退款'; +ALTER TABLE `li_store_flow` ADD `profit_sharing_status` varchar(255) NULL COMMENT '分账状态'; +ALTER TABLE `li_store_flow` ADD `profit_sharing` varchar(255) NULL COMMENT '分账详情'; diff --git a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java index 10c050ba..d7cf46ca 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -27,7 +27,7 @@ import org.springframework.stereotype.Service; */ @Slf4j @Service -public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDayExecute, AfterSaleStatusChangeEvent { +public class DistributionOrderExecute implements OrderStatusChangeEvent, AfterSaleStatusChangeEvent { /** * 分销订单 @@ -35,10 +35,6 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa @Autowired private DistributionOrderService distributionOrderService; - @Autowired - private SettingService settingService; - - @Override public void orderChange(OrderMessage orderMessage) { @@ -62,21 +58,6 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa } } - @Override - public void execute() { - log.info("分销订单定时开始执行"); - //设置结算天数(解冻日期) - Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name()); - DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class); - //解冻时间 - DateTime dateTime = new DateTime(); - //当前时间-结算天数=最终结算时间 - dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); - //分销人员订单结算 - distributionOrderService.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name()); - - } - @Override public void afterSaleStatusChange(AfterSale afterSale) { if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { diff --git a/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java b/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java index deb3fa65..671cf54c 100644 --- a/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java @@ -8,6 +8,7 @@ import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.kit.Payment; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; @@ -30,6 +31,8 @@ public class PaymentExecute implements OrderStatusChangeEvent { */ @Autowired private OrderService orderService; + @Autowired + private StoreFlowService storeFlowService; @Override public void orderChange(OrderMessage orderMessage) { @@ -60,6 +63,8 @@ public class PaymentExecute implements OrderStatusChangeEvent { .refundReason("订单取消") .build(); payment.refund(refundLog); + + } } } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java deleted file mode 100644 index 958402db..00000000 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.lili.timetask.handler.impl.bill; - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.lili.modules.store.entity.dto.StoreSettlementDay; -import cn.lili.modules.store.service.BillService; -import cn.lili.modules.store.service.StoreDetailService; -import cn.lili.timetask.handler.EveryDayExecute; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * 店铺结算执行 - * - * @author Bulbasaur - * @since 2021/2/18 3:45 下午 - */ -@Component -public class BillExecute implements EveryDayExecute { - - /** - * 结算单 - */ - @Autowired - private BillService billService; - /** - * 店铺详情 - */ - @Autowired - private StoreDetailService storeDetailService; - - /** - * 1.查询今日待结算的商家 - * 2.查询商家上次结算日期,生成本次结算单 - * 3.记录商家结算日 - */ - @Override - public void execute() { - - //获取当前天数 - int day = DateUtil.date().dayOfMonth(); - - //获取待结算商家列表 - List storeList = storeDetailService.getSettlementStore(day); - - //获取当前时间 - DateTime endTime = DateUtil.date(); - //批量商家结算 - for (StoreSettlementDay storeSettlementDay : storeList) { - - //生成结算单 - billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime); - - //修改店铺结算时间 - storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime); - } - } -} diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index 1fc1e301..b7edf22a 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -18,6 +18,10 @@ import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.order.order.service.StoreFlowService; +import cn.lili.modules.store.entity.dto.StoreSettlementDay; +import cn.lili.modules.store.service.BillService; +import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.OrderSetting; import cn.lili.modules.system.entity.enums.SettingEnum; @@ -29,6 +33,7 @@ import java.util.List; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -65,6 +70,20 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { @Autowired private DistributionOrderService distributionOrderService; + @Autowired + private StoreFlowService storeFlowService; + + /** + * 结算单 + */ + @Autowired + private BillService billService; + /** + * 店铺详情 + */ + @Autowired + private StoreDetailService storeDetailService; + /** * 执行每日任务 */ @@ -102,6 +121,22 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { } catch (Exception e) { log.error(e.getMessage(), e); } + + //修改分账状态 + try { + storeFlowService.updateProfitSharingStatus(); + } catch (Exception e) { + log.error("修改分账状态失败", e); + } + + //生成店铺结算单 + try { + createBill(); + } catch (Exception e) { + log.error("生成店铺结算单", e); + } + + } /** @@ -186,8 +221,6 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { // List orderItems = orderItemService.waitOperationOrderItem(build); //关闭售后订单=未售后订单+小于订单关闭售后申请时间 orderItemService.expiredAfterSaleStatus(receiveTime); - //修改对应分销订单状态 - distributionOrderService.updateDistributionOrderStatus(); } @@ -225,4 +258,29 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { } + /** + * 1.查询今日待结算的商家 + * 2.查询商家上次结算日期,生成本次结算单 + * 3.记录商家结算日 + */ + private void createBill() { + //获取当前天数 + int day = DateUtil.date().dayOfMonth(); + + //获取待结算商家列表 + List storeList = storeDetailService.getSettlementStore(day); + + //获取当前时间 + DateTime endTime = DateUtil.date(); + //批量商家结算 + for (StoreSettlementDay storeSettlementDay : storeList) { + + //生成结算单 + billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime); + + //修改店铺结算时间 + storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime); + } + } + } diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 60e045eb..55d392a3 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -174,6 +174,7 @@ public enum ResultCode { DISTRIBUTION_RETREAT_ERROR(22004, "分销员清退失败"), DISTRIBUTION_CASH_NOT_EXIST(22005, "分销员提现记录不存在"), DISTRIBUTION_GOODS_DOUBLE(22006, "不能重复添加分销商品"), + DISTRIBUTION_EDIT_ERROR(22007, "修改分销员失败"), /** * 购物车 diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/Distribution.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/Distribution.java index 96599e32..3e13f78b 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/Distribution.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/Distribution.java @@ -36,6 +36,7 @@ public class Distribution extends BaseEntity { this.rebateTotal=0D; this.canRebate=0D; this.commissionFrozen=0D; + this.distributionOrderPrice=0D; this.distributionStatus = DistributionStatusEnum.APPLY.name(); BeanUtil.copyProperties(distributionApplyDTO, this); } @@ -85,4 +86,7 @@ public class Distribution extends BaseEntity { @ApiModelProperty(value = "结算银行开户支行名称") private String settlementBankBranchName; + @ApiModelProperty(value = "分销订单金额") + private Double distributionOrderPrice; + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java index e04a5ff6..0b1b05b7 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java @@ -9,9 +9,11 @@ import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; import org.springframework.data.annotation.CreatedDate; import org.springframework.format.annotation.DateTimeFormat; +import javax.validation.constraints.NotBlank; import java.util.Date; /** @@ -51,11 +53,30 @@ public class DistributionCash extends BaseEntity { @ApiModelProperty(value = "状态") private String distributionCashStatus; - public DistributionCash(String sn, String distributionId, Double price, String memberName) { + + + @ApiModelProperty(value = "会员姓名") + private String name; + @ApiModelProperty(value = "身份证号") + private String idNumber; + @ApiModelProperty(value = "结算银行开户行名称") + private String settlementBankAccountName; + @ApiModelProperty(value = "结算银行开户账号") + private String settlementBankAccountNum; + @ApiModelProperty(value = "结算银行开户支行名称") + private String settlementBankBranchName; + + public DistributionCash(String sn,Double price, Distribution distribution) { this.sn = sn; - this.distributionId = distributionId; + this.distributionId = distribution.getId(); this.price = price; this.distributionCashStatus = WithdrawStatusEnum.APPLY.name(); - this.distributionName = memberName; + this.distributionName = distribution.getMemberName(); + + this.name = distribution.getName(); + this.idNumber = distribution.getIdNumber(); + this.settlementBankAccountName = distribution.getSettlementBankAccountName(); + this.settlementBankAccountNum = distribution.getSettlementBankAccountNum(); + this.settlementBankBranchName = distribution.getSettlementBankBranchName(); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java index f29b9987..cf55f96b 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java @@ -79,6 +79,8 @@ public class DistributionOrder extends BaseIdEntity { private String image; @ApiModelProperty(value = "商品数量") private Integer num; + @ApiModelProperty(value = "退款商品数量") + private Integer refundNum; public DistributionOrder(StoreFlow storeFlow) { distributionOrderStatus = DistributionOrderStatusEnum.NO_COMPLETED.name(); @@ -95,6 +97,8 @@ public class DistributionOrder extends BaseIdEntity { specs = storeFlow.getSpecs(); image = storeFlow.getImage(); num = storeFlow.getNum(); + refundNum=0; + sellBackRebate=0D; } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java b/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java index 240b9752..6bdd19b9 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java @@ -6,16 +6,10 @@ package cn.lili.modules.distribution.entity.enums; * @author pikachu */ public enum DistributionOrderStatusEnum { - //未完成 + NO_COMPLETED("未完成"), - //待结算(冻结) - WAIT_BILL("待结算"), - //待提现 - WAIT_CASH("待提现"), - //已提现 - COMPLETE_CASH("提现完成"), - //订单取消 - CANCEL("订单取消"), + //完成 + COMPLETE("完成"), //订单取消 REFUND("退款"); diff --git a/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionMapper.java b/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionMapper.java index d8ceab1c..1619786b 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionMapper.java +++ b/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionMapper.java @@ -13,25 +13,32 @@ import org.apache.ibatis.annotations.Update; */ public interface DistributionMapper extends BaseMapper { - /** - * 修改分销员可提现金额 - * - * @param commissionFrozen 分销金额 - * @param distributionId 分销员ID - */ - @Update("UPDATE li_distribution set commission_frozen = (IFNULL(commission_frozen,0)+#{commissionFrozen}) " + - ", rebate_total=(IFNULL(rebate_total,0)+#{commissionFrozen}) WHERE id = #{distributionId}") - void subCanRebate(Double commissionFrozen, String distributionId); + @Update("UPDATE li_distribution set commission_frozen = (IFNULL(commission_frozen,0) - #{commissionFrozen}) " + + ", rebate_total=(IFNULL(rebate_total,0) - #{commissionFrozen}) " + + ", distribution_order_count=(IFNULL(distribution_order_count,0)-1) " + + " WHERE id = #{distributionId}") + void subRebate(Double commissionFrozen, String distributionId, Double distributionOrderPrice); - /** - * 添加分销金额 - * - * @param commissionFrozen 分销金额 - * @param distributionId 分销员ID - */ @Update("UPDATE li_distribution set commission_frozen = (IFNULL(commission_frozen,0)+#{commissionFrozen}) " + ", rebate_total=(IFNULL(rebate_total,0)+#{commissionFrozen}) " + - ", distribution_order_count=(IFNULL(distribution_order_count,0)+1) WHERE id = #{distributionId}") - void addCanRebate(Double commissionFrozen, String distributionId); + ", distribution_order_price=(IFNULL(distribution_order_price,0)+#{distributionOrderPrice}) " + + ", distribution_order_count=(IFNULL(distribution_order_count,0)+1) " + + " WHERE id = #{distributionId}") + void addRebate(Double commissionFrozen, String distributionId, Double distributionOrderPrice); + + + @Update("UPDATE li_distribution SET commission_frozen = (IFNULL(commission_frozen,0) - #{rebate}) " + + ",can_rebate=(IFNULL(can_rebate,0) + #{rebate}) " + + " WHERE id = #{distributionId}") + void addCanRebate(Double rebate, String distributionId); + + @Update("UPDATE li_distribution SET can_rebate=(IFNULL(can_rebate,0) - #{rebate}),cash_rebate=(IFNULL(cash_rebate,0) + #{rebate}) " + + " WHERE id = #{distributionId}") + void addCashRebate(Double rebate, String distributionId); + + + @Update("UPDATE li_distribution SET cash_rebate=(IFNULL(cash_rebate,0) - #{rebate}) " + + " WHERE id = #{distributionId}") + void subCashRebate(Double rebate, String distributionId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java index 2a107b9f..6a46585c 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java @@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; +import javax.servlet.http.HttpServletResponse; + /** * 分销佣金业务层 * @@ -40,6 +42,9 @@ public interface DistributionCashService extends IService { */ IPage getDistributionCash(DistributionCashSearchParams distributionCashSearchParams); + + void queryExport(HttpServletResponse response,DistributionCashSearchParams distributionCashSearchParams); + /** * 审核分销提现申请 * diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java index 634c8b4f..91d25dce 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java @@ -5,6 +5,7 @@ import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.OrderItem; +import cn.lili.modules.order.order.entity.dos.StoreFlow; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -49,14 +50,8 @@ public interface DistributionOrderService extends IService { void refundOrder(AfterSale afterSale); /** - * 分销订单状态修改 + * 分销订单完成 */ - void updateDistributionOrderStatus(); + void completeOrder(StoreFlow storeFlow); - /** - * 分销订单结算 - * @param dateTime - * @param distributionOrderStatus - */ - void updateRebate(DateTime dateTime, String distributionOrderStatus); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionService.java index 8b42b066..068192c1 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionService.java @@ -78,18 +78,42 @@ public interface DistributionService extends IService { void checkDistributionSetting(); /** - * 修改可提现金额 - * - * @param canRebate 修改金额 - * @param distributionId 分销员ID - */ - void subCanRebate(Double canRebate, String distributionId); - - /** - * 添加分销金额 + * 添加分销冻结金额 + * 创建分销订单时进行调用 * * @param rebate 金额 * @param distributionId 分销员ID + * @param distributionOrderPrice 分销订单金额 */ - void addRebate(Double rebate, String distributionId); + void addRebate(Double rebate, String distributionId, Double distributionOrderPrice); + + /** + * 扣减分销冻结金额 + * 订单取消/退款时进行调用 + * + * @param rebate 佣金 + * @param distributionId 分销员ID + */ + void subRebate(Double rebate, String distributionId, Double distributionOrderPrice); + + /** + * 添加分销可提现金额 + * 订单完成时进行调用 + * @param rebate 佣金 + * @param distributionId 分销员ID + */ + void addCanRebate(Double rebate, String distributionId); + + /** + * 添加提现金额 + * @param rebate + * @param distributionId + */ + void addCashRebate(Double rebate, String distributionId); + /** + * 扣减提现金额 + * @param rebate + * @param distributionId + */ + void subCashRebate(Double rebate, String distributionId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java index 51701d09..2be99f29 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java @@ -1,5 +1,12 @@ package cn.lili.modules.distribution.serviceimpl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import cn.lili.common.context.ThreadContextHolder; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; @@ -13,6 +20,14 @@ import cn.lili.modules.distribution.entity.vos.DistributionCashSearchParams; import cn.lili.modules.distribution.mapper.DistributionCashMapper; import cn.lili.modules.distribution.service.DistributionCashService; import cn.lili.modules.distribution.service.DistributionService; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; +import cn.lili.modules.order.order.entity.dto.OrderExportDetailDTO; +import cn.lili.modules.order.order.entity.dto.OrderSearchParams; +import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; +import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; +import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; @@ -25,12 +40,23 @@ import cn.lili.rocketmq.tags.MemberTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** @@ -76,7 +102,7 @@ public class DistributionCashServiceImpl extends ServiceImpl distributionCashList) { + + XSSFWorkbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("订单列表"); + + // 创建表头 + Row header = sheet.createRow(0); + String[] headers = {"编号", "姓名", "身份证号", "结算银行开户行名称", "结算银行开户账号", "结算银行开户支行名称"}; + + for (int i = 0; i < headers.length; i++) { + Cell cell = header.createCell(i); + cell.setCellValue(headers[i]); + } + // 填充数据 + for (int i = 0; i < distributionCashList.size(); i++) { + DistributionCash distributionCash = distributionCashList.get(i); + Row row = sheet.createRow(i + 1); + row.createCell(0).setCellValue(distributionCash.getSn()); + row.createCell(1).setCellValue(distributionCash.getName()); + row.createCell(2).setCellValue(distributionCash.getIdNumber()); + row.createCell(3).setCellValue(distributionCash.getSettlementBankAccountName()); + row.createCell(4).setCellValue(distributionCash.getSettlementBankAccountNum()); + row.createCell(5).setCellValue(distributionCash.getSettlementBankBranchName()); + } + return workbook; + } + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java index b6211b02..95786308 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java @@ -1,15 +1,10 @@ package cn.lili.modules.distribution.serviceimpl; -import cn.hutool.core.date.DateField; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.distribution.entity.dos.Distribution; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; -import cn.lili.modules.distribution.entity.enums.DistributionStatusEnum; import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams; import cn.lili.modules.distribution.mapper.DistributionOrderMapper; import cn.lili.modules.distribution.service.DistributionOrderService; @@ -17,29 +12,26 @@ import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.order.order.entity.dto.StoreFlowProfitSharingDTO; import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; +import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; -import cn.lili.modules.system.entity.dos.Setting; -import cn.lili.modules.system.entity.dto.DistributionSetting; -import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Date; +import java.util.List; + /** * 分销订单接口实现 * @@ -49,7 +41,7 @@ import org.springframework.transaction.annotation.Transactional; @Slf4j @Service public class DistributionOrderServiceImpl extends ServiceImpl - implements DistributionOrderService { + implements DistributionOrderService { /** * 订单 @@ -66,22 +58,19 @@ public class DistributionOrderServiceImpl extends ServiceImpl getDistributionOrderPage( - DistributionOrderSearchParams distributionOrderSearchParams) { + DistributionOrderSearchParams distributionOrderSearchParams) { return this.page(PageUtil.initPage(distributionOrderSearchParams), - distributionOrderSearchParams.queryWrapper()); + distributionOrderSearchParams.queryWrapper()); } /** - * 1.查看订单是否为分销订单 2.查看店铺流水计算分销总佣金 3.修改分销员的分销总金额、冻结金额 + * 1.查看订单是否为分销订单 + * 2.查看店铺流水计算分销总佣金 + * 3.修改分销员的分销总金额、冻结金额 * * @param orderSn 订单编号 */ @@ -96,7 +85,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl storeFlowList = storeFlowService.listStoreFlow( - StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build()); + StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build()); double rebate = 0.0; //循环店铺流水记录判断是否包含分销商品 //包含分销商品则进行记录分销订单、计算分销总额 @@ -111,27 +100,12 @@ public class DistributionOrderServiceImpl extends ServiceImpl distributionOrderList = - this.list(new LambdaQueryWrapper().eq(DistributionOrder::getOrderSn, orderSn)); + this.list(new LambdaQueryWrapper().eq(DistributionOrder::getOrderSn, orderSn)); //如果没有分销定单,则直接返回 if (distributionOrderList.isEmpty()) { return; } - //分销金额 - double rebate = 0.0; //包含分销商品则进行记录分销订单、计算分销总额 for (DistributionOrder distributionOrder : distributionOrderList) { - rebate = CurrencyUtil.add(rebate, distributionOrder.getRebate()); - } - - //如果包含分销商品则记录会员的分销总额 - if (rebate != 0.0) { - distributionService.subCanRebate(CurrencyUtil.sub(0, rebate), order.getDistributionId()); + distributionService.subRebate(distributionOrder.getRebate(), order.getDistributionId(), distributionOrder.getSellBackRebate()); } } //修改分销订单的状态 this.update(new LambdaUpdateWrapper().eq(DistributionOrder::getOrderSn, orderSn) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); + .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.REFUND.name())); } - @Override public void refundOrder(AfterSale afterSale) { //判断是否为分销订单 StoreFlow refundStoreFlow = storeFlowService.queryOne( - StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSale.getSn()).build()); + StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSale.getSn()).build()); if (refundStoreFlow != null) { //获取收款分销订单 DistributionOrder distributionOrder = this.getOne( - new LambdaQueryWrapper().eq(DistributionOrder::getOrderItemSn, - afterSale.getOrderItemSn())); + new LambdaQueryWrapper().eq(DistributionOrder::getOrderItemSn, + afterSale.getOrderItemSn())); //分销订单不存在,则直接返回 if (distributionOrder == null) { return; @@ -199,114 +165,40 @@ public class DistributionOrderServiceImpl extends ServiceImpl().eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn())); + //解冻分销金额 + distributionService.addCanRebate(storeFlowProfitSharingDTO.getDistributionPrice(), distributionOrder.getDistributionId()); + // 订单完成 + this.update(new LambdaUpdateWrapper() + .eq(DistributionOrder::getId, distributionOrder.getId()) + .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.COMPLETE.name())); + } } - @Override - public void updateRebate(DateTime dateTime, String distributionOrderStatus) { - //结算时间延后五分钟 - dateTime = dateTime.offsetNew(DateField.MINUTE, 5); - //获取待结算订单 - List distributionOrderList = this.list( - new LambdaQueryWrapper().eq(DistributionOrder::getDistributionOrderStatus, - distributionOrderStatus).isNotNull(DistributionOrder::getSettleCycle) - .le(DistributionOrder::getSettleCycle, dateTime)); - //校验待结算订单 - if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) { - //结算分销人员信息列表 - List distributionUpdateList = new ArrayList<>(); - //获取分销员信息 - List distributionList = distributionService.list( - new LambdaQueryWrapper().eq(Distribution::getDistributionStatus, - DistributionStatusEnum.PASS.name())); - //根据销人员获取对应分销订单 - Map> distributionOrderList1 = - distributionOrderList.stream().collect(Collectors.groupingBy(DistributionOrder::getDistributionId)); - //校验分销订单不为空 - if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) { - //遍历分销订单map - distributionOrderList1.forEach((key, value) -> { - //计算分销结算金额 - distributionUpdateList.add(checkDistribution(key, value, distributionList)); - }); - } - - //校验分销信息列表不为空 - if (ObjectUtil.isNotNull(distributionUpdateList) && !distributionUpdateList.isEmpty()) { - //修改分销员收益 - distributionService.updateBatchById(distributionUpdateList); - distributionOrderList.stream().forEach(distributionOrder -> { - //修改分销订单状态为待提现 - distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_CASH.name()); - }); - } - - //修改分销订单状态 - this.updateBatchById(distributionOrderList); - } - - } - - /** - * 计算分销结算金额 - * - * @param distributionId 分销ID - * @param list 分销订单 - * @param distributionList 分销列表 - * @return - */ - public Distribution checkDistribution(String distributionId, List list, - List distributionList) { - //获取所有待结算订单分销人员信息 - Distribution distribution = - distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId)) - .collect(Collectors.toList()).get(0); - - //获取分销订单总金额 - double rebate = list.stream().mapToDouble(DistributionOrder::getRebate).sum(); - - //检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算 - if (distribution.getCommissionFrozen() < 0) { - rebate = - CurrencyUtil.add(distribution.getCommissionFrozen() == null ? 0.0 : distribution.getCommissionFrozen(), - rebate); - } - //结算订单总金额+分销可提现金额 - Double canRebate = - CurrencyUtil.add(rebate, distribution.getCanRebate() == null ? 0.0 : distribution.getCanRebate()); - //结算金额小于0 - if (canRebate < 0) { - //结算订单总金额+分销可提现金额 - distribution.setCanRebate(0.0); - //冻结金额 - distribution.setCommissionFrozen(canRebate); - } else { - //结算订单总金额+分销可提现金额 - distribution.setCanRebate(canRebate); - //冻结金额 - distribution.setCommissionFrozen(0.0); - } - - return distribution; - } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java index 488f7f4f..fef1e761 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java @@ -90,7 +90,7 @@ public class DistributionServiceImpl extends ServiceImpl getAfterSalePages(AfterSaleSearchParams saleSearchParams) { @@ -580,11 +586,10 @@ public class AfterSaleServiceImpl extends ServiceImpl