From 37c33336651f082d70840f62835435d26bf53f0a Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Wed, 9 Apr 2025 14:41:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AD=97=E6=AE=B5=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/modules/merch/ShopMerchEntry.java | 3 +- .../common/modules/order/ShopOrderData.java | 3 ++ .../modules/order/dto/MchOrderInfoDTO.java | 8 +++- .../common/modules/store/ShopStoreBase.java | 5 ++ .../suisung/mall/common/utils/CommonUtil.java | 32 +++++++++---- .../service/ShopBaseStoreCategoryService.java | 9 ++++ .../ShopBaseStoreCategoryServiceImpl.java | 27 +++++++++++ .../impl/ShopOrderBaseServiceImpl.java | 25 +++++++++- .../store/service/ShopStoreBaseService.java | 11 +++++ .../impl/ShopMerchEntryServiceImpl.java | 6 +++ .../impl/ShopStoreBaseServiceImpl.java | 47 ++++++++++++++++++- .../impl/ShopStorePrinterServiceImpl.java | 4 -- .../mapper/order/ShopOrderBaseMapper.xml | 5 ++ .../mapper/order/ShopOrderDataMapper.xml | 4 +- .../mapper/store/ShopStoreBaseMapper.xml | 9 ++-- 15 files changed, 174 insertions(+), 24 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/merch/ShopMerchEntry.java b/mall-common/src/main/java/com/suisung/mall/common/modules/merch/ShopMerchEntry.java index 9fd930cc..8dce3616 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/merch/ShopMerchEntry.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/merch/ShopMerchEntry.java @@ -18,6 +18,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @Data @@ -51,7 +52,7 @@ public class ShopMerchEntry implements Serializable { private Integer biz_second_category; @ApiModelProperty(value = "除去运费的商家分成比列,如:95.00,最大100,最小0") - private String split_ratio; + private BigDecimal split_ratio; @ApiModelProperty(value = "分账到账方式:1-T+0;2-T+1,3-T+3...") private Integer settlement_method; diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java index 0bc3fffc..3ad82ab4 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java @@ -92,6 +92,9 @@ public class ShopOrderData implements Serializable { @ApiModelProperty(value = "实际运费金额-卖家可修改") private BigDecimal order_shipping_fee; + @ApiModelProperty(value = "平台费(分给平台或代理商的费用),根据不同的店铺分类,从商品原价中扣除相应的费用。") + private BigDecimal platform_fee; + @ApiModelProperty(value = "代金券id/优惠券/返现:发放选择使用") private Integer voucher_id; diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java index 437bbd2b..195e15fc 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java @@ -49,7 +49,9 @@ public class MchOrderInfoDTO implements Serializable { @ApiModelProperty(value = "订单标题") private String order_title; @ApiModelProperty(value = "同城配送取单号") - private String order_pickup_num; + private Long order_pickup_num; + @ApiModelProperty(value = "同城配送取单号字符串方式") + private String order_pickup_num_str; @ApiModelProperty(value = "下单时间") private Date order_time; @ApiModelProperty(value = "支付时间") @@ -68,6 +70,10 @@ public class MchOrderInfoDTO implements Serializable { private Integer delivery_type_id; @ApiModelProperty(value = "订单运费") private BigDecimal order_shipping_fee; + @ApiModelProperty(value = "平台费") + private BigDecimal platform_fee; + @ApiModelProperty(value = "优惠、折扣、活动费用") + private BigDecimal order_discount_amount; @ApiModelProperty(value = "两点距离,单位米") private Integer distance; diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java index 7189bf6d..f793071e 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java @@ -12,6 +12,7 @@ import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -122,4 +123,8 @@ public class ShopStoreBase implements Serializable { @ApiModelProperty(value = "微信小程序二维码图片路径") private String wx_qrcode; + + @ApiModelProperty(value = "店铺分账比例数值 0.00-100.00 范围内,数值根据店铺分类计算得出,也可以超管指定一个数值。") + private BigDecimal split_ratio; + } diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java index c3b754c3..30311956 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java @@ -4,11 +4,14 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.suisung.mall.common.api.StateCode; import com.suisung.mall.common.exception.ApiException; +import org.apache.commons.codec.binary.Base64; import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.*; @@ -16,8 +19,6 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; -import org.apache.commons.codec.binary.Base64; -import org.springframework.util.StringUtils; /** * 常用工具方法 @@ -154,7 +155,7 @@ public class CommonUtil { * @return */ public static BigDecimal DecimalRoundHalfUp(BigDecimal d) { - return d.setScale(0, BigDecimal.ROUND_HALF_UP); + return d.setScale(0, RoundingMode.HALF_UP); } @@ -236,6 +237,7 @@ public class CommonUtil { /** * 生成 md 摘要通用签名(参考了顺丰同城的做法) * 参考:https://openic.sf-express.com/#/quickstart + * * @param postData * @param appId * @param appKey @@ -244,14 +246,14 @@ public class CommonUtil { public static String generateOpenSign(String postData, String appId, String appKey) { try { - if (StrUtil.isBlank(postData)|| StrUtil.isBlank(appId)|| StrUtil.isBlank(appKey)) { + if (StrUtil.isBlank(postData) || StrUtil.isBlank(appId) || StrUtil.isBlank(appKey)) { logger.error("生成签名时缺少必要参数!"); return Strings.EMPTY; } - StringBuilder sb = new StringBuilder(postData).append("&").append(appId).append("&").append(appKey); + String sb = postData + "&" + appId + "&" + appKey; MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] md5 = md.digest(sb.toString().getBytes(StandardCharsets.UTF_8)); + byte[] md5 = md.digest(sb.getBytes(StandardCharsets.UTF_8)); int i; StringBuffer buf = new StringBuffer(); for (byte b : md5) { @@ -274,6 +276,7 @@ public class CommonUtil { /** * 验证MD5摘要签名 + * * @param sign * @param postData * @param appId @@ -281,13 +284,13 @@ public class CommonUtil { * @return */ public static boolean checkOpenSign(String sign, String postData, String appId, String appKey) { - if (StrUtil.isBlank(sign) || StrUtil.isBlank(postData)|| StrUtil.isBlank(appId)|| StrUtil.isBlank(appKey)) { + if (StrUtil.isBlank(sign) || StrUtil.isBlank(postData) || StrUtil.isBlank(appId) || StrUtil.isBlank(appKey)) { logger.error("验签时缺少必要参数!"); return false; } String sn = generateOpenSign(postData, appId, appKey); - if(StringUtils.isEmpty(sn)){ + if (StringUtils.isEmpty(sn)) { logger.error("签名无效!"); return false; } @@ -295,5 +298,18 @@ public class CommonUtil { return sign.equals(sn); } + /** + * 检查分账比例的数值是否在 0.00-100.00 范围内 + * + * @param splitRatio + * @return + */ + public static boolean checkSplitRatio(BigDecimal splitRatio) { + if (splitRatio == null) { + return false; + } + return splitRatio.compareTo(BigDecimal.ZERO) >= 0 && splitRatio.compareTo(new BigDecimal(100)) <= 0; + } + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseStoreCategoryService.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseStoreCategoryService.java index 6491130e..7a14306d 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseStoreCategoryService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseStoreCategoryService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.suisung.mall.common.modules.base.ShopBaseStoreCategory; import com.suisung.mall.core.web.service.IBaseService; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -30,4 +31,12 @@ public interface ShopBaseStoreCategoryService extends IBaseService selectParentListWithChildren(String keyword); + /** + * 获取店铺分类的分账比例数值 + * + * @param storeCategoryId + * @return + */ + BigDecimal getStoreCategoryRatio(Integer storeCategoryId); + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java index 9fc078db..348a1dfd 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java @@ -2,14 +2,17 @@ package com.suisung.mall.shop.base.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.suisung.mall.common.modules.base.ShopBaseStoreCategory; +import com.suisung.mall.common.utils.CommonUtil; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.base.mapper.ShopBaseStoreCategoryMapper; import com.suisung.mall.shop.base.service.ShopBaseStoreCategoryService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -107,4 +110,28 @@ public class ShopBaseStoreCategoryServiceImpl extends BaseServiceImpl 9999999) { + return String.valueOf(pickNum); + } + + return String.format("%07d", pickNum); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java index 3362cb99..47ac019b 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java @@ -12,6 +12,7 @@ import com.suisung.mall.core.web.service.IBaseService; import org.springframework.data.util.Pair; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -160,4 +161,14 @@ public interface ShopStoreBaseService extends IBaseService { * @return */ Boolean updateStoreBaseQrCode(Integer storeId, String wxQrCode); + + /** + * 获取店铺的平台分账比例 + * 根据店铺的大分、小分类、来计算分账比例 + * + * @param storeId + * @param reCalculate 是否根据店铺的分类来重新计算 + * @return 平台分账比例的数值 + */ + BigDecimal getStorePlatformRatio(Integer storeId, boolean reCalculate); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java index bc5c4e99..c60ebb8c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java @@ -25,6 +25,7 @@ import com.suisung.mall.common.utils.StringUtils; import com.suisung.mall.common.utils.phone.PhoneNumberUtils; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.base.service.AccountBaseConfigService; +import com.suisung.mall.shop.base.service.ShopBaseStoreCategoryService; import com.suisung.mall.shop.components.TaskService; import com.suisung.mall.shop.esign.service.EsignContractFillingFileService; import com.suisung.mall.shop.esign.service.EsignContractService; @@ -72,6 +73,9 @@ public class ShopMerchEntryServiceImpl extends BaseServiceImpl districtList = shopBaseDistrictService.getFullDistrictByDistrictCode(shopMerchEntry.getCounty_id()); shopStoreBase.setStore_district_id(shopBaseDistrictService.joinDistrict(districtList, 1, true, "/")); @@ -3420,6 +3422,49 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); diff --git a/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml b/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml index ccf371b2..70aef115 100644 --- a/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml +++ b/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml @@ -553,6 +553,9 @@ + + + @@ -640,6 +643,8 @@ AS is_new_buyer, oi.payment_time, od.order_shipping_fee, + od.order_discount_amount, + od.platform_fee, od.order_message, sb.store_id, sb.store_name, diff --git a/mall-shop/src/main/resources/mapper/order/ShopOrderDataMapper.xml b/mall-shop/src/main/resources/mapper/order/ShopOrderDataMapper.xml index 84848670..ae9d73b0 100644 --- a/mall-shop/src/main/resources/mapper/order/ShopOrderDataMapper.xml +++ b/mall-shop/src/main/resources/mapper/order/ShopOrderDataMapper.xml @@ -1,14 +1,13 @@ - order_id , order_desc, order_delay_time, delivery_type_id, delivery_time_id, delivery_time, delivery_time_rang, delivery_time_h, delivery_time_i, delivery_istimer, invoice_type_id, invoice_company_code, order_invoice_title, order_message, order_item_amount, order_discount_amount, order_adjust_fee, order_points_fee, - order_shipping_fee_amount, order_shipping_fee, voucher_id, voucher_number, voucher_price, redpacket_id, + order_shipping_fee_amount, order_shipping_fee, platform_fee, voucher_id, voucher_number, voucher_price, redpacket_id, redpacket_number, redpacket_price, order_redpacket_price, order_resource_ext1, order_resource_ext2, order_resource_ext3, trade_payment_money, trade_payment_recharge_card, trade_payment_credit, order_refund_status, order_refund_amount, order_refund_agree_amount, order_return_status, order_return_num, @@ -16,5 +15,4 @@ order_cancel_identity, order_cancel_reason, order_cancel_time, order_bp_add, order_rebate, buyer_mobile, order_heka - diff --git a/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml b/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml index bbeeda6a..82a18495 100644 --- a/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml +++ b/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml @@ -1,15 +1,16 @@ - store_id , user_id, store_name, store_grade_id, store_logo, store_slogan, store_domain, store_area, store_district_id, store_address, store_latitude, store_longitude, store_is_selfsupport, store_type, store_is_open, shop_parent_id, store_category_id, store_state_id, store_time, store_end_time, product_category_ids, store_o2o_tags, - store_o2o_flag, store_o2o_merchant_id, store_circle, subsite_id, lkl_merchant_no, lkl_term_no + store_o2o_flag, store_o2o_merchant_id, store_circle, subsite_id, lkl_merchant_no, lkl_term_no, wx_qrcode, + split_ratio + -