From 7fdd03b23e3e00ceadee974e6a272e0f3ee3115b Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 29 Sep 2025 17:30:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E7=8E=B0=E5=92=8C=E9=A1=BA=E4=B8=B0?= =?UTF-8?q?=E5=90=8C=E5=9F=8E=E9=85=8D=E7=BD=AE=20=E8=BD=AC=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall/common/pojo/dto/LklSeparateDTO.java | 8 +-- .../suisung/mall/common/utils/CheckUtil.java | 62 +++++++++++++++-- .../service/impl/LakalaApiServiceImpl.java | 5 +- .../service/impl/SFExpressApiServiceImpl.java | 2 +- .../admin/ShopStorePrinterController.java | 6 ++ .../service/ShopStorePrinterService.java | 8 +++ .../impl/ShopStoreBaseServiceImpl.java | 8 ++- .../impl/ShopStorePrinterServiceImpl.java | 66 +++++++++++++++++-- .../mall/shop/store/utis/FeieUtil.java | 6 +- .../src/main/resources/bootstrap-prod.yml | 2 +- 10 files changed, 148 insertions(+), 25 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java index 4f454da4..13c43d3a 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java @@ -61,12 +61,12 @@ public class LklSeparateDTO { // 测试基于可分账金额的分账算法(正常情况) System.out.println("\n=== 基于可分账金额的分账算法测试(正常情况) ==="); LklSeparateDTO dto2 = new LklSeparateDTO(); - dto2.setTotalSeparateAmount(1); // 分账总额 1000分 - dto2.setShippingFee(0); // 配送费 100分 + dto2.setTotalSeparateAmount(1500); // 分账总额 1000分 + dto2.setShippingFee(500); // 配送费 100分 // dto2.setRefCanSeparateAmount(null); dto2.setLklRatio(new BigDecimal("0.0025")); // 拉卡拉分账比例 0.0025 - dto2.setMchRatio(new BigDecimal("0.94")); // 商家分账比例 0.857 (会产生小数) - dto2.setPlatRatio(new BigDecimal("0.01")); // 平台分账比例 0.01 + dto2.setMchRatio(new BigDecimal("0.95")); // 商家分账比例 0.857 (会产生小数) + dto2.setPlatRatio(new BigDecimal("0.06")); // 平台分账比例 0.01 // 不设置一级和二级代理商分账比例,测试不参与分账的情况 // dto2.setAgent1stRatio(new BigDecimal("0.01")); // 一级代理商分账比例 0.023 (会产生小数) // dto2.setAgent2ndRatio(new BigDecimal("0.04")); // 二级代理商分账比例 0.031 (会产生小数) diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java index e1e66e23..2b1dd6f8 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java @@ -188,28 +188,80 @@ public class CheckUtil { return true; } + /** + * 校验数据的某个字段是否为指定值 + * + * @param value 指定值的字段值 + * @param data 需要对比的数据Map + * @param key 字段名 + * @return boolean 字段值等于指定值返回true,否则返回false + */ public static boolean checkDataRights(Integer value, Map data, String key) { - if (CollUtil.isEmpty(data)) return false; + // 检查数据是否为空或key是否为空 + if (CollUtil.isEmpty(data) || StrUtil.isBlank(key)) { + log.debug("数据为空或key为空, data: {}, key: {}", data, key); + return false; + } + // 从数据中获取指定key的值并转换为Integer类型 Integer _value = Convert.toInt(data.get(key)); - return ObjectUtil.equal(_value, value); + // 比较获取的值与指定值是否相等 + boolean result = ObjectUtil.equal(_value, value); + log.info("校验数据权限, key: {}, 值: {}==数据值: {} ? 结果: {}", key, value, _value, result); + return result; } + /** + * 校验数据对象的某个字段是否为指定值 + * + * @param value 指定值的字段值 + * @param data 需要对比的数据对象 + * @param idMapper 获取数据对象ID的函数 + * @param 数据对象类型 + * @return boolean 字段值等于指定值返回true,否则返回false + */ public static boolean checkDataRights(Integer value, T data, Function idMapper) { - if (ObjectUtil.isEmpty(data)) return false; + // 检查数据对象或映射函数是否为空 + if (ObjectUtil.isEmpty(data) || ObjectUtil.isEmpty(idMapper)) { + log.debug("数据对象或映射函数为空, data: {}, idMapper: {}", data, idMapper); + return false; + } + // 通过映射函数获取数据对象的值 Object _value = idMapper.apply(data); - return ObjectUtil.equal(_value, value); + // 比较获取的值与指定值是否相等 + boolean result = ObjectUtil.equal(_value, value); + log.debug("校验单个对象数据权限, 值: {}, 数据值: {}, 结果: {}", value, _value, result); + return result; } + /** + * 校验数据列表中每个对象的某个字段是否为指定值 + * + * @param value 指定值的字段值 + * @param data 需要对比的数据列表 + * @param idMapper 获取数据对象ID的函数 + * @param 数据对象类型 + * @return boolean 所有对象字段值都等于指定值返回true,否则返回false + */ public static boolean checkDataRights(Integer value, List data, Function idMapper) { - if (CollUtil.isEmpty(data)) return false; + // 检查数据列表或映射函数是否为空 + if (CollUtil.isEmpty(data) || ObjectUtil.isEmpty(idMapper)) { + log.debug("数据列表或映射函数为空, 数据大小: {}, 映射函数: {}", + data != null ? data.size() : 0, idMapper); + return false; + } + // 遍历数据列表中的每个对象 for (T datum : data) { + // 递归校验每个对象,如果有任何一个不匹配则返回false if (!checkDataRights(value, datum, idMapper)) { + log.debug("列表数据权限校验失败,失败项: {}", datum); return false; } } + log.debug("列表数据权限校验成功, 数据大小: {}, 值: {}", data.size(), value); return true; } + public static String addslashes(String str) { if (str == null) { return null; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java index 78ddc55d..8c194b82 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java @@ -2823,11 +2823,14 @@ public class LakalaApiServiceImpl implements LakalaApiService { // RMK 本次分账成功后,给商户和接收方 D1提现到银行卡 if (CollUtil.isNotEmpty(detailDatas)) { + int idx = 1; for (JSONObject detailData : detailDatas.jsonIter()) { String recvNo = detailData.getStr("recv_no"); String amt = detailData.getStr("amt"); if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) { - Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNo, amt, JSONUtil.toJsonStr(detailDatas)); + String outSeparateNoTemp = String.format("%s_%s", outSeparateNo, idx); + Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNoTemp, amt, JSONUtil.toJsonStr(detailDatas)); + idx++; log.info("[拉卡拉分账通知] 账户D1提现{},商户号={},分账单号={},金额={}分", Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNo, amt); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index 2e3021f1..efb562c7 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -1112,7 +1112,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // wxOrderShippingService.notifyConfirmReceive(shopStoreSfOrder.getShop_order_id()); // 订单确认收货 - // shopOrderBaseService.receive(shopStoreSfOrder.getShop_order_id(), null); +// shopOrderBaseService.receive(shopStoreSfOrder.getShop_order_id(), null); String orderId = shopStoreSfOrder.getShop_order_id(); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java index 27f9eaf9..ec799cf9 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java @@ -137,5 +137,11 @@ public class ShopStorePrinterController { return shopStorePrinterService.tryPrint(printer_id); } + @ApiOperation(value = "向厂家删除一个打票机", notes = "向厂家删除一个打票机") + @RequestMapping(value = "/delete/from/feie", method = {RequestMethod.POST}) + public CommonResult deleteFeiePrinter(@RequestParam(name = "sn_list", required = true) String snList) { + return shopStorePrinterService.deleteFeiePrinter(snList); + } + } \ No newline at end of file diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java index 123ae4f1..833c0e35 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java @@ -94,5 +94,13 @@ public interface ShopStorePrinterService extends IBaseService * @param printerId 打印机Id **/ CommonResult tryPrint(Long printerId); + + /** + * 从飞鹅厂家删除飞鹅打印机 + * + * @param snList 打印机编号,多台打印机请用减号“-”连接起来。如:316500010-316500011-316500012 + * @return + */ + CommonResult deleteFeiePrinter(String snList); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java index 97a28e00..7bc5b37a 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java @@ -786,11 +786,11 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl queryWrapper2 = new QueryWrapper<>(); queryWrapper2.eq("store_id", record.getStore_id()); queryWrapper2.eq("printer_sn", record.getPrinter_sn()); - ShopStorePrinter existRecord2 = getOne(queryWrapper2); + ShopStorePrinter existRecord2 = findOne(queryWrapper2); if (existRecord2 == null || existRecord2.getPrinter_id() <= 0) { + // 打印机从未加入到厂家到情况,往厂商添加打印机 // 格式:"922441475#r6ZXPvHH#核销柜台"; - Pair retPair = feieUtil.addPrinter(String.format("%s#%s#%s", record.getPrinter_sn(), record.getPrinter_key(), record.getPrinter_name())); + String printerInfo = String.format("%s#%s#%s", record.getPrinter_sn(), record.getPrinter_key(), record.getPrinter_name()); + logger.info("向厂家添加新打印机: {}", printerInfo); + Pair retPair = feieUtil.addPrinter(printerInfo); + if (retPair.getFirst()) { + logger.info("向厂家添加打印机成功,SN: {}", record.getPrinter_sn()); updateWrapper.set("flag", CommonConstant.Enable); updateWrapper.set("status", CommonConstant.Enable); } else { + logger.warn("向厂家添加打印机失败,SN: {}, 错误信息: {}", record.getPrinter_sn(), retPair.getSecond()); msg = msg + ",但打印机绑定未成功,请检查打印机编号和密钥是否填写正确。"; updateWrapper.set("flag", CommonConstant.Disable2); updateWrapper.set("status", CommonConstant.Disable2); } // 解绑之前的打印机 + logger.info("解绑原打印机,SN: {}", existRecord.getPrinter_sn()); feieUtil.delPrinter(existRecord.getPrinter_sn()); } else { // 打印机编号已被使用 + logger.warn("打印机已添加,请勿重复操作,SN: {}", record.getPrinter_sn()); return CommonResult.success(null, "打票机已添加,请勿重复操作"); } } boolean success = update(updateWrapper); if (success) { + logger.info("更新打印机信息成功,打印机ID: {}", record.getPrinter_id()); return CommonResult.success(null, msg); } + logger.error("更新打印机信息失败,打印机ID: {}", record.getPrinter_id()); return CommonResult.failed("修改失败!"); - } @@ -243,9 +270,9 @@ public class ShopStorePrinterServiceImpl extends BaseServiceImpl retPair = feieUtil.delPrinter(record.getPrinter_sn()); + if (!retPair.getFirst()) { + return CommonResult.failed(retPair.getSecond()); } } @@ -442,5 +469,30 @@ public class ShopStorePrinterServiceImpl extends BaseServiceImpl retPair = feieUtil.delPrinter(snList); + if (!retPair.getFirst()) { + logger.error("从厂家删除飞鹅打印机失败,打印机编号: {}", snList); + return CommonResult.failed(retPair.getSecond()); + } + logger.info("从厂家删除飞鹅打印机成功,打印机编号: {}", snList); + return CommonResult.success("从厂家删除飞鹅打印机成功"); + } + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java index d8ea19fc..3f0a5ae2 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java @@ -120,18 +120,18 @@ public class FeieUtil { * @param snList 打印机编号,多台打印机请用减号“-”连接起来。如:316500010-316500011-316500012 * @return */ - public boolean delPrinter(String snList) { + public Pair delPrinter(String snList) { List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("snlist", snList)); FeiePrinterApiRes reps = sendHttpPost("Open_printerDelList", nvps); logger.info("飞鹅删除打印机返回数据:{}", reps); if (reps != null && reps.getRet().equals(0)) { - return true; + return Pair.of(true, "打印机删除成功!"); } logger.error("飞鹅删除打印机操作失败:{}", reps.getMsg()); - return false; + return Pair.of(true, "打印机删除失败:" + reps.getMsg()); } /** diff --git a/mall-shop/src/main/resources/bootstrap-prod.yml b/mall-shop/src/main/resources/bootstrap-prod.yml index 7470b438..1b38418c 100644 --- a/mall-shop/src/main/resources/bootstrap-prod.yml +++ b/mall-shop/src/main/resources/bootstrap-prod.yml @@ -191,7 +191,7 @@ sf-express: # dev_id: 1715091463 # appid: 1715091463 # appkey: 47466ae69c530f831395e1bc405639fb - enable: 2 + enable: 1 #拉卡拉进件配置 lakala: #服务地址