diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index 4abdb75e..342a6b38 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -2786,7 +2786,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl smsArgs = new HashMap<>(); smsArgs.put("password", user_password); diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderBuyerDTO.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderBuyerDTO.java index a6010186..cf6af5a5 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderBuyerDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderBuyerDTO.java @@ -30,6 +30,9 @@ public class MchOrderBuyerDTO implements Serializable { @ApiModelProperty(value = "买家编号") private Integer buyer_user_id; + @ApiModelProperty(value = "是否为新买家:1-是;2-否") + private Integer is_new_buyer; + @ApiModelProperty(value = "买家姓名") private String da_name; diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/BankUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/BankUtil.java new file mode 100644 index 00000000..59926d11 --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/BankUtil.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.common.utils; + +import cn.hutool.core.util.StrUtil; + +/** + * 中国银行相关工具类 + */ +public class BankUtil { + public static void main(String[] args) { + String mainlandAccount = "6217680389311429"; + String hongKongAccount = "00100212345678901"; + String macauAccount = "0102123456789012"; + String taiwanAccount = "00100021234567890"; + + System.out.println("内地账号是否有效: " + isValidZHCNBankAccount(mainlandAccount)); + System.out.println("香港账号是否有效: " + isValidZHHKBankAccount(hongKongAccount)); + System.out.println("澳门账号是否有效: " + isValidZHMOBankAccount(macauAccount)); + System.out.println("台湾账号是否有效: " + isValidZHTWBankAccount(taiwanAccount)); + + System.out.println("账号是否有效: " + isValidZHBankAccount(mainlandAccount)); + } + + // 校验中国银行账号的 Luhn 算法 + public static boolean isValidZHBankAccount(String accountNumber) { + if (StrUtil.isBlank(accountNumber)) { + return false; + } + + if (isValidZHCNBankAccount(accountNumber)) { + return true; + } + + if (isValidZHHKBankAccount(accountNumber)) { + return true; + } + + if (isValidZHMOBankAccount(accountNumber)) { + return true; + } + + return isValidZHTWBankAccount(accountNumber); + } + + // 校验中国内地银行卡号的 Luhn 算法 + public static boolean isValidZHCNBankAccount(String accountNumber) { + if (accountNumber == null || accountNumber.length() < 13 || accountNumber.length() > 19) { + return false; + } + try { + long number = Long.parseLong(accountNumber); + } catch (NumberFormatException e) { + return false; + } + int sum = 0; + boolean alternate = false; + for (int i = accountNumber.length() - 1; i >= 0; i--) { + int n = Integer.parseInt(accountNumber.substring(i, i + 1)); + if (alternate) { + n *= 2; + if (n > 9) { + n = (n % 10) + 1; + } + } + sum += n; + alternate = !alternate; + } + return (sum % 10 == 0); + } + + // 校验香港银行账号 + public static boolean isValidZHHKBankAccount(String accountNumber) { + // 简单示例:假设格式为 3 位银行代码 + 3 位分行代码 + 11 位账号 + if (accountNumber == null || accountNumber.length() != 17) { + return false; + } + try { + // 检查是否为纯数字 + Integer.parseInt(accountNumber.substring(0, 3)); + Integer.parseInt(accountNumber.substring(3, 6)); + Integer.parseInt(accountNumber.substring(6)); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + // 校验澳门银行账号 + public static boolean isValidZHMOBankAccount(String accountNumber) { + // 简单示例:假设格式为 2 位银行代码 + 2 位分行代码 + 12 位账号 + if (accountNumber == null || accountNumber.length() != 16) { + return false; + } + try { + // 检查是否为纯数字 + Integer.parseInt(accountNumber.substring(0, 2)); + Integer.parseInt(accountNumber.substring(2, 4)); + Integer.parseInt(accountNumber.substring(4)); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + // 校验台湾银行账号 + public static boolean isValidZHTWBankAccount(String accountNumber) { + // 简单示例:假设格式为 3 位银行代码 + 4 位分行代码 + 10 位账号 + if (accountNumber == null || accountNumber.length() != 17) { + return false; + } + try { + // 检查是否为纯数字 + Integer.parseInt(accountNumber.substring(0, 3)); + Integer.parseInt(accountNumber.substring(3, 7)); + Integer.parseInt(accountNumber.substring(7)); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + +} diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/global/controller/mobile/BanksBranchController.java b/mall-shop/src/main/java/com/suisung/mall/shop/global/controller/mobile/BanksBranchController.java index dc7c9634..462af426 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/global/controller/mobile/BanksBranchController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/global/controller/mobile/BanksBranchController.java @@ -37,6 +37,4 @@ public class BanksBranchController extends BaseControllerImpl { Page list = branchBanksService.searchBranchBanksPageList(paramsJSON.getStr("keyword"), paramsJSON.getInt("pageNum"), paramsJSON.getInt("pageSize")); return CommonResult.success(list); } - - } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java index 722e9d27..745afd21 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java @@ -220,7 +220,10 @@ public class UserOrderController extends BaseControllerImpl { @ApiOperation(value = "查询移动商家端订单数据(新)", notes = "查询移动商家端订单数据(新)") @RequestMapping(value = "/mch/order/list", method = RequestMethod.POST) public CommonResult selectMchOrderPageList(@RequestBody JSONObject params) { - return CommonResult.success(shopOrderBaseService.selectMchOrderPageList(params.getInt("storeId"), params.getStr("keyword"), params.getInt("status"), 25, params.getInt("pageNum"), params.getInt("pageSize"))); + Map respMap = new HashMap<>(); + respMap.put("order_page_list", shopOrderBaseService.selectMchOrderPageList(params.getInt("storeId"), params.getStr("keyword"), params.getInt("delivery"), params.getInt("status"), 25, params.getInt("pageNum"), params.getInt("pageSize"))); + respMap.put("order_count", shopOrderBaseService.mchOrderCountByStoreId(params.getInt("storeId"))); + return CommonResult.success(respMap); } @ApiOperation(value = "查询移动商家端订单详情数据", notes = "查询移动商家端订单详情数据") diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/mapper/ShopOrderBaseMapper.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/mapper/ShopOrderBaseMapper.java index ba808126..28352e09 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/mapper/ShopOrderBaseMapper.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/mapper/ShopOrderBaseMapper.java @@ -68,5 +68,5 @@ public interface ShopOrderBaseMapper extends BaseMapper { * @param status 订单状态 * @return */ - IPage selectMchOrderPageList(@Param("storeId") Integer storeId, @Param("keyword") String keyword, @Param("status") Integer status, @Param("expiredMinute") Integer expiredMinute, IPage page); + IPage selectMchOrderPageList(@Param("storeId") Integer storeId, @Param("keyword") String keyword, @Param("delivery") Integer delivery, @Param("status") Integer status, @Param("expiredMinute") Integer expiredMinute, IPage page); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java index baf11462..1d207078 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java @@ -1,5 +1,6 @@ package com.suisung.mall.shop.order.service; +import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.modules.order.ShopOrderBase; @@ -539,12 +540,20 @@ public interface ShopOrderBaseService extends IBaseService { * * @param storeId * @param keyword 订单搜索关键字 + * @param delivery 配送方式:1-同城配送;2-物流配送 * @param status 查询状态:1-进行中(时效内);2-异常订单(已超时的);3-退款订单 * @param expiredMinute 配送超时的分钟数,单位分钟 * @param pageNum 页码 * @param pageSize 页大小 * @return */ - IPage selectMchOrderPageList(Integer storeId, String keyword, Integer status, Integer expiredMinute, Integer pageNum, Integer pageSize); + IPage selectMchOrderPageList(Integer storeId, String keyword, Integer delivery, Integer status, Integer expiredMinute, Integer pageNum, Integer pageSize); + /** + * 商家订单各个分类和状态的订单数量 + * + * @param storeId + * @return + */ + JSONObject mchOrderCountByStoreId(Integer storeId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index 77151983..797b2a59 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -8486,6 +8486,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl selectMchOrderPageList(Integer storeId, String keyword, Integer status, Integer expiredMinute, Integer pageNum, Integer pageSize) { + public IPage selectMchOrderPageList(Integer storeId, String keyword, Integer delivery, Integer status, Integer expiredMinute, Integer pageNum, Integer pageSize) { // order_state_id 订单状态(LIST):2011-待订单审核;2013-待财务审核;2020-待配货/待出库审核;2030-待发货;2040-已发货/待收货确认;2060-已完成/已签收;2070-已取消/已作废; Page page = new Page<>(pageNum, pageSize); if (expiredMinute == null || expiredMinute <= 0) { - expiredMinute = 25; + expiredMinute = 20; } - return shopOrderBaseMapper.selectMchOrderPageList(storeId, keyword, status, expiredMinute, page); + return shopOrderBaseMapper.selectMchOrderPageList(storeId, keyword, delivery, status, expiredMinute, page); + } + + /** + * 商家订单各个分类和状态的订单数量 + * + * @param storeId + * @return + */ + @Override + public JSONObject mchOrderCountByStoreId(Integer storeId) { + if (ObjectUtil.isEmpty(storeId)) { + return null; + } + + JSONObject jsonObject = new JSONObject(); + + // 全部订单总数量 + jsonObject.put("all_order_count", 100); + + // 同城配送订单总数量 + jsonObject.put("same_city_order_count", 30); + // 同城配送进行中订单数量 + jsonObject.putByPath("all_same_city_order.progress_count", 12); + // 同城配送超时订单数量 + jsonObject.putByPath("same_city_order.overtime_count", 8); + // 同城配送退款订单数量 + jsonObject.putByPath("same_city_order.refund_count", 10); + + // 普通物流订单总数量 + jsonObject.put("logistics_order_count", 10); + // 普通物流订单总数量 + jsonObject.putByPath("logistics_order.progress_count", 5); + // 普通物流订单总数量 + jsonObject.putByPath("logistics_order.overtime_count", 1); + // 普通物流订单总数量 + jsonObject.putByPath("logistics_order.refund_count", 2); + // 普通物流订单总数量 + jsonObject.putByPath("logistics_order.refund_count", 2); + + // todo 预订单数量相关数量 + + return jsonObject; } } 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 f5916d8c..26c2ce15 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 @@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.modules.merch.ShopMerchEntry; +import com.suisung.mall.common.utils.BankUtil; import com.suisung.mall.common.utils.StringUtils; import com.suisung.mall.common.utils.phone.PhoneNumberUtils; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; @@ -186,7 +187,11 @@ public class ShopMerchEntryServiceImpl extends BaseServiceImpl + @@ -574,6 +575,7 @@ + @@ -600,7 +602,7 @@ - + @@ -631,6 +633,8 @@ oi.order_pickup_num, oi.delivery_type_id, oi.buyer_user_id, + IF((SELECT count(*) FROM shop_order_base WHERE buyer_user_id = oi.buyer_user_id AND order_state_id>=2020)>1,2,1) + AS is_new_buyer, oi.payment_time, od.order_shipping_fee, od.order_message, @@ -695,6 +699,15 @@ OR spi.item_barcode LIKE CONCAT('%', #{keyword}, '%')) + + + and oi.delivery_type_id IN (16, 5) + + + + and oi.delivery_type_id NOT IN (16,5) + + and ob.order_state_id IN (2020, 2030, 2040)