From 4061013568fd3c95be3c7df19b9484d2fbd97436 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 2 Feb 2023 19:02:50 +0800 Subject: [PATCH 01/90] add car pay --- .../db/migration/V20230200001__car.sql | 31 ++++ .../com/iformall/domain/po/WxCarPayOrder.java | 67 ++++++++ .../iformall/mapper/WxCarPayOrderMapper.java | 16 ++ .../service/WxCarPayOrderService.java | 6 + .../impl/WxCarPayOrderServiceImpl.java | 18 +++ .../resources/mapper/WxCarPayOrderMapper.xml | 146 ++++++++++++++++++ 6 files changed, 284 insertions(+) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/WxCarPayOrderService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/WxCarPayOrderServiceImpl.java create mode 100644 mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql new file mode 100644 index 000000000..909bb07f1 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -0,0 +1,31 @@ +CREATE TABLE `wx_car_pay_order` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_time` datetime NOT NULL COMMENT '更新时间', + `c_user_id` bigint(20) NOT NULL COMMENT '用户ID', + `car_number` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '车牌号', + `pay_amount` int(11) NOT NULL COMMENT '支付金额(分)', + `pay_time_start` datetime NOT NULL COMMENT '支付发起时间', + `pay_time_end` datetime NOT NULL COMMENT '支付结束时间', + `prepay_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信预支付交易会话标识-发模板信息使用', + `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', + `pay_vendor` int(11) NOT NULL DEFAULT '0' COMMENT '支付渠道: 0-微信 1-支付宝 2-银联 ', + `pay_version` smallint(1) DEFAULT NULL COMMENT '支付版本', + `pay_order_no` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '支付订单号', + `pay_order_status` int(11) NOT NULL DEFAULT '0' COMMENT '支付状态: 0-支付中;1-支付成功;2-支付失败', + `pay_param` json DEFAULT NULL COMMENT '额外参数', + `fail_reason` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '支付失败原因', + `pay_end_from` smallint(2) DEFAULT NULL COMMENT '支付后结果来源(0:callback, 1:query)', + `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', + `merchant_id` int(20) NOT NULL COMMENT '商户编号', + `merchant_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商户名称', + `amount` int(11) NOT NULL COMMENT '订单金额', + `free_amount` int(11) NOT NULL DEFAULT '0' COMMENT '优免金额', + `free_coupon_id` int(20) DEFAULT NULL COMMENT '优免优惠券编号', + `free_coupon_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '优免优惠券名称', + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`), + UNIQUE KEY `pay_order_no` (`pay_order_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='支付单表'; \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java new file mode 100644 index 000000000..077686885 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -0,0 +1,67 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import java.util.*; + +@TableName(value = "wx_car_pay_order") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString +public class WxCarPayOrder extends TenantEntity { + + private static final long serialVersionUID = -5094915301794376964L; + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") + private Date createTime; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") + private Date updateTime; + @io.swagger.annotations.ApiModelProperty(value="用户ID",name="cUserId") + private Long cUserId; + @io.swagger.annotations.ApiModelProperty(value="车牌号",name="carNumber") + private String carNumber; + @io.swagger.annotations.ApiModelProperty(value="支付金额(分)",name="payAmount") + private Integer payAmount; + @io.swagger.annotations.ApiModelProperty(value="支付发起时间",name="payTimeStart") + private Date payTimeStart; + @io.swagger.annotations.ApiModelProperty(value="支付结束时间",name="payTimeEnd") + private Date payTimeEnd; + @io.swagger.annotations.ApiModelProperty(value="微信预支付交易会话标识",name="prepayId") + private String prepayId; + @io.swagger.annotations.ApiModelProperty(value="微信生成的订单号",name="transactionId") + private String transactionId; + @io.swagger.annotations.ApiModelProperty(value="支付渠道: 0-微信 1-支付宝 2-银联 ",name="payVendor") + private Integer payVendor; + @io.swagger.annotations.ApiModelProperty(value="支付渠道版本EnumPayVersion ",name="payVersion") + private Integer payVersion; + @io.swagger.annotations.ApiModelProperty(value="支付订单号",name="payOrderNo") + private String payOrderNo; + @io.swagger.annotations.ApiModelProperty(value="支付状态: 0-支付中;1-支付成功;2-支付失败",name="payOrderStatus") + private Integer payOrderStatus; + @io.swagger.annotations.ApiModelProperty(value="支付额外参数",name="payParam") + private String payParam; + @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") + private String failReason; + @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") + private Integer payEndFrom; + @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") + private String merchantAccount; + @io.swagger.annotations.ApiModelProperty(value="商户编号",name="merchantId") + private Long merchantId; + @io.swagger.annotations.ApiModelProperty(value="商户名称",name="merchantName") + private String merchantName; + @io.swagger.annotations.ApiModelProperty(value="订单金额(分)",name="amount") + private Integer amount; + @io.swagger.annotations.ApiModelProperty(value="优免金额(分)",name="freeAmount") + private Integer freeAmount; + @io.swagger.annotations.ApiModelProperty(value="优免券编号",name="freeCouponId") + private Long freeCouponId; + @io.swagger.annotations.ApiModelProperty(value="优免券名称",name="freeCouponName") + private String freeCouponName; + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java new file mode 100644 index 000000000..d8c33135f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import java.util.*; + +import org.apache.ibatis.annotations.Param; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxCarPayOrder; + +public interface WxCarPayOrderMapper extends CommonMapper { + + WxCarPayOrder selectById(@Param("id")Long id,@Param("tenantId")String tenantId); + + List findList(WxCarPayOrder wxCarPayOrder); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxCarPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCarPayOrderService.java new file mode 100644 index 000000000..bd71d5de9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxCarPayOrderService.java @@ -0,0 +1,6 @@ +package com.iformall.service; + +public interface WxCarPayOrderService { + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayOrderServiceImpl.java new file mode 100644 index 000000000..dfdf54994 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayOrderServiceImpl.java @@ -0,0 +1,18 @@ +package com.iformall.service.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.mapper.WxCarPayOrderMapper; +import com.iformall.service.WxCarPayOrderService; + +@Service +public class WxCarPayOrderServiceImpl implements WxCarPayOrderService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxCarPayOrderMapper wxCarPayOrderMapper; + + +} diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml new file mode 100644 index 000000000..53406d8a9 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`car_number`,`pay_amount`, + `pay_time_start`,`pay_time_end`,`prepay_id`,`transaction_id`,`pay_vendor`,`pay_version`,`pay_order_no`, + `pay_order_status`,`pay_param`,`fail_reason`,`pay_end_from`,`merchant_account`,`merchant_id`,`merchant_name`, + `amount`,`free_amount`,`free_coupon_id`,`free_coupon_name` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `create_time` = #{createTime} + + + + and `update_time` = #{updateTime} + + + + and `c_user_id` = #{cUserId} + + + + and `car_number` like concat('%', #{carNumber},'%') + + + + and `pay_amount` = #{payAmount} + + + + and `pay_time_start` = #{payTimeStart} + + + + and `pay_time_end` = #{payTimeEnd} + + + + and `prepay_id` like concat('%', #{prepayId},'%') + + + + and `transaction_id` like concat('%', #{transactionId},'%') + + + + and `pay_vendor` = #{payVendor} + + + + and `pay_version` = #{payVersion} + + + + and `pay_order_no` like concat('%', #{payOrderNo},'%') + + + + and `pay_order_status` = #{payOrderStatus} + + + + and `fail_reason` like concat('%', #{failReason},'%') + + + + and `merchant_account` like concat('%', #{merchantAccount},'%') + + + + and `merchant_id` = #{merchantId} + + + + and `merchant_name` like concat('%', #{merchantName},'%') + + + + and `free_coupon_id` = #{freeCouponId} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + From cdd8741d33cf60bcc5f58c12d6f3b7e4384dda8c Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Sat, 4 Feb 2023 17:45:58 +0800 Subject: [PATCH 02/90] fix car pay --- .../db/migration/V20230200001__car.sql | 6 +- .../iformall/controller/WxCarController.java | 38 +++++- .../java/com/iformall/domain/po/WxPark.java | 3 +- .../com/iformall/enums/EnumCarVendor.java | 1 - .../service/park/ParkAdapterService.java | 26 +++- .../park/entity/ParkCreatePayOrder.java | 21 +++ .../service/park/entity/ParkNotifyPaid.java | 121 ++++++++++++++++++ .../park/impl/bolink/BoLinkParkService.java | 34 +++-- .../service/park/impl/cyf/CYFParkService.java | 30 +++-- .../park/impl/dahua/DaHuaParkService.java | 29 ++++- .../HaiKangWeiShiParkService.java | 36 ++++-- .../park/impl/jieshun/JieShunParkService.java | 47 ++++--- .../park/impl/shangan/ShangAnParkService.java | 21 ++- .../service/park/impl/tjd/TJDParkService.java | 32 +++-- .../main/resources/mapper/WxParkMapper.xml | 9 +- 15 files changed, 374 insertions(+), 80 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java create mode 100644 mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 909bb07f1..6bd8c07b3 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -28,4 +28,8 @@ CREATE TABLE `wx_car_pay_order` ( PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `pay_order_no` (`pay_order_no`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='支付单表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='支付单表'; + + +ALTER TABLE `mallink`.`wx_park` +ADD COLUMN `support_pay` int(1) COMMENT '会员小程序是否支持支付enumYesOrNo'; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index c50e54438..b62635202 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -10,6 +10,8 @@ import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.enums.*; import com.iformall.service.*; import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.etcp.EtcpHelper; import com.iformall.service.park.impl.util.ParkHelper; import com.iformall.service.park.utils.ParkCacheUtils; @@ -228,7 +230,7 @@ public class WxCarController extends BaseController { } /** - * 停车费 + * 停车费查询 * * @param paramMap * @return @@ -276,7 +278,12 @@ public class WxCarController extends BaseController { return etcpHelper.etcpCarStopFee(paramMap, park); } else { try { - return parkFactory.getParkService(park.getVendorType()).carStopFee(paramMap, park); + String carNumber = paramMap.get("carNumber"); + if (StringUtils.isBlank(carNumber)) { + return new ResultData(Result.ERROR, "carNumber为空"); + } + ParkStopFee fee = parkFactory.getParkService(park.getVendorType()).carStopFee(paramMap, park,carNumber); + return new ResultData(fee); } catch (Exception e) { logger.error("park getCarStopFee error",e); return new ResultData(Result.ERROR,e.getMessage()); @@ -397,6 +404,33 @@ public class WxCarController extends BaseController { } } + /** + * 停车费创建支付订单,只有supportPay=true时才调用此方法 + * + * @param paramMap + * @return + */ + @ApiOperation(value = "停车费创建支付订单", notes = "") + @PostMapping("/createPayOrder") + public ResultData createPayOrder(@RequestBody Map paramMap) { + WxPark park = getCurrentPark(getTenantInfo()); + if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { + return null; + } else { + String carNumber = paramMap.get("carNumber"); + if (StringUtils.isBlank(carNumber)) { + return new ResultData(Result.ERROR,"无车牌参数."); + } + try { + ParkCreatePayOrder payOrder = parkFactory.getParkService(park.getVendorType()).createPayOrder(paramMap, park,carNumber); + return new ResultData(payOrder); + } catch (Exception e) { + logger.error("park getCarStopFee error",e); + return new ResultData(Result.ERROR,e.getMessage()); + } + } + } + @ApiOperation("券包分页列表接口") @GetMapping("/couponOrderList") @ApiImplicitParams({ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java index 7bc7c586d..167a31b38 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java @@ -38,5 +38,6 @@ public class WxPark extends TenantEntity { private String vendorParams; @io.swagger.annotations.ApiModelProperty(value="优惠券配置参数,WxParkCouponConfig",name="couponParams") private String couponParams; - + @io.swagger.annotations.ApiModelProperty(value="会员小程序是否支持支付enumYesOrNo",name="supportPay") + private Integer supportPay; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java index 564874062..f1c3362c5 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java @@ -47,5 +47,4 @@ public enum EnumCarVendor { public boolean isNotifyBatch() { return notifyBatch; } - } diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java index a187ba1d1..b8f9e2784 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java @@ -7,6 +7,9 @@ import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxPark; import com.iformall.domain.vo.WxCouponOrderCarCVo; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkStopFee; /** * 新的用NewParkAdapterService @@ -43,7 +46,7 @@ public interface ParkAdapterService { /** * 获取停车费, 给老的集成用 */ - ResultData carStopFee(Map paramMap, WxPark park) throws Exception; + ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) throws Exception; /** * 是否忽略使用券缓存,不忽略,则走系统,根据停车场出入场通知来控制。忽略,则不需要此判断来判定停车券是否已经使用 @@ -52,12 +55,29 @@ public interface ParkAdapterService { boolean ignoreUseCouponCache(); /** - * 停车券使用, 给老的集成用 + * 停车创建支付订单 */ - ResultData useCoupon(Map paramMap,WxPark park,WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception; + ParkCreatePayOrder createPayOrder(Map paramMap,WxPark park,String carNumber) throws Exception; + + /** + * 停车订单成功通知车场 + */ + ParkNotifyPaid notifyPaid(Map paramMap,WxPark park,String parkOrderNumber) throws Exception; /** * 查询停车场状态, 给老的集成用 */ ResultData getParkStatus(WxPark park) throws Exception; + + /** + * + * @param paramMap + * @param park + * @param userCar + * @param coupon + * @param carNumber + * @return + * @throws Exception + */ + ResultData useCoupon(Map paramMap,WxPark park,WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception; } diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java new file mode 100644 index 000000000..6f1bb7c09 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java @@ -0,0 +1,21 @@ +package com.iformall.service.park.entity; + +import java.io.Serializable; +import org.apache.commons.lang3.StringUtils; + +public class ParkCreatePayOrder implements Serializable{ + + private static final long serialVersionUID = 5585069626450856545L; + /*停车场返回的订单ID**/ + private String parkOrderNumber=""; + + public ParkCreatePayOrder(String parkOrderNumber) { + if (!StringUtils.isBlank(parkOrderNumber)) { + this.parkOrderNumber = parkOrderNumber; + } + } + + public String getParkOrderNumber() { + return parkOrderNumber; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java new file mode 100644 index 000000000..2bf627ede --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java @@ -0,0 +1,121 @@ +package com.iformall.service.park.entity; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; + +public class ParkNotifyPaid implements Serializable{ + + private static final long serialVersionUID = 6478840764729191197L; + + /*停车场返回的订单ID**/ + private String orderId=""; + /*入场时间 格式:yyyy-MM-dd HH:mm:ss**/ + private String entranceTime=""; + /*计费结束时间 格式:yyyy-MM-dd HH:mm:ss**/ + private String exitTime=""; + /*停车费**/ + private String remainingFee=""; + /*跳转的停车费支付小程序appId**/ + private String appId=""; + /*支付小程序页面路径**/ + private String payPath=""; + /*给支付小程序的额外数据**/ + private Map extraData=new HashMap(); + /*备注**/ + private String remark=""; + private String sysNotice="";//系统提示,非车厂提示; + + + public ParkNotifyPaid(String orderId,Date startTime,Date endTime,String fee,String appId,String payPath,Map extraData,String remark,String sysNotice) { + if (!StringUtils.isBlank(orderId)) { + this.orderId = orderId; + } + if (null != startTime) { + this.entranceTime = getLocalDate(startTime); + } + if (null != endTime) { + this.exitTime = getLocalDate(endTime); + } + if (!StringUtils.isBlank(fee)) { + this.remainingFee = fee; + } + if (!StringUtils.isBlank(appId)) { + this.appId = appId; + } + if (!StringUtils.isBlank(payPath)) { + this.payPath = payPath; + } + if (null != extraData) { + this.extraData = extraData; + } + if (!StringUtils.isBlank(remark)) { + this.remark = remark; + } + if (!StringUtils.isBlank(sysNotice)) { + this.sysNotice = sysNotice; + } + } + + + private String getLocalDate(Date date){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(date); + } + + public String getOrderId() { + return orderId; + } + public void setOrderId(String orderId) { + this.orderId = orderId; + } + public String getEntranceTime() { + return entranceTime; + } + public void setEntranceTime(String entranceTime) { + this.entranceTime = entranceTime; + } + public String getExitTime() { + return exitTime; + } + public void setExitTime(String exitTime) { + this.exitTime = exitTime; + } + public String getRemainingFee() { + return remainingFee; + } + public void setRemainingFee(String remainingFee) { + this.remainingFee = remainingFee; + } + public String getAppId() { + return appId; + } + public void setAppId(String appId) { + this.appId = appId; + } + public String getPayPath() { + return payPath; + } + public void setPayPath(String payPath) { + this.payPath = payPath; + } + public Map getExtraData() { + return extraData; + } + public void setExtraData(Map extraData) { + this.extraData = extraData; + } + public String getRemark() { + return remark; + } + public void setRemark(String remark) { + this.remark = remark; + } + public String getSysNotice() { + return sysNotice; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java index 993c86bc8..97804b226 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java @@ -16,6 +16,9 @@ import com.iformall.domain.po.WxPark; import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.enums.EnumCouponUnit; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; @Service @@ -42,15 +45,11 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer } @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return bolinkCarStopFee(paramMap, park); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) { + return bolinkCarStopFee(paramMap, park,carNumber); } - private ResultData bolinkCarStopFee(Map paramMap, WxPark park) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } + private ParkStopFee bolinkCarStopFee(Map paramMap, WxPark park,String carNumber) { String params = park.getVendorParams(); JSONObject objParams = JSON.parseObject(params); String url = objParams.getString(BoLinkUtil.BOLINK_URL); @@ -62,13 +61,14 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer JSONObject retObj = JSON.parseObject(ret); JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA); if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) { - return new ResultData(dataObj); + //return new ResultData(dataObj); } else { - return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); + //return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); } } else { - return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); + //return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); } + return null; } @Override @@ -114,6 +114,20 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer return false; } + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java index 7c47f75fe..b461ccba9 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java @@ -23,6 +23,8 @@ import com.iformall.enums.EnumCarVendor; import com.iformall.enums.EnumCouponUnit; import com.iformall.exception.MallinkException; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -120,15 +122,11 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic @Override - public ResultData carStopFee(Map paramMap, WxPark park) throws Exception{ - return cyfCarStopFee(paramMap, park); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ + return cyfCarStopFee(paramMap, park,carNumber); } - private ResultData cyfCarStopFee(Map paramMap, WxPark park) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } + private ParkStopFee cyfCarStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ String params = park.getVendorParams(); JSONObject objParams = JSON.parseObject(params); String token = objParams.getString("token"); @@ -140,12 +138,12 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic String msg = retObj.getString("warmPrompt"); String appId = ""; String payPath = "http://wechat.cheyifu2016.com/fm-pay/#/transit?encodeURIComponent('orderNo=123&couponFee=2&actualFee=20')"; - return new ResultData(new ParkStopFee(retObj.getString("orderId"), cyf.utcToLocal(String.valueOf(createTime)), - cyf.utcToLocal(String.valueOf(endTime)), String.valueOf(retObj.getDouble("fee")),appId,payPath,null,msg,null)); + return new ParkStopFee(retObj.getString("orderId"), cyf.utcToLocal(String.valueOf(createTime)), + cyf.utcToLocal(String.valueOf(endTime)), String.valueOf(retObj.getDouble("fee")),appId,payPath,null,msg,null); }else { logger.error("cyfCarStopFee error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); String msg = retObj.getString("strError"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); + throw new MallinkException(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); } } @@ -200,4 +198,16 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic return false; } + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) + throws Exception { + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + throws Exception { + return null; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java index 13796e42e..e499f70e2 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java @@ -13,7 +13,11 @@ import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxPark; import com.iformall.domain.vo.WxCouponOrderCarCVo; +import com.iformall.exception.MallinkException; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; @Service @@ -44,21 +48,20 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ } @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return dahuaCarStopFee(paramMap, park); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) { + return dahuaCarStopFee(paramMap, park,carNumber); } - private ResultData dahuaCarStopFee(Map paramMap, WxPark park) { - String carNumber = paramMap.get("carNumber"); + private ParkStopFee dahuaCarStopFee(Map paramMap, WxPark park,String carNumber) { String result = DaHuaUtil.plateCharge(carNumber, park.getParkId()); logger.info("大华查询车辆费用接口返回值:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); String code = jsonObject.getString("code"); if (!code.equals(DaHuaUtil.SUCCESS_CODE)) { - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败"); + throw new MallinkException(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败"); } Object data = jsonObject.get("data"); - return new ResultData(data); + return null; } @Override @@ -77,4 +80,18 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ return false; } + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index f3353718e..afa6145ff 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -31,6 +31,8 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCarJSOrderMapper; import com.iformall.service.WxParkService; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -139,22 +141,17 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda * 每一次查询都会产生订单,然后根据订单号查询 */ @Override - public ResultData carStopFee(Map paramMap, WxPark park) throws Exception{ - return haiKangWeiShiCarStopFee(paramMap, park); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ + return haiKangWeiShiCarStopFee(paramMap, park,carNumber); } - private ResultData haiKangWeiShiCarStopFee(Map paramMap, WxPark park) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - + private ParkStopFee haiKangWeiShiCarStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ //如果车牌号是鄂AAAAAA, 为测试车牌 if (carNumber.equals("鄂AAAAAA")) { - return new ResultData(new ParkStopFee("-111",haikang.utcToLocal("2020-12-16 00:00:00"),haikang.utcToLocal("2020-12-17 00:00:00"), - "0.01","","payPath",null,"测试车牌,仅测试用",null)); + return new ParkStopFee("-111",haikang.utcToLocal("2020-12-16 00:00:00"),haikang.utcToLocal("2020-12-17 00:00:00"), + "0.01","","payPath",null,"测试车牌,仅测试用",null); }else if(carNumber.equals("鄂AAAAAB")) { - return new ResultData(21000,"车辆未入场"); + throw new MallinkException(21000,"车辆未入场"); } JSONObject attribute = haikang.getFee(park, carNumber, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); @@ -164,8 +161,8 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda String _createTime = attribute.getString("entranceTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss” String _endTime = attribute.getString("costTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” String payPath = ""; - return new ResultData(new ParkStopFee(parkOrderId,haikang.utcToLocal(_createTime),haikang.utcToLocal(_endTime), - String.valueOf(attribute.getDouble("shouldCost")),appId,payPath,null,null,"0元请勿使用优惠券,无法退回。支付后15分钟内离场")); + return new ParkStopFee(parkOrderId,haikang.utcToLocal(_createTime),haikang.utcToLocal(_endTime), + String.valueOf(attribute.getDouble("shouldCost")),appId,payPath,null,null,"0元请勿使用优惠券,无法退回。支付后15分钟内离场"); } /** @@ -235,6 +232,18 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前用户领用到海康威视停车券失败:["+retObj.getString("code")+"]"+msg); } } + + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) + throws Exception { + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + throws Exception { + return null; + } @Override public ResultData getParkStatus(WxPark park) throws Exception{ @@ -245,6 +254,5 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda public boolean ignoreUseCouponCache() { return true; } - } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java index 9e38e40e8..990111578 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java @@ -30,6 +30,8 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCarJSOrderMapper; import com.iformall.service.WxParkService; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -161,22 +163,17 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe * 每一次查询都会产生订单,然后根据订单号查询 */ @Override - public ResultData carStopFee(Map paramMap, WxPark park) throws Exception{ - return jieshunCarStopFee(paramMap, park); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ + return jieshunCarStopFee(paramMap, park,carNumber); } - private ResultData jieshunCarStopFee(Map paramMap, WxPark park) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - + private ParkStopFee jieshunCarStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ //如果车牌号是鄂AAAAAA, 为测试车牌 if (carNumber.equals("鄂AAAAAA")) { - return new ResultData(new ParkStopFee("-111",jieshun.utcToLocal("2020-12-16 00:00:00"),jieshun.utcToLocal("2020-12-17 00:00:00"), - "0.01","wx24b70f0ad2a9a89a","payPath",null,"测试车牌,仅测试用",null)); + return new ParkStopFee("-111",jieshun.utcToLocal("2020-12-16 00:00:00"),jieshun.utcToLocal("2020-12-17 00:00:00"), + "0.01","wx24b70f0ad2a9a89a","payPath",null,"测试车牌,仅测试用",null); }else if(carNumber.equals("鄂AAAAAB")) { - return new ResultData(21000,"车辆未入场"); + throw new MallinkException(21000,"车辆未入场"); } //下订单; @@ -203,18 +200,18 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe String msg = attribute.getString("retmsg"); if (!StringUtils.isBlank(msg)) { if (msg.contains("未入场")) { - return new ResultData(new ParkStopFee(null,jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg,null)); + return new ParkStopFee(null,jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,null); }else { //0元订单结清,查询是否用过打折方案,如果用过,则需要调用接口结清订单 Integer used = ParkCacheUtils.getCarCouponUseCacheLock(redisTemplate, EnumCarVendor.CAR_JIESHUN.getMessage(), carNumber); if (null == used || (null != used && used.intValue() < 1)) { //未使用停车券 - return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg,null)); + return new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,null); }else { - return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,获得15分钟免费出场时间")); + return new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,获得15分钟免费出场时间"); // String notifyResult = jieshun.notifyOrderResult(park, parkOrderId, getCacheToken(park)); // JSONObject notiryRetObj = JSON.parseObject(notifyResult); // String noticeErrorMsg = notiryRetObj.getString("message"); @@ -255,12 +252,12 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe String createTime = retObject.getString("startTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss” String endTime = retObject.getString("endTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” String payPath = "pages/thirdPayOrder/payOrder?carNo="+jieshun.handleCarNumber(carNumber)+"&parkCode="+park.getParkingId(); - return new ResultData(new ParkStopFee(parkOrderId,jieshun.utcToLocal(createTime),jieshun.utcToLocal(endTime), - String.valueOf(retObject.getDouble("totalFee")),appId,payPath,null,null,"请支付后15分钟内离场")); + return new ParkStopFee(parkOrderId,jieshun.utcToLocal(createTime),jieshun.utcToLocal(endTime), + String.valueOf(retObject.getDouble("totalFee")),appId,payPath,null,null,"请支付后15分钟内离场"); }else { logger.error("jieshunCarStopFee error. paramMap: {} . jieshunResult: {}",JSON.toJSONString(paramMap),ret); String msg = retObj.getString("message"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); + throw new MallinkException(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); } } @@ -345,6 +342,16 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe return new ResultData(retObj.getIntValue("resultCode"), "当前用户领用到捷顺停车券失败:"+msg); } } + + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) throws Exception { + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) throws Exception { + return null; + } @Override public ResultData getParkStatus(WxPark park) throws Exception{ diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java index 713aed2be..0d3878e94 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java @@ -19,6 +19,9 @@ import com.iformall.enums.EnumCouponUnit; import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxCouponService; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; @Service @@ -51,8 +54,8 @@ public class ShangAnParkService extends BaseParkService implements ParkAdapterSe } @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return new ResultData(); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) { + return null; } @Override @@ -95,4 +98,18 @@ public class ShangAnParkService extends BaseParkService implements ParkAdapterSe public boolean ignoreUseCouponCache() { return false; } + + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java index 71f3459b3..07d44e056 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java @@ -30,6 +30,9 @@ import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxCouponService; import com.iformall.service.WxScoreRulesService; import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -190,15 +193,11 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return tjdCarStopFee(paramMap, park); + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) { + return tjdCarStopFee(paramMap, park,carNumber); } - private ResultData tjdCarStopFee(@RequestBody Map paramMap, WxPark park) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } + private ParkStopFee tjdCarStopFee(@RequestBody Map paramMap, WxPark park,String carNumber) { String params = park.getVendorParams(); JSONObject objParams = JSON.parseObject(params); String url = objParams.getString(TJDUtil.TJD_URL); @@ -208,9 +207,10 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber); JSONObject retObj = JSON.parseObject(ret); if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { - return new ResultData(retObj); + //return new ResultData(retObj); + return null; } else { - return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败"); + throw new MallinkException(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败"); } } @@ -259,4 +259,18 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic public boolean ignoreUseCouponCache() { return false; } + + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + throws Exception { + // TODO Auto-generated method stub + return null; + } } diff --git a/mallinkService/src/main/resources/mapper/WxParkMapper.xml b/mallinkService/src/main/resources/mapper/WxParkMapper.xml index 38db61121..e37d3a3e5 100644 --- a/mallinkService/src/main/resources/mapper/WxParkMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxParkMapper.xml @@ -17,10 +17,12 @@ + - `id`,`tenant_id`,`parent_tenant_id`,`img_url`,`addr`,`number`,`entry_exit`,`stop_fee`,`create_date`,`update_date`,`park_id`,`parking_id`,`vendor_type`,`vendor_params`,`coupon_params` + `id`,`tenant_id`,`parent_tenant_id`,`img_url`,`addr`,`number`,`entry_exit`,`stop_fee`,`create_date`,`update_date`,`park_id`, + `parking_id`,`vendor_type`,`vendor_params`,`coupon_params`,`support_pay` @@ -80,6 +82,11 @@ and `vendor_params` like concat('%', #{vendorParams},'%') + + + and `support_pay` = #{supportPay} + + and id in From 5cdcf5159391a6c1ec138a75af5197f1eb6e1881 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Sat, 4 Feb 2023 21:00:53 +0800 Subject: [PATCH 03/90] fix car pay --- .../iformall/controller/WxCarController.java | 23 +++++++ .../service/park/pay/WxParkPayService.java | 15 ++++ .../park/pay/WxParkPayServiceImpl.java | 46 +++++++++++++ .../appPay/WxMiniAppPayAdapterService.java | 69 +++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index b62635202..312b7ed5f 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -14,6 +14,7 @@ import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.etcp.EtcpHelper; import com.iformall.service.park.impl.util.ParkHelper; +import com.iformall.service.park.pay.WxParkPayService; import com.iformall.service.park.utils.ParkCacheUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -67,6 +68,9 @@ public class WxCarController extends BaseController { @Autowired WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired + WxParkPayService wxParkPayService; + @Autowired ParkFactory parkFactory; @@ -421,8 +425,27 @@ public class WxCarController extends BaseController { if (StringUtils.isBlank(carNumber)) { return new ResultData(Result.ERROR,"无车牌参数."); } + if (EnumYesOrNo.YES.getCode() != park.getSupportPay()) { + return new ResultData(Result.ERROR,"当前车场配置WxPark不支持支付."); + } + CUser user = getCUser(); + if (!user.basicInfoIs()) { + logger.error("暂未成为会员,请授权手机号"); + return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号"); + } + + try { + //创建车场支付订单 ParkCreatePayOrder payOrder = parkFactory.getParkService(park.getVendorType()).createPayOrder(paramMap, park,carNumber); + if (null == payOrder || StringUtils.isBlank(payOrder.getParkOrderNumber())) { + return new ResultData(Result.ERROR,"创建车场订单错误."); + } + + //查询当前停车商户的收款账号 + String mchId = ""; + //创建微信支付订单 + wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), carNumber, carNumber, carNumber, carNumber, null, carNumber, carNumber, carNumber, null); return new ResultData(payOrder); } catch (Exception e) { logger.error("park getCarStopFee error",e); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java new file mode 100644 index 000000000..c3b611849 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -0,0 +1,15 @@ +package com.iformall.service.park.pay; + +import java.util.Date; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; + +public interface WxParkPayService { + + public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize); + + public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java new file mode 100644 index 000000000..a04015719 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -0,0 +1,46 @@ +package com.iformall.service.park.pay; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.mapper.WxCarPayOrderMapper; +import com.iformall.service.ExcelService; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; +import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +@Service +public class WxParkPayServiceImpl implements WxParkPayService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + ExcelService excelService; + + @Autowired + WxCarPayOrderMapper wxCarPayOrderMapper; + + @Autowired + WxMiniAppPayAdapterService wxMiniAppPayAdapterService; + + @Override + public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record)); + } + + @Override + public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { + return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + } + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index 0438b5b62..a2c8331cc 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -2,6 +2,7 @@ package com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay; import java.io.File; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -58,6 +59,30 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem "\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," + "\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}"); + private WxPayOrderP generateWxPayOrderP(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate)throws Exception { + // 统一下单 普通商户模式 + String noncestr = Utility.generate32UUID(); + WxPayOrderP wxPayOrderP = new WxPayOrderP(); + wxPayOrderP.setOpenid(openId); + wxPayOrderP.setAppid(appId); + wxPayOrderP.setMch_id(mchId); + wxPayOrderP.setNonce_str(noncestr); + wxPayOrderP.setBody(productName); + wxPayOrderP.setAttach(attach); + wxPayOrderP.setOut_trade_no(payOrderNo); + wxPayOrderP.setTotal_fee(fee); + wxPayOrderP.setSpbill_create_ip(ip); // 终端IP + wxPayOrderP.setGoods_tag(productName); + wxPayOrderP.setNotify_url(notifyUrl); + wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 + wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); + Date futureDate = new Date(); + futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); + wxPayOrderP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 + Map payOrderMap = BeanUtils.toStringMap(wxPayOrderP); + wxPayOrderP.setSign(WxPayment.createSign(payOrderMap, apiKey)); + return wxPayOrderP; + } private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception { // 统一下单 普通商户模式 @@ -132,6 +157,42 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem return par; } + private PayAdapterResult getOrderPResult(Map returnMap,String noncestr,String apiKey) { + PayAdapterResult par = new PayAdapterResult(); + String result_code = returnMap.get("result_code"); + if ("SUCCESS".equals(result_code)) { + par.setSuccess(true); + par.setMsg("success."); + par.setData(returnMap); + String prepay_id = returnMap.get("prepay_id"); + String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); + Map sighMap = MapUtil.getOrderMap(); + sighMap.put("appId", returnMap.get("appid")); + sighMap.put("timeStamp", timestamp); + sighMap.put("nonceStr", noncestr); + sighMap.put("package", "prepay_id=" + prepay_id); + sighMap.put("signType", "MD5"); + String signAgent = WxPayment.createSign(sighMap, apiKey); + returnMap.put("timeStamp", timestamp); + returnMap.put("nonceStr", noncestr); + returnMap.put("package", "prepay_id=" + prepay_id); + returnMap.put("paySign", signAgent); + log.info("back to UI: " + returnMap.toString()); + } else { + String errMsg = ""; + JSONObject errObj = errorMap.getJSONObject(result_code); + if (errObj != null) { + errMsg = errObj.toJSONString(); + } else { + errMsg = returnMap.get("return_msg"); + } + par.setSuccess(false); + par.setMsg(errMsg); + par.setData(returnMap); + } + return par; + } + private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { @@ -247,6 +308,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem return getOrderSPResult(returnMap,record,payAccount,appInfo,wxPayOrderSP.getNonce_str()); } } + + public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { + WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); + log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); + Map returnMap = WxPayment.xmlToMap(response); + return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey); + } @Override public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, From 108e8fe801d73e423378c819e0d282c1547eb3ca Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 8 Feb 2023 16:10:15 +0800 Subject: [PATCH 04/90] fix car pay --- .../db/migration/V20230200001__car.sql | 22 +-- .../iformall/controller/WxCarController.java | 94 +++++++++- .../car/pay/WxCarPaidCallBackController.java | 175 ++++++++++++++++++ .../java/com/iformall/mq/MqBaseConsumer.java | 8 + .../com/iformall/domain/po/WxCarPayOrder.java | 33 +--- .../com/iformall/domain/po/WxMerchant.java | 4 + .../java/com/iformall/domain/po/WxPark.java | 2 + .../msg/FmInsideNotifyCarPaidSuccessMsg.java | 20 ++ .../com/iformall/enums/EnumMsgRecordType.java | 2 + .../iformall/mapper/WxCarPayOrderMapper.java | 2 + .../iformall/service/WxMerchantService.java | 2 + .../service/impl/WxMerchantServiceImpl.java | 21 +++ ...ideNotifyCarPaidSuccessMsgServiceImpl.java | 38 ++++ .../service/park/ParkAdapterService.java | 2 +- .../park/entity/ParkCreatePayOrder.java | 26 ++- .../service/park/entity/ParkNotifyPaid.java | 114 ++---------- .../park/impl/bolink/BoLinkParkService.java | 4 +- .../service/park/impl/cyf/CYFParkService.java | 4 +- .../park/impl/dahua/DaHuaParkService.java | 5 +- .../HaiKangWeiShiParkService.java | 4 +- .../park/impl/jieshun/JieShunParkService.java | 3 +- .../park/impl/shangan/ShangAnParkService.java | 5 +- .../service/park/impl/tjd/TJDParkService.java | 5 +- .../service/park/pay/WxParkPayService.java | 11 ++ .../park/pay/WxParkPayServiceImpl.java | 157 +++++++++++++++- .../java/com/iformall/utils/Constant.java | 2 + .../java/com/iformall/utils/DateUtils.java | 2 + .../resources/mapper/WxCarPayOrderMapper.xml | 69 ++----- .../resources/mapper/WxMerchantMapper.xml | 4 + .../main/resources/mapper/WxParkMapper.xml | 3 +- 30 files changed, 605 insertions(+), 238 deletions(-) create mode 100644 mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideNotifyCarPaidSuccessMsg.java create mode 100644 mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 6bd8c07b3..305bd4d90 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -7,29 +7,19 @@ CREATE TABLE `wx_car_pay_order` ( `c_user_id` bigint(20) NOT NULL COMMENT '用户ID', `car_number` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '车牌号', `pay_amount` int(11) NOT NULL COMMENT '支付金额(分)', - `pay_time_start` datetime NOT NULL COMMENT '支付发起时间', - `pay_time_end` datetime NOT NULL COMMENT '支付结束时间', - `prepay_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信预支付交易会话标识-发模板信息使用', + `pay_time` datetime NOT NULL COMMENT '支付时间', `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', - `pay_vendor` int(11) NOT NULL DEFAULT '0' COMMENT '支付渠道: 0-微信 1-支付宝 2-银联 ', - `pay_version` smallint(1) DEFAULT NULL COMMENT '支付版本', - `pay_order_no` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '支付订单号', - `pay_order_status` int(11) NOT NULL DEFAULT '0' COMMENT '支付状态: 0-支付中;1-支付成功;2-支付失败', - `pay_param` json DEFAULT NULL COMMENT '额外参数', - `fail_reason` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '支付失败原因', - `pay_end_from` smallint(2) DEFAULT NULL COMMENT '支付后结果来源(0:callback, 1:query)', + `park_order_no` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', `merchant_id` int(20) NOT NULL COMMENT '商户编号', `merchant_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商户名称', - `amount` int(11) NOT NULL COMMENT '订单金额', - `free_amount` int(11) NOT NULL DEFAULT '0' COMMENT '优免金额', - `free_coupon_id` int(20) DEFAULT NULL COMMENT '优免优惠券编号', - `free_coupon_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '优免优惠券名称', PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), - UNIQUE KEY `pay_order_no` (`pay_order_no`) + UNIQUE KEY `pay_order_no` (`park_order_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='支付单表'; - ALTER TABLE `mallink`.`wx_park` ADD COLUMN `support_pay` int(1) COMMENT '会员小程序是否支持支付enumYesOrNo'; + +ALTER TABLE `mallink`.`wx_park` +ADD COLUMN `paid_call_back` varchar(100) COMMENT '支付完成回调地址'; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 312b7ed5f..af059847e 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -5,9 +5,11 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity; +import com.iformall.domain.po.base.BaseEntity.SortField; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.service.park.ParkFactory; import com.iformall.service.park.entity.ParkCreatePayOrder; @@ -16,6 +18,8 @@ import com.iformall.service.park.impl.etcp.EtcpHelper; import com.iformall.service.park.impl.util.ParkHelper; import com.iformall.service.park.pay.WxParkPayService; import com.iformall.service.park.utils.ParkCacheUtils; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -28,6 +32,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -80,6 +85,15 @@ public class WxCarController extends BaseController { @Autowired EtcpHelper etcpHelper; + @Autowired + WxAppinfoService wxAppinfoService; + + @Autowired + WxPayAccountService wxPayAccountService; + + @Autowired + WxProfitSharingReceiverService wxProfitSharingReceiverService; + @Autowired @Qualifier("objectCommonRedisTemplate") RedisTemplate redisTemplate; @@ -414,7 +428,7 @@ public class WxCarController extends BaseController { * @param paramMap * @return */ - @ApiOperation(value = "停车费创建支付订单", notes = "") + @ApiOperation(value = "停车费创建支付订单", notes = "{\"carNumber\":\"鄂AAAAAA\",\"carFee\":\"100\"}") @PostMapping("/createPayOrder") public ResultData createPayOrder(@RequestBody Map paramMap) { WxPark park = getCurrentPark(getTenantInfo()); @@ -433,20 +447,52 @@ public class WxCarController extends BaseController { logger.error("暂未成为会员,请授权手机号"); return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号"); } - - try { //创建车场支付订单 ParkCreatePayOrder payOrder = parkFactory.getParkService(park.getVendorType()).createPayOrder(paramMap, park,carNumber); - if (null == payOrder || StringUtils.isBlank(payOrder.getParkOrderNumber())) { + if (null == payOrder || StringUtils.isBlank(payOrder.getUniqueParkOrderNumber())) { return new ResultData(Result.ERROR,"创建车场订单错误."); } - + if (payOrder.getFee() <= 0 ) { + return new ResultData(Result.ERROR,"当前无需支付停车费."); + } + String carFeeStr = paramMap.get("carFee"); + Integer carFee = Integer.parseInt(carFeeStr); + if (payOrder.getFee() != carFee) { + return new ResultData(Result.ERROR,"停车费已发生变更,请下拉刷新."); + } //查询当前停车商户的收款账号 - String mchId = ""; + WxMerchant parkMerchant = wxMerchantService.findParkMerchant(park); + if (null == parkMerchant) { + return new ResultData(Result.ERROR,"未设置停车商户."); + } + + WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { + return new ResultData(Result.ERROR,"停车商户未设置收款账号."); + } + StringBuffer attachSb = new StringBuffer("{") + .append("\"t\":").append(park.getTenantId()).append(",\"pt\":").append(park.getParentTenantId()) + .append(",\"v\":").append(park.getVendorType()) + .append(",\"u\":").append(user.getUserId()) + .append(",\"car:\":").append(carNumber) + .append(",\"fee\":").append(payOrder.getFee()) + .append(",\"ma\":").append(receiver.getReceiverAccount()) + .append(",\"mid\":").append(parkMerchant.getId()) + .append(",\"mn\":").append(parkMerchant.getName()) + .append("}"); + WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); + if(cAppInfo == null){ + new ResultData(Result.ERROR,ErrorCode.APP_ID_NOT_FOUND.name()); + } + WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); + if(payAccount == null){ + new ResultData(Result.ERROR,ErrorCode.API_KEY_NOT_FOUND.name()); + } //创建微信支付订单 - wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), carNumber, carNumber, carNumber, carNumber, null, carNumber, carNumber, carNumber, null); - return new ResultData(payOrder); + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), payOrder.getUniqueParkOrderNumber(), payOrder.getFee(), + "127.0.0.1", park.getPaidCallBack(), payAccount.getApiKey(), new Date()); + return new ResultData(wxResult); } catch (Exception e) { logger.error("park getCarStopFee error",e); return new ResultData(Result.ERROR,e.getMessage()); @@ -454,6 +500,38 @@ public class WxCarController extends BaseController { } } + /** + * 停车费支付订单列表 + * + * @param paramMap + * @return + */ + @GetMapping("/payOrderList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData payOrderList(Integer pageNum, Integer pageSize) { + WxCarPayOrder carPayOrder = new WxCarPayOrder(); + carPayOrder.updateTenantInfo(getTenantInfo()); + carPayOrder.setSortColumn(SortField.CreateTime_DESC.getValue()); + return new ResultData(wxParkPayService.listPayOrderAsPage(carPayOrder, pageNum, pageSize)); + } + + /** + * 停车费支付订单详情 + * + * @param paramMap + * @return + */ + @GetMapping("/payOrderDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + }) + public ResultData payOrderDetail(Long id) { + return new ResultData(wxParkPayService.detailWxCarPayOrder(id, getTenantInfo().getTenantId())); + } + @ApiOperation("券包分页列表接口") @GetMapping("/couponOrderList") @ApiImplicitParams({ diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java new file mode 100644 index 000000000..fc58e5de1 --- /dev/null +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java @@ -0,0 +1,175 @@ +package com.iformall.controller.callback.car.pay; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.controller.base.BaseController; +import com.iformall.controller.callback.car.WxParkCallBackBaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.FmInsideNotifyCarPaidSuccessMsg; +import com.iformall.domain.po.msg.FmInsideNotifyRefundSuccessMsg; +import com.iformall.domain.vo.WxCarCYFVo; +import com.iformall.enums.EnumCarCmd; +import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumMsgMqKey; +import com.iformall.enums.EnumMsgMqTag; +import com.iformall.enums.EnumMsgMqTopic; +import com.iformall.enums.EnumMsgRecordType; +import com.iformall.enums.EnumPayVersion; +import com.iformall.enums.EnumPayWay; +import com.iformall.exception.BizMessageException; +import com.iformall.exception.MallinkException; +import com.iformall.mq.MqBaseProducer; +import com.iformall.pay.WxPayment; +import com.iformall.service.*; +import com.iformall.service.park.impl.cyf.CYFUtil; +import com.iformall.service.park.impl.tjd.TJDUtil; +import com.iformall.utils.XmlUtil; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.Charset; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author: furunxin + * @Date: 2020/7/6 15:29 + * @Description: 车易付回调接口 + */ + +@Slf4j +@RestController +@RequestMapping("/carPaidCallback") +public class WxCarPaidCallBackController extends WxParkCallBackBaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxParkService wxParkService; + + @Autowired + WxCarCmdLogService wxCarCmdLogService; + + @Autowired + WxCUserService wxCUserService; + + @Autowired + WxCUserCarService wxCUserCarService; + + @Autowired + WxCouponSendService wxCouponSendService; + + @Autowired + WxCarPayRecordService wxCarPayRecordService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + private MqBaseProducer mqBaseProducer; + + /** + * @description 停车费支付成功通知 + * {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0} + * + * + * + * @Params [paramMap] + * @return com.iformall.common.Result + * @Author furunxin + * @Date 2020/7/8 上午8:27 + **/ + @RequestMapping(value = "/paid/{tenantId}") + public String parkInCallback(@PathVariable String tenantId,HttpServletRequest request) { + Map paramMap = null; + String response = ""; + String xml = ""; + try { + xml = IOUtils.toString(request.getInputStream(), Charset.forName("UTF-8")); + paramMap = WxPayment.xmlToMap(xml); + paramMap.put("tenantId", tenantId); + String jsonMsg = JSON.toJSONString(paramMap); + + FmInsideNotifyCarPaidSuccessMsg refundSuccessMsg = new FmInsideNotifyCarPaidSuccessMsg(); + refundSuccessMsg.setTenantId(tenantId); + refundSuccessMsg.setMsgType(EnumMsgRecordType.CAR_PAID.getCode()); + refundSuccessMsg.setDelayTimeLevel(3); + refundSuccessMsg.setPayWay(EnumPayWay.PAY_WAY_WECHAT.getCode()); + refundSuccessMsg.setPayVersion(EnumPayVersion.WX_PAY_V2.getCode()); + refundSuccessMsg.setJsonMsg(jsonMsg); + + // response = wxRefundOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); + mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + + logger.info("refund wxpay, notify success, req : " + xml + ", resp: " + response.toString()); + return response; + } catch (BizMessageException e) { + logger.error("refund wxpay, notify error, req: " + xml + ", e:" + e.getLocalizedMessage()); + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "FAIL"); + resultMap.put("return_msg", e.getMessage()); + return XmlUtil.getRequestXml(resultMap); + } catch (MallinkException e) { + logger.error("refund wxpay, notify error, req: " + xml + ", e:" +e.getLocalizedMessage()); + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "FAIL"); + resultMap.put("return_msg", e.getMessage()); + return XmlUtil.getRequestXml(resultMap); + } catch (Exception e) { + logger.error("refund wxpay, order create error, req: " + xml + ", e: " + e.getMessage()); + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "FAIL"); + resultMap.put("return_msg", e.getMessage()); + return XmlUtil.getRequestXml(resultMap); + } + } + + + /** + * @description 车易付 车辆离场通知 + * @Params [param] + * @return java.util.Map + * @Author furunxin + * @Date 2020/7/12 上午9:00 + **/ + @PostMapping(value = "/parkOut") + public Result parkOutCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] jieshunCarCallback parkOut: " + paramMap.toString()); + return super.parkOutCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PARK_OUT, paramMap); + + } + + @PostMapping(value = "/unbind") + public Result unbindCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] jieshunCarCallback unbind: " + paramMap.toString()); + //解析车易付参数 + return super.unbindCarCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_UNBIND, paramMap); + } + + @PostMapping(value = "/paid") + public Result paidCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] jieshunCarCallback paid: " + paramMap.toString()); + //解析车易付参数 + return super.paidCallback(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PAID, paramMap); + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index 57f96b817..2d1b0489c 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -74,6 +74,9 @@ public class MqBaseConsumer { @Autowired private FmInsideBasicUserTenantMsgServiceImpl FmInsideBasicUserTenantMsgService; + @Autowired + private FmInsideNotifyCarPaidSuccessMsgServiceImpl fmInsideNotifyCarPaidSuccessMsgServiceImpl; + public void doMessage(String message) { @@ -213,6 +216,11 @@ public class MqBaseConsumer { FmInsideBasicUserPushMsg msg = (FmInsideBasicUserPushMsg)JsonUtil.readValue(message,FmInsideBasicUserPushMsg.class); FmInsideBasicUserTenantMsgService.send(msg); } + + else if (EnumMsgRecordType.CAR_PAID.getCode().equals(baseMsg.getMsgType())) { + FmInsideNotifyCarPaidSuccessMsg msg = (FmInsideNotifyCarPaidSuccessMsg) JsonUtil.readValue(message,FmInsideNotifyCarPaidSuccessMsg.class); + fmInsideNotifyCarPaidSuccessMsgServiceImpl.send(msg); + } }catch (Throwable e){ log.error("consum received error: ", e); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 077686885..9d9c5c216 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -27,41 +27,16 @@ public class WxCarPayOrder extends TenantEntity { private String carNumber; @io.swagger.annotations.ApiModelProperty(value="支付金额(分)",name="payAmount") private Integer payAmount; - @io.swagger.annotations.ApiModelProperty(value="支付发起时间",name="payTimeStart") - private Date payTimeStart; - @io.swagger.annotations.ApiModelProperty(value="支付结束时间",name="payTimeEnd") - private Date payTimeEnd; - @io.swagger.annotations.ApiModelProperty(value="微信预支付交易会话标识",name="prepayId") - private String prepayId; + @io.swagger.annotations.ApiModelProperty(value="支付时间",name="payTime") + private Date payTime; @io.swagger.annotations.ApiModelProperty(value="微信生成的订单号",name="transactionId") private String transactionId; - @io.swagger.annotations.ApiModelProperty(value="支付渠道: 0-微信 1-支付宝 2-银联 ",name="payVendor") - private Integer payVendor; - @io.swagger.annotations.ApiModelProperty(value="支付渠道版本EnumPayVersion ",name="payVersion") - private Integer payVersion; - @io.swagger.annotations.ApiModelProperty(value="支付订单号",name="payOrderNo") - private String payOrderNo; - @io.swagger.annotations.ApiModelProperty(value="支付状态: 0-支付中;1-支付成功;2-支付失败",name="payOrderStatus") - private Integer payOrderStatus; - @io.swagger.annotations.ApiModelProperty(value="支付额外参数",name="payParam") - private String payParam; - @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") - private String failReason; - @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") - private Integer payEndFrom; + @io.swagger.annotations.ApiModelProperty(value="车场订单号",name="parkOrderNo") + private String parkOrderNo; @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") private String merchantAccount; @io.swagger.annotations.ApiModelProperty(value="商户编号",name="merchantId") private Long merchantId; @io.swagger.annotations.ApiModelProperty(value="商户名称",name="merchantName") private String merchantName; - @io.swagger.annotations.ApiModelProperty(value="订单金额(分)",name="amount") - private Integer amount; - @io.swagger.annotations.ApiModelProperty(value="优免金额(分)",name="freeAmount") - private Integer freeAmount; - @io.swagger.annotations.ApiModelProperty(value="优免券编号",name="freeCouponId") - private Long freeCouponId; - @io.swagger.annotations.ApiModelProperty(value="优免券名称",name="freeCouponName") - private String freeCouponName; - } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 650f72dd4..79b095fe3 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -400,5 +400,9 @@ public class WxMerchant extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="纬度",name="latitude") @TableField(exist = false) private BigDecimal latitude; + + //查询停车商户根据此字段 + @TableField(exist = false) + private Integer hasCarVendor; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java index 167a31b38..9f3a826ed 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPark.java @@ -40,4 +40,6 @@ public class WxPark extends TenantEntity { private String couponParams; @io.swagger.annotations.ApiModelProperty(value="会员小程序是否支持支付enumYesOrNo",name="supportPay") private Integer supportPay; + @io.swagger.annotations.ApiModelProperty(value="支付完成回调地址",name="paidCallBack") + private String paidCallBack; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideNotifyCarPaidSuccessMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideNotifyCarPaidSuccessMsg.java new file mode 100644 index 000000000..ccfbd46d3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideNotifyCarPaidSuccessMsg.java @@ -0,0 +1,20 @@ +package com.iformall.domain.po.msg; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class FmInsideNotifyCarPaidSuccessMsg extends BaseMsg { + + @io.swagger.annotations.ApiModelProperty(value = "支付渠道", name = "payWay") + private Integer payWay; + + @io.swagger.annotations.ApiModelProperty(value = "支付渠道版本", name = "payVersion") + private Integer payVersion; + + @io.swagger.annotations.ApiModelProperty(value = "消息内容", name = "jsonMsg") + private String jsonMsg; +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index d7ce73b5c..c14884068 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -33,6 +33,8 @@ public enum EnumMsgRecordType { MALL_COO_USER_PUSH(110, "猫酷同步会员"), MEMBER_UPDATE_TENANT(111, "集团会员标签广场"), + + CAR_PAID(112,"停车支付回调"), INSIDE_ORDER_PUSH_DELIVERY(200, "2.0核销同步"), ; diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java index d8c33135f..dc7f51a6a 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java @@ -13,4 +13,6 @@ public interface WxCarPayOrderMapper extends CommonMapper { List findList(WxCarPayOrder wxCarPayOrder); + WxCarPayOrder findOneByParkOderNo(@Param("parkOrderNo")String parkOrderNo,@Param("tenantId")String tenantId); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index e38ab6ede..ca3fc4226 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -208,4 +208,6 @@ public interface WxMerchantService { WxMerchant findBrandAdmin(TenantEntity tenantEntity, Long brandId); Map findMerchantMap(WxMerchant merchantQ); + + WxMerchant findParkMerchant(TenantEntity tenantEntity); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index b0e55daaa..827adc5be 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -22,6 +22,8 @@ import com.iformall.service.*; import com.iformall.service.util.CouponCacheUtils; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; +import com.iformall.utils.RedisCacheUtils; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -1937,4 +1939,23 @@ public class WxMerchantServiceImpl implements WxMerchantService { } return merchantMap; } + + @Override + public WxMerchant findParkMerchant(TenantEntity tenantEntity) { + WxMerchant record = null; + String key = Constant.parkMerchantPrev + tenantEntity.getTenantId(); + record = RedisCacheUtils.getCacheObject(redisTemplate, key, WxMerchant.class); + if(record == null){ + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(tenantEntity); + merchantQ.setHasCarVendor(1); + List merchantList = wxMerchantMapper.findList(merchantQ); + if (null != merchantList && merchantList.size() > 0 ) { + record = merchantList.get(0); + RedisCacheUtils.cache(redisTemplate, key, record, 3600*24*7); + } + } + return record; + + } } diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java new file mode 100644 index 000000000..9f8dd0b03 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java @@ -0,0 +1,38 @@ +package com.iformall.service.msg.impl; + +import com.alibaba.fastjson.JSON; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.FmInsideNotifyCarPaidSuccessMsg; +import com.iformall.domain.po.msg.FmInsideNotifyRefundSuccessMsg; +import com.iformall.enums.EnumPayVersion; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.WxRefundOrderService; +import com.iformall.service.msg.MsgSendService; +import com.iformall.service.park.pay.WxParkPayService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * + * @author Stormeye Wu + * @date 2019/5/10 + */ +@Service +public class FmInsideNotifyCarPaidSuccessMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxParkPayService wxParkPayService; + + @Override + public void send(BaseMsg baseMsg) throws Exception { + FmInsideNotifyCarPaidSuccessMsg msg = (FmInsideNotifyCarPaidSuccessMsg)baseMsg; + Map paramMap = JSON.parseObject(msg.getJsonMsg(), Map.class); + wxParkPayService.handlePaidCallBack(paramMap); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java index b8f9e2784..e8f1619a4 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java @@ -62,7 +62,7 @@ public interface ParkAdapterService { /** * 停车订单成功通知车场 */ - ParkNotifyPaid notifyPaid(Map paramMap,WxPark park,String parkOrderNumber) throws Exception; + void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception; /** * 查询停车场状态, 给老的集成用 diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java index 6f1bb7c09..251653088 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java @@ -3,19 +3,39 @@ package com.iformall.service.park.entity; import java.io.Serializable; import org.apache.commons.lang3.StringUtils; +import com.iformall.enums.EnumCarVendor; + public class ParkCreatePayOrder implements Serializable{ private static final long serialVersionUID = 5585069626450856545L; + + private EnumCarVendor carVendor; + /*停车场返回的订单ID**/ private String parkOrderNumber=""; + /*停车费**/ + private Integer fee; - public ParkCreatePayOrder(String parkOrderNumber) { + public ParkCreatePayOrder(EnumCarVendor carVendor,String parkOrderNumber,Integer fee) { + this.carVendor = carVendor; + if (!StringUtils.isBlank(parkOrderNumber)) { this.parkOrderNumber = parkOrderNumber; } + if (null != fee) { + this.fee = fee; + } } - public String getParkOrderNumber() { - return parkOrderNumber; + public String getUniqueParkOrderNumber() { + if (!StringUtils.isBlank(parkOrderNumber)) { + return carVendor.getMessage()+"_"+parkOrderNumber; + } + return null; + } + + public Integer getFee() { + return fee; } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java index 2bf627ede..962c03e98 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java @@ -8,114 +8,24 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor public class ParkNotifyPaid implements Serializable{ private static final long serialVersionUID = 6478840764729191197L; /*停车场返回的订单ID**/ - private String orderId=""; - /*入场时间 格式:yyyy-MM-dd HH:mm:ss**/ - private String entranceTime=""; - /*计费结束时间 格式:yyyy-MM-dd HH:mm:ss**/ - private String exitTime=""; - /*停车费**/ - private String remainingFee=""; - /*跳转的停车费支付小程序appId**/ - private String appId=""; - /*支付小程序页面路径**/ - private String payPath=""; - /*给支付小程序的额外数据**/ - private Map extraData=new HashMap(); - /*备注**/ - private String remark=""; - private String sysNotice="";//系统提示,非车厂提示; - - - public ParkNotifyPaid(String orderId,Date startTime,Date endTime,String fee,String appId,String payPath,Map extraData,String remark,String sysNotice) { - if (!StringUtils.isBlank(orderId)) { - this.orderId = orderId; - } - if (null != startTime) { - this.entranceTime = getLocalDate(startTime); - } - if (null != endTime) { - this.exitTime = getLocalDate(endTime); - } - if (!StringUtils.isBlank(fee)) { - this.remainingFee = fee; - } - if (!StringUtils.isBlank(appId)) { - this.appId = appId; - } - if (!StringUtils.isBlank(payPath)) { - this.payPath = payPath; - } - if (null != extraData) { - this.extraData = extraData; - } - if (!StringUtils.isBlank(remark)) { - this.remark = remark; - } - if (!StringUtils.isBlank(sysNotice)) { - this.sysNotice = sysNotice; - } - } + private String tenantId; + /*停车场订单**/ + private String parkOrderNo; + /*支付金额**/ + private Integer fee; + /*支付时间 格式:yyyy-MM-dd HH:mm:ss**/ + private Date payTime; - private String getLocalDate(Date date){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - return sdf.format(date); - } - public String getOrderId() { - return orderId; - } - public void setOrderId(String orderId) { - this.orderId = orderId; - } - public String getEntranceTime() { - return entranceTime; - } - public void setEntranceTime(String entranceTime) { - this.entranceTime = entranceTime; - } - public String getExitTime() { - return exitTime; - } - public void setExitTime(String exitTime) { - this.exitTime = exitTime; - } - public String getRemainingFee() { - return remainingFee; - } - public void setRemainingFee(String remainingFee) { - this.remainingFee = remainingFee; - } - public String getAppId() { - return appId; - } - public void setAppId(String appId) { - this.appId = appId; - } - public String getPayPath() { - return payPath; - } - public void setPayPath(String payPath) { - this.payPath = payPath; - } - public Map getExtraData() { - return extraData; - } - public void setExtraData(Map extraData) { - this.extraData = extraData; - } - public String getRemark() { - return remark; - } - public void setRemark(String remark) { - this.remark = remark; - } - public String getSysNotice() { - return sysNotice; - } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java index 97804b226..66ce092d1 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java @@ -122,10 +122,8 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { - // TODO Auto-generated method stub - return null; } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java index b461ccba9..c970aa25d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java @@ -205,9 +205,7 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) - throws Exception { - return null; + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java index e499f70e2..0afd0bce8 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java @@ -88,10 +88,7 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) - throws Exception { - // TODO Auto-generated method stub - return null; + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index afa6145ff..341a5ec9b 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -240,9 +240,7 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) - throws Exception { - return null; + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java index 990111578..6915c2794 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java @@ -349,8 +349,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) throws Exception { - return null; + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java index 0d3878e94..98cf1bfbc 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java @@ -107,9 +107,6 @@ public class ShangAnParkService extends BaseParkService implements ParkAdapterSe } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) - throws Exception { - // TODO Auto-generated method stub - return null; + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java index 07d44e056..30f2b9bc4 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java @@ -268,9 +268,6 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic } @Override - public ParkNotifyPaid notifyPaid(Map paramMap, WxPark park, String parkOrderNumber) - throws Exception { - // TODO Auto-generated method stub - return null; + public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index c3b611849..5be97c9ef 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -1,9 +1,12 @@ package com.iformall.service.park.pay; import java.util.Date; +import java.util.Map; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumCarVendor; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; public interface WxParkPayService { @@ -12,4 +15,12 @@ public interface WxParkPayService { public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; + + public String handlePaidCallBack(Map paramMap); + + public void handlePaidSuccess(TenantEntity tenantEntity,Long cUserId,Integer carVendor,String carNumber,String parkOrderNo, + Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName) throws Exception; + + public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index a04015719..83e43749c 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -1,15 +1,42 @@ package com.iformall.service.park.pay; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxPayAccount; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.domain.po.WxRefundOrder; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumPayWay; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxAppinfoMapper; import com.iformall.mapper.WxCarPayOrderMapper; +import com.iformall.mapper.WxPayAccountMapper; +import com.iformall.pay.WxPayment; import com.iformall.service.ExcelService; +import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; +import com.iformall.utils.CipherUtil; +import com.iformall.utils.DateUtils; +import com.iformall.utils.RedisLock; +import com.iformall.utils.XmlUtil; import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +56,18 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Autowired WxMiniAppPayAdapterService wxMiniAppPayAdapterService; + + @Autowired + WxAppinfoMapper wxAppinfoMapper; + + @Autowired + WxPayAccountMapper wxPayAccountMapper; + + @Autowired + ParkFactory parkFactory; + + @Autowired + RedisLock redisLock; @Override public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { @@ -40,7 +79,123 @@ public class WxParkPayServiceImpl implements WxParkPayService { Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); } + + private String notifyErrorResult(String msg) { + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "FAIL"); + resultMap.put("return_msg", msg); + return XmlUtil.getRequestXml(resultMap); + } + private String notifySuccessResult() { + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "SUCCESS"); + resultMap.put("return_msg", "OK"); + return XmlUtil.getRequestXml(resultMap); + } - + @Override + public String handlePaidCallBack(Map paramMap) { + //支付返回消息 + String returnCode = paramMap.get("return_code"); + if ("SUCCESS".equals(returnCode)) { + String resultCode = paramMap.get("result_code"); + if ("SUCCESS".equals(resultCode)) { + //判断支付金额是否大于0 + String cashFeeStr = paramMap.get("cash_fee"); + Integer cashFee = Integer.parseInt(cashFeeStr); + if (cashFee > 0 ) { + try { + String parkOrderNo = paramMap.get("out_trade_no"); + String time_end = paramMap.get("time_end"); + String transcationId = paramMap.get("transaction_id"); + + String attach = paramMap.get("attach"); + JSONObject attachObj = JSON.parseObject(attach); + String tenantId = attachObj.getString("t"); + String parentTenantId = attachObj.getString("pt"); + TenantEntity te = new TenantEntity(); + te.setTenantId(tenantId); + te.setParentTenantId(parentTenantId); + Integer carVendor = attachObj.getInteger("v"); + Long cUserId = attachObj.getLong("u"); + String carNumber = attachObj.getString("car"); + String merchantAccount = attachObj.getString("ma"); + Long merchantId = attachObj.getLong("mid"); + String merchantName = attachObj.getString("mn"); + + handlePaidSuccess(te,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr), + DateUtils.string2Date(time_end, DateUtils.DATE_PATTERN_ALL_NOSPACE).getTime(),transcationId, + merchantAccount,merchantId,merchantName); + } catch (Exception e) { + logger.error("handlePaidCallBackError.",e); + return notifyErrorResult(e.getMessage()); + } + } + return notifySuccessResult(); + }else { + String errorMsg = paramMap.get("err_code_des"); + return notifyErrorResult(errorMsg); + } + }else { + String errorMsg = paramMap.get("return_msg"); + return notifyErrorResult(errorMsg); + } + } + + @Override + public void handlePaidSuccess(TenantEntity tenantEntity,Long cUserId,Integer carVendor,String carNumber, + String parkOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, + Long merchantId,String merchantName) throws Exception{ + //查询该笔订单是否已经存在 + WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(parkOrderNo, tenantEntity.getTenantId()); + if (null == payOrder) { + //此处需要加锁,防止并发设置 + long time = System.currentTimeMillis() + RedisLock.TIMEOUT; + String timeStr = String.valueOf(time); + boolean stocksetlock = redisLock.lock("carPayOrderLock_"+parkOrderNo, timeStr); + if (stocksetlock) { + try { + //创建停车支付订单记录 + final IdWorker idworker = IdWorker.get(); + payOrder = new WxCarPayOrder(); + Long id = idworker.nextId(); + payOrder.setId(id); + payOrder.updateTenantInfo(tenantEntity); + payOrder.setCreateTime(new Date()); + payOrder.setUpdateTime(new Date()); + payOrder.setCUserId(cUserId); + payOrder.setCarNumber(carNumber); + payOrder.setPayAmount(fee); + payOrder.setPayTime(paidTime); + payOrder.setTransactionId(transcationId); + payOrder.setParkOrderNo(parkOrderNo); + payOrder.setMerchantAccount(merchantAccount); + payOrder.setMerchantId(merchantId); + payOrder.setMerchantName(merchantName); + wxCarPayOrderMapper.insert(payOrder); + + //通知车场支付成功 + try { + parkFactory.getParkService(carVendor).notifyPaid(new ParkNotifyPaid(tenantEntity.getTenantId(), parkOrderNo, fee, paidTime)); + }catch(Exception e) { + //TODO 重试 + 111111111 + + } + + }catch(Exception e) { + logger.error("handlePaidSuccess fail.",e); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"支付同步失败"+parkOrderNo); + }finally { + redisLock.unlock("carPayOrderLock_"+parkOrderNo, timeStr); + } + } + } + } + + @Override + public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId) { + return wxCarPayOrderMapper.selectById(id, tenantId); + } } diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index d5b8c76ca..2dec1945d 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -108,6 +108,8 @@ public class Constant { public static final String levelConfigPrev = "levelConfig:"; public static final String mallBuildingPrev = "mallBuilding:"; + + public static final String parkMerchantPrev = "parkMerchant:"; //wiwide系统常量 public static final Integer wiwideOldPlat = 0;//老平台 diff --git a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java index 1fcdbf48d..6e6948b0d 100755 --- a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java @@ -28,6 +28,8 @@ public class DateUtils { public final static String[] weekObj=new String[]{"日","一","二","三","四","五","六"}; public final static String DATE_PATTERN_NOSPACE = "yyyyMMdd"; + + public final static String DATE_PATTERN_ALL_NOSPACE = "yyyyMMddHHmmss"; public static String format(Date date) { return format(date, DATE_PATTERN); diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml index 53406d8a9..7e835d4a4 100644 --- a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -10,43 +10,26 @@ - - - + - - - - - - - + - - - - `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`car_number`,`pay_amount`, - `pay_time_start`,`pay_time_end`,`prepay_id`,`transaction_id`,`pay_vendor`,`pay_version`,`pay_order_no`, - `pay_order_status`,`pay_param`,`fail_reason`,`pay_end_from`,`merchant_account`,`merchant_id`,`merchant_name`, - `amount`,`free_amount`,`free_coupon_id`,`free_coupon_name` + `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`merchant_id`,`merchant_name` - where 1 = 1 + where `tenant_id` = #{tenantId} and `id` = #{id} - - and `tenant_id` = #{tenantId} - and `parent_tenant_id` = #{parentTenantId} @@ -71,42 +54,18 @@ and `pay_amount` = #{payAmount} - - and `pay_time_start` = #{payTimeStart} - - - - and `pay_time_end` = #{payTimeEnd} - - - - and `prepay_id` like concat('%', #{prepayId},'%') + + and `pay_time` = #{payTime} and `transaction_id` like concat('%', #{transactionId},'%') - - and `pay_vendor` = #{payVendor} - - - - and `pay_version` = #{payVersion} - - - - and `pay_order_no` like concat('%', #{payOrderNo},'%') + + and `park_order_no` = #{parkOrderNo} - - and `pay_order_status` = #{payOrderStatus} - - - - and `fail_reason` like concat('%', #{failReason},'%') - - and `merchant_account` like concat('%', #{merchantAccount},'%') @@ -119,10 +78,6 @@ and `merchant_name` like concat('%', #{merchantName},'%') - - and `free_coupon_id` = #{freeCouponId} - - and id in @@ -136,11 +91,17 @@ select from wx_car_pay_order where id = #{id} and tenant_id = #{tenantId} - select from wx_car_pay_order + + diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index c224edefd..618d4e268 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -104,6 +104,10 @@ and m.`car_vendor_type` = #{carVendorType} + + + and m.`car_vendor_type` is not null and m.`car_vendor_type` > 0 + and m.`business_id` = #{businessId} diff --git a/mallinkService/src/main/resources/mapper/WxParkMapper.xml b/mallinkService/src/main/resources/mapper/WxParkMapper.xml index e37d3a3e5..5af0856f6 100644 --- a/mallinkService/src/main/resources/mapper/WxParkMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxParkMapper.xml @@ -18,11 +18,12 @@ + `id`,`tenant_id`,`parent_tenant_id`,`img_url`,`addr`,`number`,`entry_exit`,`stop_fee`,`create_date`,`update_date`,`park_id`, - `parking_id`,`vendor_type`,`vendor_params`,`coupon_params`,`support_pay` + `parking_id`,`vendor_type`,`vendor_params`,`coupon_params`,`support_pay`,`paid_call_back` From 8f951ef0637d1e032e5ad83377e7dd34a408b580 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 8 Feb 2023 19:05:33 +0800 Subject: [PATCH 05/90] fix car pay --- .../schedule/CarPaidNotifySchedule.java | 91 +++++++++++++++++++ .../com/iformall/domain/po/WxCarPayOrder.java | 13 +++ .../park/pay/WxParkPayServiceImpl.java | 12 ++- .../resources/mapper/WxCarPayOrderMapper.xml | 19 +++- 4 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java new file mode 100644 index 000000000..8cf713d14 --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java @@ -0,0 +1,91 @@ +package com.iformall.schedule; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iformall.domain.po.WxActivity; +import com.iformall.domain.po.WxActivityJoin; +import com.iformall.domain.po.WxCampaign; +import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.msg.WxMsgRecord; +import com.iformall.enums.*; +import com.iformall.mapper.WxActivityJoinMapper; +import com.iformall.mapper.WxActivityMapper; +import com.iformall.mapper.WxCampaignMapper; +import com.iformall.mapper.WxCarPayOrderMapper; +import com.iformall.mapper.WxMallMapper; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.utils.DateUtils; +import org.apache.commons.collections.map.HashedMap; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author gongbiao + */ +@Component +public class CarPaidNotifySchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxCarPayOrderMapper wxCarPayOrderMapper; + + @Autowired + private WxMallMapper wxMallMapper; + + @Autowired + ParkFactory parkFactory; + + private List getMalls() { + WxMall wxMall = new WxMall(); + return wxMallMapper.findList(wxMall); + } + + /** + * 5分钟执行一次 + */ + @Async + @Scheduled(cron = "0 */5 * * * ?") + public void sendMsg() { + List malls = getMalls(); + for (WxMall mall : malls) { + WxCarPayOrder payOrder = new WxCarPayOrder(); + payOrder.updateTenantInfo(mall); + payOrder.setNotifyCountLimit(10); + payOrder.setParkNotify(EnumYesOrNo.NO.getCode()); + List orderList = wxCarPayOrderMapper.findList(payOrder); + if (null != orderList && orderList.size() > 0 ) { + for (int i = 0 ; i < orderList.size(); i++) { + WxCarPayOrder _po = orderList.get(i); + //通知车场支付成功 + try { + parkFactory.getParkService(_po.getCarVendor()).notifyPaid(new ParkNotifyPaid(_po.getTenantId(), _po.getParkOrderNo(), _po.getPayAmount(), _po.getPayTime())); + payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); + payOrder.setUpdateTime(new Date()); + payOrder.setNotifyCount(payOrder.getNotifyCount()+1); + wxCarPayOrderMapper.updateById(payOrder); + }catch(Exception e) { + payOrder.setParkNotify(EnumYesOrNo.NO.getCode()); + payOrder.setNotifyFailReason(e.getMessage()); + payOrder.setNotifyCount(payOrder.getNotifyCount()+1); + payOrder.setUpdateTime(new Date()); + wxCarPayOrderMapper.updateById(payOrder); + } + } + } + } + } + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 9d9c5c216..4d14876ce 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; @@ -39,4 +40,16 @@ public class WxCarPayOrder extends TenantEntity { private Long merchantId; @io.swagger.annotations.ApiModelProperty(value="商户名称",name="merchantName") private String merchantName; + @io.swagger.annotations.ApiModelProperty(value="是否已通知车场EnumYesOrNo",name="parkNotify") + private Integer parkNotify; + @io.swagger.annotations.ApiModelProperty(value="通知失败原因",name="notifyFailReason") + private String notifyFailReason; + @io.swagger.annotations.ApiModelProperty(value="通知重试次数",name="notifyCount") + private Integer notifyCount; + @io.swagger.annotations.ApiModelProperty(value="车场类型EnumCarVendor",name="carVendor") + private Integer carVendor; + + + @TableField(exist = false) + private Integer notifyCountLimit; } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index 83e43749c..1f29f15d8 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -15,6 +15,7 @@ import com.iformall.domain.po.WxRefundOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumCarVendor; import com.iformall.enums.EnumPayWay; +import com.iformall.enums.EnumYesOrNo; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxAppinfoMapper; import com.iformall.mapper.WxCarPayOrderMapper; @@ -172,15 +173,20 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.setMerchantAccount(merchantAccount); payOrder.setMerchantId(merchantId); payOrder.setMerchantName(merchantName); + payOrder.setCarVendor(carVendor); wxCarPayOrderMapper.insert(payOrder); //通知车场支付成功 try { parkFactory.getParkService(carVendor).notifyPaid(new ParkNotifyPaid(tenantEntity.getTenantId(), parkOrderNo, fee, paidTime)); + payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); + payOrder.setUpdateTime(new Date()); + wxCarPayOrderMapper.updateById(payOrder); }catch(Exception e) { - //TODO 重试 - 111111111 - + payOrder.setParkNotify(EnumYesOrNo.NO.getCode()); + payOrder.setNotifyFailReason(e.getMessage()); + payOrder.setUpdateTime(new Date()); + wxCarPayOrderMapper.updateById(payOrder); } }catch(Exception e) { diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml index 7e835d4a4..b95331070 100644 --- a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -16,11 +16,16 @@ + + + + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`car_number`,`pay_amount`, - `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`merchant_id`,`merchant_name` + `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`merchant_id`,`merchant_name`,`park_notify`, + `notify_fail_reason`,`notify_count`,`car_vendor` @@ -78,6 +83,18 @@ and `merchant_name` like concat('%', #{merchantName},'%') + + and `park_notify` = #{parkNotify} + + + + and `notify_count` <= #{notifyCountLimit} + + + + and `car_vendor` <= #{carVendor} + + and id in From 0ba1f25578f857b8eb27f99a8f31aa7f00b9ea3d Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 8 Feb 2023 19:08:52 +0800 Subject: [PATCH 06/90] fix car pay --- .../src/main/resources/db/migration/V20230200001__car.sql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 305bd4d90..932ec9a08 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -9,10 +9,14 @@ CREATE TABLE `wx_car_pay_order` ( `pay_amount` int(11) NOT NULL COMMENT '支付金额(分)', `pay_time` datetime NOT NULL COMMENT '支付时间', `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', - `park_order_no` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', + `park_order_no` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', `merchant_id` int(20) NOT NULL COMMENT '商户编号', `merchant_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商户名称', + `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', + `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', + `notify_count` int(3) NOT NULL DEFAULT '0' COMMENT '通知次数', + `car_vendor` int(1) NOT NULL COMMENT '车场类型EnumCarVendor', PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `pay_order_no` (`park_order_no`) From f2fe081c09c6a12fb6a03c062dc98d22624fff2a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 9 Feb 2023 20:12:32 +0800 Subject: [PATCH 07/90] fix car pay --- .../iformall/controller/WxCarController.java | 7 +- .../car/fute/WxCarFuteCallBackController.java | 111 +++++++++ .../schedule/CarPaidNotifySchedule.java | 18 +- .../java/com/iformall/enums/EnumCarCmd.java | 7 +- .../com/iformall/enums/EnumCarVendor.java | 3 +- .../service/park/ParkAdapterService.java | 2 +- .../iformall/service/park/ParkFactory.java | 8 + .../park/entity/ParkCreatePayOrder.java | 23 +- .../service/park/entity/ParkNotifyPaid.java | 4 +- .../service/park/entity/ParkStopFee.java | 2 +- .../park/impl/bolink/BoLinkParkService.java | 2 +- .../service/park/impl/cyf/CYFParkService.java | 2 +- .../park/impl/dahua/DaHuaParkService.java | 2 +- .../impl/fute/FuteParkCallbackService.java | 111 +++++++++ .../park/impl/fute/FuteParkService.java | 178 +++++++++++++ .../service/park/impl/fute/FuteUtil.java | 234 ++++++++++++++++++ .../HaiKangWeiShiParkService.java | 2 +- .../park/impl/jieshun/JieShunParkService.java | 2 +- .../park/impl/shangan/ShangAnParkService.java | 2 +- .../service/park/impl/tjd/TJDParkService.java | 2 +- .../service/park/pay/WxParkPayService.java | 3 +- .../park/pay/WxParkPayServiceImpl.java | 40 ++- 22 files changed, 728 insertions(+), 37 deletions(-) create mode 100644 mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java create mode 100644 mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index af059847e..b9c9b3f08 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -163,6 +163,7 @@ public class WxCarController extends BaseController { if (!StringUtils.isBlank(vendorPersonId)) { resultMap.put("vendorPersonId", vendorPersonId); } + resultMap.put("supportPay", park.getSupportPay()); return new ResultData(resultMap); } catch (Exception e) { logger.error("park init error",e); @@ -450,7 +451,9 @@ public class WxCarController extends BaseController { try { //创建车场支付订单 ParkCreatePayOrder payOrder = parkFactory.getParkService(park.getVendorType()).createPayOrder(paramMap, park,carNumber); - if (null == payOrder || StringUtils.isBlank(payOrder.getUniqueParkOrderNumber())) { + EnumCarVendor carVendor = EnumCarVendor.getEnum(park.getVendorType()); + String uniquePayOrderNo = ParkCreatePayOrder.getUniqueParkOrderNumber(payOrder.getParkOrderNumber(), carVendor); + if (null == payOrder || StringUtils.isBlank(uniquePayOrderNo)) { return new ResultData(Result.ERROR,"创建车场订单错误."); } if (payOrder.getFee() <= 0 ) { @@ -490,7 +493,7 @@ public class WxCarController extends BaseController { new ResultData(Result.ERROR,ErrorCode.API_KEY_NOT_FOUND.name()); } //创建微信支付订单 - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), payOrder.getUniqueParkOrderNumber(), payOrder.getFee(), + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), payAccount.getApiKey(), new Date()); return new ResultData(wxResult); } catch (Exception e) { diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java new file mode 100644 index 000000000..562b93676 --- /dev/null +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java @@ -0,0 +1,111 @@ +package com.iformall.controller.callback.car.fute; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.controller.base.BaseController; +import com.iformall.controller.callback.car.WxParkCallBackBaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCarCYFVo; +import com.iformall.enums.EnumCarCmd; +import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.*; +import com.iformall.service.park.impl.cyf.CYFUtil; +import com.iformall.service.park.impl.tjd.TJDUtil; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author: furunxin + * @Date: 2020/7/6 15:29 + * @Description: 车易付回调接口 + */ + +@Slf4j +@RestController +@RequestMapping("/futeCarCallback") +public class WxCarFuteCallBackController extends WxParkCallBackBaseController { + + @Autowired + WxParkService wxParkService; + + @Autowired + WxCarCmdLogService wxCarCmdLogService; + + @Autowired + WxCUserService wxCUserService; + + @Autowired + WxCUserCarService wxCUserCarService; + + @Autowired + WxCouponSendService wxCouponSendService; + + @Autowired + WxCarPayRecordService wxCarPayRecordService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + /** + * @description 捷顺 车辆入场通知 + * {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0} + * + * + * + * @Params [paramMap] + * @return com.iformall.common.Result + * @Author furunxin + * @Date 2020/7/8 上午8:27 + **/ + @PostMapping(value = "/parkIn") + public Result parkInCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] futeCarCallback parkIn: " + paramMap.toString()); + //解析车易付参数 + return super.parkInCallBack(EnumCarVendor.CAR_FUTE, EnumCarCmd.CAR_FUTE_CALLBACK_PARK_IN, paramMap); + } + + + /** + * @description 车易付 车辆离场通知 + * @Params [param] + * @return java.util.Map + * @Author furunxin + * @Date 2020/7/12 上午9:00 + **/ + @PostMapping(value = "/parkOut") + public Result parkOutCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] futeCarCallback parkOut: " + paramMap.toString()); + return super.parkOutCallBack(EnumCarVendor.CAR_FUTE, EnumCarCmd.CAR_FUTE_CALLBACK_PARK_OUT, paramMap); + + } + + @PostMapping(value = "/unbind") + public Result unbindCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] futeCarCallback unbind: " + paramMap.toString()); + //解析车易付参数 + return super.unbindCarCallBack(EnumCarVendor.CAR_FUTE, EnumCarCmd.CAR_FUTE_CALLBACK_UNBIND, paramMap); + } + + @PostMapping(value = "/paid") + public Result paidCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] futeCarCallback paid: " + paramMap.toString()); + //解析车易付参数 + return super.paidCallback(EnumCarVendor.CAR_FUTE, EnumCarCmd.CAR_FUTE_CALLBACK_PAID, paramMap); + } +} diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java index 8cf713d14..0c41c63a6 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java @@ -6,6 +6,8 @@ import com.iformall.domain.po.WxActivityJoin; import com.iformall.domain.po.WxCampaign; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.WxPark; +import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.*; import com.iformall.mapper.WxActivityJoinMapper; @@ -14,7 +16,9 @@ import com.iformall.mapper.WxCampaignMapper; import com.iformall.mapper.WxCarPayOrderMapper; import com.iformall.mapper.WxMallMapper; import com.iformall.mq.MqBaseProducer; +import com.iformall.service.WxParkService; import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.utils.DateUtils; import org.apache.commons.collections.map.HashedMap; @@ -48,10 +52,20 @@ public class CarPaidNotifySchedule { @Autowired ParkFactory parkFactory; + @Autowired + WxParkService wxParkService; + private List getMalls() { WxMall wxMall = new WxMall(); return wxMallMapper.findList(wxMall); } + + private WxPark getCurrentPark(TenantEntity tenantEntity) { + WxPark parkQ = new WxPark(); + parkQ.updateTenantInfo(tenantEntity); + WxPark wxPark = wxParkService.getByObj(parkQ); + return wxPark; + } /** * 5分钟执行一次 @@ -61,6 +75,7 @@ public class CarPaidNotifySchedule { public void sendMsg() { List malls = getMalls(); for (WxMall mall : malls) { + WxPark wxPark = getCurrentPark(mall); WxCarPayOrder payOrder = new WxCarPayOrder(); payOrder.updateTenantInfo(mall); payOrder.setNotifyCountLimit(10); @@ -71,7 +86,8 @@ public class CarPaidNotifySchedule { WxCarPayOrder _po = orderList.get(i); //通知车场支付成功 try { - parkFactory.getParkService(_po.getCarVendor()).notifyPaid(new ParkNotifyPaid(_po.getTenantId(), _po.getParkOrderNo(), _po.getPayAmount(), _po.getPayTime())); + String payOrderNo = ParkCreatePayOrder.getUniqueParkOrderNumber(_po.getParkOrderNo(), EnumCarVendor.getEnum(_po.getCarVendor())); + parkFactory.getParkService(_po.getCarVendor()).notifyPaid(wxPark,new ParkNotifyPaid(_po.getTenantId(),payOrderNo,_po.getParkOrderNo(), _po.getPayAmount(), _po.getPayTime())); payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); payOrder.setUpdateTime(new Date()); payOrder.setNotifyCount(payOrder.getNotifyCount()+1); diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java index 77636b9de..66ae8bd10 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java @@ -34,7 +34,12 @@ public enum EnumCarCmd { CAR_HAIKANGWEISHI_CALLBACK_PARK_IN(628,"海康进场通知"), CAR_HAIKANGWEISHI_CALLBACK_PARK_OUT(629,"海康出场通知"), CAR_HAIKANGWEISHI_CALLBACK_UNBIND(630,"海康解绑车牌通知"), - CAR_HAIKANGWEISHI_CALLBACK_PAID(631,"海康支付通知") + CAR_HAIKANGWEISHI_CALLBACK_PAID(631,"海康支付通知"), + + CAR_FUTE_CALLBACK_PARK_IN(628,"福特进场通知"), + CAR_FUTE_CALLBACK_PARK_OUT(629,"福特出场通知"), + CAR_FUTE_CALLBACK_UNBIND(630,"福特解绑车牌通知"), + CAR_FUTE_CALLBACK_PAID(631,"福特支付通知") ; public static EnumCarCmd getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java index f1c3362c5..978c9b812 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java @@ -14,7 +14,8 @@ public enum EnumCarVendor { CAR_BOLINK(5, "BoLink",false), CAE_CYF(6,"CYF",false), CAR_JIESHUN(7,"JIESHUN",true), - CAR_HAIKANGWEISHI(8,"HAIKANGWEISHI",true) + CAR_HAIKANGWEISHI(8,"HAIKANGWEISHI",true), + CAR_FUTE(9,"FUTE",false)//深圳市福特智能科技有限公司 ; public static EnumCarVendor getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java index e8f1619a4..42f96ebf4 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java @@ -62,7 +62,7 @@ public interface ParkAdapterService { /** * 停车订单成功通知车场 */ - void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception; + void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception; /** * 查询停车场状态, 给老的集成用 diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java b/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java index 24899d84c..da184f34a 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java @@ -13,6 +13,8 @@ import com.iformall.service.park.impl.bolink.BoLinkParkService; import com.iformall.service.park.impl.cyf.CYFParkCallbackService; import com.iformall.service.park.impl.cyf.CYFParkService; import com.iformall.service.park.impl.dahua.DaHuaParkService; +import com.iformall.service.park.impl.fute.FuteParkCallbackService; +import com.iformall.service.park.impl.fute.FuteParkService; import com.iformall.service.park.impl.haikangweishi.HaiKangWeiShiParkCallbackService; import com.iformall.service.park.impl.haikangweishi.HaiKangWeiShiParkService; import com.iformall.service.park.impl.jieshun.JieShunParkCallbackService; @@ -37,6 +39,8 @@ public class ParkFactory { JieShunParkService jieshunService; @Autowired HaiKangWeiShiParkService haikangWeishiService; + @Autowired + FuteParkService futeParkService; @Autowired CYFParkCallbackService cyfCallbackService; @@ -44,6 +48,8 @@ public class ParkFactory { JieShunParkCallbackService jieshunCallBackService; @Autowired HaiKangWeiShiParkCallbackService haikangWeishiCallBackService; + @Autowired + FuteParkCallbackService futeParkCallbackService; private Map parkServiceMap ; private Map enumMap ; @@ -63,6 +69,7 @@ public class ParkFactory { parkServiceMap.put(EnumCarVendor.CAR_TJD.getCode(), tjdService); parkServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunService); parkServiceMap.put(EnumCarVendor.CAR_HAIKANGWEISHI.getCode(), haikangWeishiService); + parkServiceMap.put(EnumCarVendor.CAR_FUTE.getCode(), futeParkService); return parkServiceMap; } @@ -84,6 +91,7 @@ public class ParkFactory { } callBackServiceMap = new ConcurrentHashMap(); callBackServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfCallbackService); + callBackServiceMap.put(EnumCarVendor.CAR_FUTE.getCode(), futeParkCallbackService); return callBackServiceMap; } diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java index 251653088..88db14b43 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkCreatePayOrder.java @@ -9,16 +9,12 @@ public class ParkCreatePayOrder implements Serializable{ private static final long serialVersionUID = 5585069626450856545L; - private EnumCarVendor carVendor; - /*停车场返回的订单ID**/ private String parkOrderNumber=""; /*停车费**/ private Integer fee; - public ParkCreatePayOrder(EnumCarVendor carVendor,String parkOrderNumber,Integer fee) { - this.carVendor = carVendor; - + public ParkCreatePayOrder(String parkOrderNumber,Integer fee) { if (!StringUtils.isBlank(parkOrderNumber)) { this.parkOrderNumber = parkOrderNumber; } @@ -27,15 +23,22 @@ public class ParkCreatePayOrder implements Serializable{ } } - public String getUniqueParkOrderNumber() { + public Integer getFee() { + return fee; + } + + public String getParkOrderNumber() { + return parkOrderNumber; + } + + public static String getUniqueParkOrderNumber(String parkOrderNumber,EnumCarVendor carVendor) { if (!StringUtils.isBlank(parkOrderNumber)) { return carVendor.getMessage()+"_"+parkOrderNumber; } return null; } - - public Integer getFee() { - return fee; - } + public static String getRealParkOrderNumber(String uniqueParkOrderNumber,EnumCarVendor carVendor) { + return uniqueParkOrderNumber.replaceFirst(carVendor.getMessage()+"_", ""); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java index 962c03e98..529a73a51 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java @@ -19,7 +19,9 @@ public class ParkNotifyPaid implements Serializable{ /*停车场返回的订单ID**/ private String tenantId; - /*停车场订单**/ + /*订单编号**/ + private String payOrderNo; + /*停车场订单编号**/ private String parkOrderNo; /*支付金额**/ private Integer fee; diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java index 7a58005d5..64eb9f21a 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java @@ -27,7 +27,7 @@ public class ParkStopFee implements Serializable{ /*给支付小程序的额外数据**/ private Map extraData=new HashMap(); /*备注**/ - private String remark=""; + private String remark="";//车场有可能返回的提示信息 private String sysNotice="";//系统提示,非车厂提示; diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java index 66ce092d1..a96ac72bb 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java @@ -122,7 +122,7 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java index c970aa25d..1d7cbf140 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java @@ -205,7 +205,7 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java index 0afd0bce8..7baa0808c 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java @@ -88,7 +88,7 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java new file mode 100644 index 000000000..e4cd2ada1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java @@ -0,0 +1,111 @@ +package com.iformall.service.park.impl.fute; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxCarJSOrder; +import com.iformall.domain.po.WxPark; +import com.iformall.domain.vo.WxCarCYFVo; +import com.iformall.enums.EnumCarVendor; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxCarJSOrderMapper; +import com.iformall.service.WxParkService; +import com.iformall.service.park.ParkBatchCallBackAdapterService; +import com.iformall.service.park.ParkCallBackAdapterService; +import com.iformall.service.park.entity.ParkNotifyParam; +import com.iformall.service.park.impl.BaseParkService; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class FuteParkCallbackService extends BaseParkService implements ParkCallBackAdapterService { + + + + @Autowired + WxParkService wxParkService; + + + /** + * {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0} + */ + @Override + public ParkNotifyParam parseInNoticyParam(Object param) { + Map paramMap = (Map) param; + String carNumber = paramMap.get("car_number").toString(); + String parkCode = paramMap.get("park_id").toString(); + String parkName = ""; + + String synId = paramMap.get("order_id").toString(); + Long inTime = (Long)paramMap.get("in_time"); + + ParkNotifyParam p = new ParkNotifyParam(); + p.setCarNumber(carNumber); + p.setParkId(parkCode); + p.setParkName(parkName); + p.setSynId(synId); + try { + p.setEntranceTime(new Date(inTime)); + } catch (Exception e) { + log.error("fute entranceTime format error",e); + return null; + } + return p; + } + + @Override + public ParkNotifyParam parseOutNoticyParam(Object param) { + Map paramMap = (Map) param; + String carNumber = paramMap.get("car_number").toString(); + String parkCode = paramMap.get("park_id").toString(); + String parkName = ""; + + String synId = paramMap.get("order_id").toString(); + Long inTime = (Long)paramMap.get("in_time"); + Long outTime = (Long)paramMap.get("out_time"); + + ParkNotifyParam p = new ParkNotifyParam(); + p.setCarNumber(carNumber); + p.setParkId(parkCode); + p.setParkName(parkName); + p.setSynId(synId); + try { + p.setEntranceTime(new Date(inTime)); + } catch (Exception e) { + log.error("fute entranceTime format error",e); + return null; + } + try { + p.setOutTime(new Date(outTime)); + } catch (Exception e) { + log.error("fute outTime format error",e); + return null; + } + p.setFee(String.valueOf(paramMap.get("amount_receivable"))); + return p; + } + + @Override + public ParkNotifyParam parseUnbindNoticyParam(Object param) { + return null; + } + + @Override + public ParkNotifyParam parsePaidNoticyParam(Object param) { + return null; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java new file mode 100644 index 000000000..88e40070e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java @@ -0,0 +1,178 @@ +package com.iformall.service.park.impl.fute; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxCarJSOrder; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxPark; +import com.iformall.domain.vo.WxCouponOrderCarCVo; +import com.iformall.domain.vo.WxParkCouponConfig; +import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumCouponUnit; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxCarJSOrderMapper; +import com.iformall.service.WxParkService; +import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.entity.ParkCreatePayOrder; +import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkStopFee; +import com.iformall.service.park.impl.BaseParkService; +import com.iformall.service.park.impl.util.ParkHelper; +import com.iformall.service.park.utils.ParkCacheUtils; +import com.iformall.utils.RedisCacheUtils; +import com.iformall.utils.RedisLock; + +/** + * 福特停车 + * + */ +@Service +public class FuteParkService extends BaseParkService implements ParkAdapterService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + ParkHelper parkHelper; + + @Autowired + @Qualifier("objectCommonRedisTemplate") + RedisTemplate redisTemplate; + + @Autowired + RedisLock redisLock; + + FuteUtil fute = new FuteUtil(); + + + @Override + public ResultData parkInitConfig(WxPark park) throws Exception { + return null; + } + + @Override + public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ + return null; + } + + + @Override + public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ + return "fute"; + } + + + @Override + public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ + } + + + /** + * 每一次查询都会产生订单,然后根据订单号查询 + */ + @Override + public ParkStopFee carStopFee(Map paramMap, WxPark park,String carNumber) throws Exception{ + //如果车牌号是鄂AAAAAA, 为测试车牌 + if (carNumber.equals("鄂AAAAAA")) { + return new ParkStopFee("-111",fute.utcToLocal("2020-12-16 00:00:00"),fute.utcToLocal("2020-12-17 00:00:00"), + "0.01",null,"payPath",null,"测试车牌,仅测试用",null); + }else if(carNumber.equals("鄂AAAAAB")) { + throw new MallinkException(21000,"车辆未入场"); + } + + String retCode = fute.getCarStopFee(park, carNumber); + if (StringUtils.isBlank(retCode)) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "fute getCarStopFee error. has no result"); + } + JSONObject result = JSON.parseObject(retCode); + if (result.getInteger("state") != 1 ) { + String message = result.getString("errmsg"); + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "fute getCarStopFee error."+message); + } + return new ParkStopFee(result.getString("parking_order_id"),fute.utcToLocal(result.getString("intime")),fute.utcToLocal(result.getString("outtime")), + result.getString("price"),"appId","payPath",null,null,null); + + } + + /** + * @return + */ + @Override + public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception{ + if (null == userCar) { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前用户未查询到优惠券!"); + } + + if (StringUtils.isBlank(userCar.getCUserPhone())) { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前用户未查询到手机号!"+userCar.getcUserId()); + } + + Map valueMap = WxParkCouponConfig.parseValue(userCar.getVendorParams()); + if (null == valueMap) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置。"+coupon.getTitle()); + } + //String orderNo = paramMap.get("parkOrderId"); + String couponNo = valueMap.get("couponNo"); + if (StringUtils.isBlank(couponNo)) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[couponNo]。"+coupon.getTitle()); + } + String ret = fute.useCoupon(park, couponNo, carNumber); + //打折登陆验证 + logger.info("fute useCoupon result:"+ret); + JSONObject retObj = JSON.parseObject(ret); + if (retObj.getIntValue("state") == 1){ + return new ResultData(); + }else { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前用户使用福特优惠券失败。"+retObj.getString("errmsg")); + } + } + + @Override + public ParkCreatePayOrder createPayOrder(Map paramMap, WxPark park, String carNumber) throws Exception { + String retCode = fute.getCarStopFee(park, carNumber); + if (StringUtils.isBlank(retCode)) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "fute getCarStopFee error. has no result"); + } + JSONObject result = JSON.parseObject(retCode); + if (result.getInteger("state") != 1 ) { + String message = result.getString("errmsg"); + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "fute getCarStopFee error."+message); + } + String price = result.getString("price"); + Integer fee = new BigDecimal(price).multiply(new BigDecimal(100)).intValue(); + return new ParkCreatePayOrder(result.getString("parking_order_id"), fee); + } + + @Override + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); + } + + @Override + public ResultData getParkStatus(WxPark park) throws Exception{ + return new ResultData(); + } + + @Override + public boolean ignoreUseCouponCache() { + return false; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java new file mode 100644 index 000000000..d76b7e167 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -0,0 +1,234 @@ +package com.iformall.service.park.impl.fute; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxPark; +import com.iformall.exception.MallinkException; + +import lombok.extern.slf4j.Slf4j; + +import org.apache.commons.lang3.StringUtils; +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.HTTP; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; + + +/** + * @author: furunxin + * @Date: 2020/7/1 17:16 + * @Description: 车易付接口对接参数类 + */ + +@Slf4j +public class FuteUtil { + + public static final String QUERY_PRICE = "http://s1.appykt.com/zld/parkapi/query_price"; + public static final String COUPON_USE = "http://s1.appykt.com/zld/useTicket"; + public static final String NOTIFY_PAID = "http://s1.appykt.com/zld/parkapi/pay_notify"; + + /** + * @description UTC时间转化为本地时间 + * @Params [utcTime] + * @return java.util.Date + * @Author furunxin + * @Date 2020/7/8 下午12:45 + **/ + public static Date utcToLocal(String seconds) throws ParseException { + String format = "yyyy-MM-dd HH:mm:ss"; + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date date=sdf.parse(seconds); + return date; + } + + /** + * 查询停车费 + **/ + public String getCarStopFee(WxPark wxPark,String carNumber){ + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + Map param = new HashMap(); + param.put("access_type", "scan_center_pay");//scan_center_pay:中央缴费 scan_out_pay:出口支付 + param.put("carnum", carNumber); + param.put("parkid", wxPark.getParkingId()); + log.info("fute getCarStopFee :" + JSON.toJSONString(param)); + return ProcBussiness(QUERY_PRICE, param,vp.getString("signkey")); + } + + /** + * 使用优惠券 + **/ + public String useCoupon(WxPark wxPark,String couponNo,String carNumber){ + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + Map param = new HashMap(); + param.put("carNumber", carNumber);//商户编号 + param.put("code", couponNo);//优惠券编号 + param.put("parkid", wxPark.getParkingId()); + log.info("fute useCoupon :" + JSON.toJSONString(param)); + return ProcBussiness(COUPON_USE, param, vp.getString("signkey")); + } + + /** + * 支付成功通知车场 + * @param wxPark + * @param orderNo + * @param token + * @return + */ + public String notifyPaid(WxPark wxPark,String parkOrderNo,Integer fee) { + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + Map param = new HashMap(); + param.put("out_trade_no", parkOrderNo);//商户编号 + String feestr = new BigDecimal(fee).divide(new BigDecimal(100)).stripTrailingZeros().toPlainString(); + param.put("total_amount", feestr);//优惠券编号 + param.put("pay_channel", 1);//优惠券编号 + param.put("pay_status", 1);//优惠券编号 + log.info("fute notifyOrderResult :" + JSON.toJSONString(param)); + return ProcBussiness(NOTIFY_PAID, param,vp.getString("signkey")); + } + + private static String ProcBussiness(String url,Map param,String signKey) { + try { + String sign = sign(param, signKey); + param.put("sign", sign); + return Proc(url,param); + } catch (Exception e) { + log.error("fute request error.",e); + } + return null; + } + + private static String Proc(String url, Map param) { + CloseableHttpClient httpClient = HttpClients.createDefault(); + + HttpPost httpPost = new HttpPost(url); + httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); + httpPost.addHeader("Accept", "application/json"); + httpPost.addHeader("Accept-Encoding", "UTF-8"); + + if (null != param) { + httpPost.setEntity(new StringEntity(JSON.toJSONString(param),"UTF-8")); + } + + if (null != param) { + log.info("fute httpRequest:[url]"+url+"[params]"+JSON.toJSONString(param)); + }else { + log.info("fute httpRequest:[url]"+url); + } + HttpResponse response = null; + try { + response = httpClient.execute(httpPost); + } catch (Exception e) { + log.error(e.getLocalizedMessage(),e); + } + + String result = null; + + //打印StatusLine + log.debug("StatusLine: " + response.getStatusLine()); + try{ + //获取实体 + HttpEntity httpEntity= response.getEntity(); + result = EntityUtils.toString(httpEntity, "UTF-8"); + log.debug(result); + } catch (Exception e) { + log.error(e.getLocalizedMessage(),e); + } + + try { //关闭流并释放资源 + httpClient.close(); + } catch (IOException e) { + log.error(e.getLocalizedMessage()); + } + return result; + } + + private static String sign(Map map, String signKey){ + if(map==null){ + return null; + } + if(map.containsKey("sign")) { + map.remove("sign"); + } + List keyList = new ArrayList(map.keySet()); + Collections.sort(keyList); + StringBuffer sb = new StringBuffer(); + for(int i=0;i>> 4 & 0xf]; + ac[j++] = hexDigits[byte0 & 0xf]; + } + return new String(ac); + } + private static final char hexDigits[] = { '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index 341a5ec9b..05e2678cc 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -240,7 +240,7 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java index 6915c2794..c92c2e7a5 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java @@ -349,7 +349,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java index 98cf1bfbc..ca1ae806e 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java @@ -107,6 +107,6 @@ public class ShangAnParkService extends BaseParkService implements ParkAdapterSe } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java index 30f2b9bc4..adeb81114 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java @@ -268,6 +268,6 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic } @Override - public void notifyPaid(ParkNotifyPaid notifyPaid) throws Exception { + public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 5be97c9ef..51176c688 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -5,6 +5,7 @@ import java.util.Map; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.domain.po.WxPark; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumCarVendor; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; @@ -18,7 +19,7 @@ public interface WxParkPayService { public String handlePaidCallBack(Map paramMap); - public void handlePaidSuccess(TenantEntity tenantEntity,Long cUserId,Integer carVendor,String carNumber,String parkOrderNo, + public void handlePaidSuccess(TenantEntity tenantEntity,WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String payOrderNo, Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName) throws Exception; public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index 1f29f15d8..b7eb63ff0 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.common.IdWorker; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxPark; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxRefundOrder; @@ -22,7 +23,9 @@ import com.iformall.mapper.WxCarPayOrderMapper; import com.iformall.mapper.WxPayAccountMapper; import com.iformall.pay.WxPayment; import com.iformall.service.ExcelService; +import com.iformall.service.WxParkService; import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; @@ -41,6 +44,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -69,7 +73,11 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Autowired RedisLock redisLock; - + + @Lazy + @Autowired + WxParkService wxParkService; + @Override public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record)); @@ -94,6 +102,13 @@ public class WxParkPayServiceImpl implements WxParkPayService { return XmlUtil.getRequestXml(resultMap); } + private WxPark getCurrentPark(TenantEntity tenantEntity) { + WxPark parkQ = new WxPark(); + parkQ.updateTenantInfo(tenantEntity); + WxPark wxPark = wxParkService.getByObj(parkQ); + return wxPark; + } + @Override public String handlePaidCallBack(Map paramMap) { //支付返回消息 @@ -106,7 +121,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { Integer cashFee = Integer.parseInt(cashFeeStr); if (cashFee > 0 ) { try { - String parkOrderNo = paramMap.get("out_trade_no"); + String payOrderNo = paramMap.get("out_trade_no"); String time_end = paramMap.get("time_end"); String transcationId = paramMap.get("transaction_id"); @@ -117,6 +132,9 @@ public class WxParkPayServiceImpl implements WxParkPayService { TenantEntity te = new TenantEntity(); te.setTenantId(tenantId); te.setParentTenantId(parentTenantId); + + WxPark park = getCurrentPark(te); + Integer carVendor = attachObj.getInteger("v"); Long cUserId = attachObj.getLong("u"); String carNumber = attachObj.getString("car"); @@ -124,7 +142,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { Long merchantId = attachObj.getLong("mid"); String merchantName = attachObj.getString("mn"); - handlePaidSuccess(te,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr), + handlePaidSuccess(te,park,cUserId,carVendor,carNumber,payOrderNo,Integer.parseInt(cashFeeStr), DateUtils.string2Date(time_end, DateUtils.DATE_PATTERN_ALL_NOSPACE).getTime(),transcationId, merchantAccount,merchantId,merchantName); } catch (Exception e) { @@ -144,16 +162,17 @@ public class WxParkPayServiceImpl implements WxParkPayService { } @Override - public void handlePaidSuccess(TenantEntity tenantEntity,Long cUserId,Integer carVendor,String carNumber, - String parkOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, + public void handlePaidSuccess(TenantEntity tenantEntity,WxPark wxPark,Long cUserId,Integer carVendor,String carNumber, + String payOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, Long merchantId,String merchantName) throws Exception{ //查询该笔订单是否已经存在 - WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(parkOrderNo, tenantEntity.getTenantId()); + WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(payOrderNo, tenantEntity.getTenantId()); + String parkOrderNo = ParkCreatePayOrder.getRealParkOrderNumber(payOrderNo,EnumCarVendor.getEnum(carVendor)); if (null == payOrder) { //此处需要加锁,防止并发设置 long time = System.currentTimeMillis() + RedisLock.TIMEOUT; String timeStr = String.valueOf(time); - boolean stocksetlock = redisLock.lock("carPayOrderLock_"+parkOrderNo, timeStr); + boolean stocksetlock = redisLock.lock("carPayOrderLock_"+payOrderNo, timeStr); if (stocksetlock) { try { //创建停车支付订单记录 @@ -178,7 +197,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { //通知车场支付成功 try { - parkFactory.getParkService(carVendor).notifyPaid(new ParkNotifyPaid(tenantEntity.getTenantId(), parkOrderNo, fee, paidTime)); + parkFactory.getParkService(carVendor).notifyPaid(wxPark,new ParkNotifyPaid(tenantEntity.getTenantId(),payOrderNo,parkOrderNo,fee,paidTime)); payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); payOrder.setUpdateTime(new Date()); wxCarPayOrderMapper.updateById(payOrder); @@ -188,12 +207,11 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.setUpdateTime(new Date()); wxCarPayOrderMapper.updateById(payOrder); } - }catch(Exception e) { logger.error("handlePaidSuccess fail.",e); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"支付同步失败"+parkOrderNo); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"支付同步失败"+payOrderNo); }finally { - redisLock.unlock("carPayOrderLock_"+parkOrderNo, timeStr); + redisLock.unlock("carPayOrderLock_"+payOrderNo, timeStr); } } } From 687f0d38e422b333f1a2812b4b37cbc7603cbd3f Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 10 Feb 2023 11:21:23 +0800 Subject: [PATCH 08/90] fix car pay --- .../db/migration/V20230200001__car.sql | 101 ++++++++++++++++++ .../config/BaseMyBatisConfiguration.java | 7 ++ 2 files changed, 108 insertions(+) diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 932ec9a08..6a15b75e2 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -22,6 +22,107 @@ CREATE TABLE `wx_car_pay_order` ( UNIQUE KEY `pay_order_no` (`park_order_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='支付单表'; +CREATE TABLE wx_car_pay_order_0 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_1 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_2 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_3 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_4 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_5 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_6 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_7 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_8 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_9 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_10 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_11 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_12 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_13 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_14 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_15 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_16 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_17 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_18 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_19 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_20 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_21 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_22 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_23 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_24 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_25 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_26 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_27 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_28 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_29 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_30 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_31 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_32 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_33 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_34 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_35 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_36 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_37 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_38 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_39 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_40 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_41 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_42 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_43 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_44 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_45 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_46 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_47 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_48 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_49 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_50 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_51 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_52 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_53 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_54 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_55 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_56 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_57 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_58 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_59 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_60 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_61 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_62 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_63 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_64 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_65 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_66 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_67 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_68 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_69 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_70 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_71 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_72 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_73 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_74 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_75 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_76 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_77 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_78 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_79 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_80 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_81 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_82 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_83 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_84 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_85 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_86 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_87 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_88 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_89 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_90 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_91 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_92 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_93 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_94 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_95 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_96 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_97 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_98 LIKE wx_car_pay_order; +CREATE TABLE wx_car_pay_order_99 LIKE wx_car_pay_order; + ALTER TABLE `mallink`.`wx_park` ADD COLUMN `support_pay` int(1) COMMENT '会员小程序是否支持支付enumYesOrNo'; diff --git a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java index d9da5085b..8b80c8a86 100644 --- a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java +++ b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java @@ -330,6 +330,13 @@ public class BaseMyBatisConfiguration { wxCouponMallSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxCouponMallSharding); + ShardingSphere wxCarPayOrderSharding = new ShardingSphere(); + wxCarPayOrderSharding.setColumn("tenant_id"); + wxCarPayOrderSharding.setTableName("wx_car_pay_order"); + wxCarPayOrderSharding.setCount(100); + wxCarPayOrderSharding.setRule(EnumShardingRule.HASH.getCode()); + shardingList.add(wxCarPayOrderSharding); + //初始化 shardingSpherePlugin.setShardingSpheres(shardingList); Properties properties = new Properties(); From 509d21d1a4f4c3f7c055a9cf892bfa3e73e2a50a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 10 Feb 2023 16:21:36 +0800 Subject: [PATCH 09/90] fix car pay --- .../java/com/iformall/controller/WxCarController.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index b9c9b3f08..a897f4f1d 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -472,8 +472,17 @@ public class WxCarController extends BaseController { WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { - return new ResultData(Result.ERROR,"停车商户未设置收款账号."); + //查询商官商户 + WxMerchant adminMerchant = wxMerchantService.findAdmin(park); + if (null == adminMerchant) { + return new ResultData(Result.ERROR,"未找到商管商户."); + } + receiver = wxProfitSharingReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { + return new ResultData(Result.ERROR,"商管商户未设置收款账号."); + } } + StringBuffer attachSb = new StringBuffer("{") .append("\"t\":").append(park.getTenantId()).append(",\"pt\":").append(park.getParentTenantId()) .append(",\"v\":").append(park.getVendorType()) From 4b95c54cfe124bd11175864ad52a937af1e284dc Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 11:53:52 +0800 Subject: [PATCH 10/90] //sharing --- .../basic/WxMerchantController.java | 40 +++++++++++++++++++ ...V2023021000001__add_tingche_permission.sql | 12 ++++++ .../controller/WxMerchantController.java | 4 +- .../iformall/service/WxMerchantService.java | 8 +++- .../WxProfitSharingReceiverService.java | 13 ++++-- .../service/impl/WxMerchantServiceImpl.java | 4 +- .../WxProfitSharingReceiverServiceImpl.java | 40 +++++++++++-------- .../com/iformall/utils/sign/AppUtils.java | 14 ++++--- 8 files changed, 105 insertions(+), 30 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index c9eced3e8..64ff73d99 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -23,6 +23,7 @@ import com.iformall.utils.Constant; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -442,4 +443,43 @@ public class WxMerchantController extends BaseController { return wxProfitSharingReceiverService.updateTtReceiverIsUse(merchant); } + @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") + @PostMapping("/updateAccount") + public ResultData updateAccount(@RequestBody WxMerchant wxMerchant) { + logger.debug("[" + getIpAddr() + "] WxMerchantController::updateAccount"); + + if (wxMerchant.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); + } + WxMerchant merchant = wxMerchantService.selectById(wxMerchant.getId()); + if (merchant == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "未找到门店"); + } + wxMerchant.setName(merchant.getName()); + if (wxMerchant.getAccountTypeValue() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号类型不能为空"); + } + if (StringUtils.isEmpty(wxMerchant.getAccountId())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号ID不能为空"); + } + if (StringUtils.isEmpty(wxMerchant.getAccountName())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空"); + } + wxMerchant.updateTenantInfo(getTenantInfo()); + return wxMerchantService.updateMerchantAccount(wxMerchant,false); + } + + @ApiOperation("删除分账账户") + @GetMapping("/deleteByReceiverId") + @ApiImplicitParam(name = "id", value = "商户分账账户ID", dataType = "Long", paramType = "query", required = true) + public ResultData deleteByReceiverId(@ModelAttribute WxProfitSharingReceiver receiver) { + logger.debug("[" + getIpAddr() + "] WxMerchantController::deleteByReceiverId"); + + if (receiver.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户分账账户ID不能为空"); + } + receiver.updateTenantInfo(getTenantInfo()); + return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode(),false); + } + } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql new file mode 100644 index 000000000..4df9e81b8 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql @@ -0,0 +1,12 @@ +INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (225, '停车商户管理', 202, 'Y', NULL, 1, NULL, NULL, 'parkMerchantList', NULL, 0, 222); +INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (715, '停车支付订单', 610, 'Y', NULL, 1, NULL, NULL, 'parkPayList', NULL, 0, 715); + + +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702]' WHERE `id` = 1; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 4, 5, 6, 7, 8, 9, 10, 50, 101, 102, 103, 104, 105, 106, 107, 201, 202, 203, 204, 205, 209, 211, 212, 221, 222, 224, 225, 251, 409, 410, 411, 416, 418, 420, 421, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 961, 6611, 60701, 60702]' WHERE `id` = 2; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[2, 4, 5, 6, 7, 10, 50, 201, 202, 205, 211, 212, 221, 222, 224, 225, 251, 409, 410, 411, 416, 418, 501, 502, 503, 504, 505, 506, 507, 508, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 60701, 60702]' WHERE `id` = 3; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 223, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 615, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 647, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 676, 680, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 5310, 5320, 6611, 60701, 60702, 61501, 61502]' WHERE `id` = 12; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702]' WHERE `id` = 1028; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 224, 225, 251, 299, 300, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702]' WHERE `id` = 1035001036; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 225, 223, 224, 251, 299, 300, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 615, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 647, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 676, 680, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 5310, 5320, 6611, 60701, 60702, 61501, 61502]' WHERE `id` = 103500103610; + diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java index 4b171b6dc..c9bf8f8c7 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -106,7 +106,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空"); } wxMerchant.updateTenantInfo(getTenantInfo()); - return wxMerchantService.updateMerchantAccount(wxMerchant); + return wxMerchantService.updateMerchantAccount(wxMerchant,true); } @ApiOperation("删除分账账户") @@ -121,7 +121,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户分账账户ID不能为空"); } receiver.updateTenantInfo(getTenantInfo()); - return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode()); + return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode(),true); } @ApiOperation("查询是否有权限修改账户") diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index ca3fc4226..9ec2ba45b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -139,7 +139,13 @@ public interface WxMerchantService { ResultData updateMerchant(WxMerchant wxMerchant); - ResultData updateMerchantAccount(WxMerchant wxMerchant); + /** + * + * @param wxMerchant + * @param isSync 是否需要同步第三方(微信总分模式需要) + * @return + */ + ResultData updateMerchantAccount(WxMerchant wxMerchant,boolean isSync); ResultData updateMerchantAdmin(WxMerchant wxMerchant); diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java index 654ca2ba5..3a2fbbc07 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java @@ -46,11 +46,18 @@ public interface WxProfitSharingReceiverService { WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitSharingType sharingType); List findReceivers(TenantEntity tenantEntity,Long merchantId); - ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList); + ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList, boolean isSync); - ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send); + ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send, boolean isSync); - ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver); + /** + * + * @param merchant + * @param receiver + * @param isSync 是否需要同步第三方(微信总分模式需要) + * @return + */ + ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, boolean isSync); void sendMsg(String phone, String account, String merchant, String time, Integer modelType, TenantEntity tenantEntity); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 827adc5be..e802c5731 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -744,7 +744,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) @Override - public ResultData updateMerchantAccount(WxMerchant wxMerchant) { + public ResultData updateMerchantAccount(WxMerchant wxMerchant,boolean isSync) { try { if (wxMerchant.getId() == null) { return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); @@ -760,7 +760,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setReceiverType(wxMerchant.getAccountTypeValue()); receiver.setTrueName(wxMerchant.getAccountName()); receiver.setParameter(wxMerchant.getAccountParameter()); - return wxProfitSharingReceiverService.updateReceiver(wxMerchant, receiver); + return wxProfitSharingReceiverService.updateReceiver(wxMerchant, receiver, isSync); } } catch (Exception e) { logger.error("db failed: 账户操作失败, e:" + e.getMessage(),e); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java index 8fe0845e4..864a8e0e2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java @@ -156,7 +156,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv } @Override - public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList) { + public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList, boolean isSync) { WxAppinfo appInfo = wxAppinfoService.getCAppInfo(merchant,EnumAppPlat.WX); WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); @@ -177,18 +177,20 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv //receiver.setReceiverType(receiverParam.getReceiverType()); //receiver.setTrueName(receiverParam.getTrueName()); - //添加分账账户 - ShareAccountResult createResult = payServiceFactory.getPayShareAdapterService(EnumPayWay.PAY_WAY_WECHAT.getCode(),payAccount.getPayVersion()) - .createShareAccount(appInfo, payAccount, receiver); - if (!createResult.isSuccess()) { - return new ResultData(createResult.getCode(), createResult.getMsg()); + if(isSync){ + //添加分账账户 + ShareAccountResult createResult = payServiceFactory.getPayShareAdapterService(EnumPayWay.PAY_WAY_WECHAT.getCode(),payAccount.getPayVersion()) + .createShareAccount(appInfo, payAccount, receiver); + if (!createResult.isSuccess()) { + return new ResultData(createResult.getCode(), createResult.getMsg()); + } } wxProfitSharingReceiverMapper.insert(receiver); //添加成功才删除账户 for (WxProfitSharingReceiver delReceiver : delList) { - delReceiver(delReceiver, EnumMsgSend.MSG_SEND_NOT_IMMEDIATELY.getCode()); + delReceiver(delReceiver, EnumMsgSend.MSG_SEND_NOT_IMMEDIATELY.getCode(),isSync); } WxProfitSharingReceiver wxProfitSharingReceiver = new WxProfitSharingReceiver(); @@ -204,7 +206,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv //添加变更短信 sendMsgByType(EnumMsgModel.UPDATE_SHARING_ACCOUNT_NOTIFY_MERCHANT.getCode(), merchant.getId(), receiver.getReceiverAccount(), receiver); } - return new ResultData(createResult.getData()); + return new ResultData(); } private void sendMsgByType(Integer type, Long merchantId, String account, TenantEntity tenantEntity) { @@ -408,10 +410,10 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv } @Override - public ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send) { + public ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send, boolean isSync) { - WxAppinfo appInfo = wxAppinfoService.getCAppInfo(receiver,EnumAppPlat.WX); - WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); +// WxAppinfo appInfo = wxAppinfoService.getCAppInfo(receiver,EnumAppPlat.WX); +// WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); receiver = wxProfitSharingReceiverMapper.selectById(receiver.getId()); @@ -432,10 +434,14 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv ))) { //还有别的商户使用这个账号,不从微信服务器申请删除 } else { - ShareAccountResult shareResult = payServiceFactory.getPayShareAdapterService(receiver.getPlat(),payAccount.getPayVersion()).deleteShareAccount(appInfo, payAccount, receiver); - if (!shareResult.isSuccess()) { - return new ResultData(shareResult.getCode(), shareResult.getMsg()); - } + if(isSync){ + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(receiver,EnumAppPlat.WX); + WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); + ShareAccountResult shareResult = payServiceFactory.getPayShareAdapterService(receiver.getPlat(),payAccount.getPayVersion()).deleteShareAccount(appInfo, payAccount, receiver); + if (!shareResult.isSuccess()) { + return new ResultData(shareResult.getCode(), shareResult.getMsg()); + } + } } receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode()); @@ -451,7 +457,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv } @Override - public ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver) { + public ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver,boolean isSync) { WxProfitSharingReceiver oldReceiver = new WxProfitSharingReceiver(); oldReceiver.updateTenantInfo(merchant); @@ -466,7 +472,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv oldReceiver = wxProfitSharingReceiverMapper.selectOne(new QueryWrapper(oldReceiver)); if (oldReceiver == null) { - return addReceiver(merchant, receiver, delList); + return addReceiver(merchant, receiver, delList, isSync); } else { oldReceiver.setParameter(receiver.getParameter()); oldReceiver.setUpdateTime(new Date()); diff --git a/mallinkService/src/main/java/com/iformall/utils/sign/AppUtils.java b/mallinkService/src/main/java/com/iformall/utils/sign/AppUtils.java index 9737df7f0..cbf0b175f 100644 --- a/mallinkService/src/main/java/com/iformall/utils/sign/AppUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/sign/AppUtils.java @@ -112,11 +112,15 @@ public class AppUtils { } public static void main(String[] args) { + for (int i=0;i<=20;i++){ + String appId = getAppId(); + System.out.println(appId.toUpperCase()); + } String appId = getAppId(); - String appKey = getAppKey(appId); - String signKey = getSignKey(appId,appKey); - System.out.println("appId: "+appId); - System.out.println("appKey: "+appKey); - System.out.println("signKey: "+signKey); +// String appKey = getAppKey(appId); +// String signKey = getSignKey(appId,appKey); + System.out.println(appId.toUpperCase()); +// System.out.println("appKey: "+appKey); +// System.out.println("signKey: "+signKey); } } \ No newline at end of file From ba124d69ba7b72cc225d20bc8e60ee9c8971ce4a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 14:29:29 +0800 Subject: [PATCH 11/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a897f4f1d..6352bc8d1 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -470,7 +470,7 @@ public class WxCarController extends BaseController { return new ResultData(Result.ERROR,"未设置停车商户."); } - WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { //查询商官商户 WxMerchant adminMerchant = wxMerchantService.findAdmin(park); @@ -526,6 +526,7 @@ public class WxCarController extends BaseController { public ResultData payOrderList(Integer pageNum, Integer pageSize) { WxCarPayOrder carPayOrder = new WxCarPayOrder(); carPayOrder.updateTenantInfo(getTenantInfo()); + carPayOrder.setCUserId(getMemberId()); carPayOrder.setSortColumn(SortField.CreateTime_DESC.getValue()); return new ResultData(wxParkPayService.listPayOrderAsPage(carPayOrder, pageNum, pageSize)); } From 3786209be13dd655dcfccddedab04118ed83a796 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 18:14:56 +0800 Subject: [PATCH 12/90] fix bug --- .../java/com/iformall/controller/base/BaseController.java | 2 +- .../iformall/controller/basic/WxMerchantController.java | 6 ++++++ .../java/com/iformall/controller/WxCarController.java | 4 +--- .../src/main/java/com/iformall/domain/po/WxMerchant.java | 8 ++++++++ .../iformall/service/impl/WxRentContractServiceImpl.java | 6 ++++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/base/BaseController.java b/mallinkAdmin/src/main/java/com/iformall/controller/base/BaseController.java index 519532461..fddbb2568 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/base/BaseController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/base/BaseController.java @@ -49,7 +49,7 @@ public class BaseController { MallUserInfo user = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); // MallUserInfo user = new MallUserInfo(); // user.setId(321127266275430400L); -// user.setName("富茂光谷测试版管理员"); +// user.setName("alitest"); // user.setTenantId("789"); // user.setParentTenantId(null); return user; diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 64ff73d99..c1ebdc52a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -275,6 +275,12 @@ public class WxMerchantController extends BaseController { wxMerchant.updateTenantInfo(getTenantInfo()); return wxMerchantService.updateMerchantLevel(wxMerchant); } + + @ApiOperation("商户手填收款账号") + @PostMapping("setMerchantAccount") + public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { + return null; + } @ApiOperation("查询当前租户下商户名称列表") @GetMapping("/name_list") diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 6352bc8d1..8c134f447 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -376,8 +376,6 @@ public class WxCarController extends BaseController { Integer used = ParkCacheUtils.getCarCouponUseCacheLock(redisTemplate, vendor.getMessage(), carNumber); - - if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { if (null == used || (null != used && used.intValue() < 1)) { ResultData result = etcpHelper.getCoupon(paramMap, park, userCar,carNumber); @@ -506,7 +504,7 @@ public class WxCarController extends BaseController { "127.0.0.1", park.getPaidCallBack(), payAccount.getApiKey(), new Date()); return new ResultData(wxResult); } catch (Exception e) { - logger.error("park getCarStopFee error",e); + logger.error("park createPayOrder error",e); return new ResultData(Result.ERROR,e.getMessage()); } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 79b095fe3..470cbf7b0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -401,6 +401,14 @@ public class WxMerchant extends TenantEntity { @TableField(exist = false) private BigDecimal latitude; + @io.swagger.annotations.ApiModelProperty(value="首款账号",name="account") + @TableField(exist = false) + private String account; + + @io.swagger.annotations.ApiModelProperty(value="收款账号",name="apiKey") + @TableField(exist = false) + private String apiKey; + //查询停车商户根据此字段 @TableField(exist = false) private Integer hasCarVendor; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index fe5ceac85..5f5adceb2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -850,6 +850,12 @@ public class WxRentContractServiceImpl implements WxRentContractService { record.setStatus(wxRentContract.getStatus()); } record.setApplyStatus(wxRentContract.getApplyStatus()); + if (StringUtils.isBlank(record.getOperatingManagementFee())){ + record.setOperatingManagementFee(null); + } + if (StringUtils.isBlank(record.getBussinessManagementFee())){ + record.setBussinessManagementFee(null); + } wxRentContractMapper.updateById(record); record.setRentalStartDate(tempDate); } catch (Exception e) { From 99ad05030e9b200c35f1eddee6dfe7634b215ff3 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 20:20:30 +0800 Subject: [PATCH 13/90] //sharing --- .../basic/WxMerchantController.java | 21 +- .../V2023021300001__add_分账类型.sql | 6 + .../controller/WxMerchantController.java | 28 +- ...xProfitSharingReceiverApplyController.java | 6 +- .../iformall/controller/WxCarController.java | 8 +- .../schedule/TtMerchantReciverSchedule.java | 4 +- .../com/iformall/domain/po/WxMerchant.java | 16 +- .../domain/po/WxProfitPaymentReceiver.java | 94 +++++ .../domain/po/WxProfitSharingReceiver.java | 2 +- .../enums/EnumProfitPaymentReceiverType.java | 39 +++ .../iformall/enums/EnumProfitSharingType.java | 7 +- .../mapper/WxProfitPaymentReceiverMapper.java | 15 + .../mapper/WxProfitSharingReceiverMapper.java | 1 - .../iformall/service/WxMerchantService.java | 3 +- .../WxProfitPaymentReceiverService.java | 70 ++++ .../WxProfitSharingReceiverService.java | 16 +- .../impl/WxCouponOrderServiceImpl.java | 6 +- .../service/impl/WxCouponServiceImpl.java | 8 +- .../service/impl/WxMerchantServiceImpl.java | 4 +- .../service/impl/WxPayOrderServiceImpl.java | 4 +- .../WxProfitPaymentReceiverServiceImpl.java | 325 ++++++++++++++++++ .../impl/WxProfitSharingOrderServiceImpl.java | 8 +- ...ProfitSharingReceiverApplyServiceImpl.java | 24 +- .../WxProfitSharingReceiverServiceImpl.java | 196 ++--------- .../service/share/PayShareAdapterService.java | 10 +- .../share/douyin/TtPayShareService.java | 26 +- .../share/wx/sft/WxPayShareSFTService.java | 7 +- .../share/wx/v2/WxPayShareService.java | 20 +- .../share/wx/v3/WxPayShareV3Service.java | 25 +- .../java/com/iformall/utils/Constant.java | 1 + .../mapper/WxProfitPaymentReceiverMapper.xml | 102 ++++++ .../mapper/WxProfitSharingReceiverMapper.xml | 7 +- 32 files changed, 826 insertions(+), 283 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/WxProfitPaymentReceiverMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java create mode 100644 mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 64ff73d99..876332856 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -8,11 +8,8 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; -import com.iformall.domain.po.WxAppinfo; -import com.iformall.domain.po.WxPayAccount; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity; -import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.WxProfitSharingReceiver; import com.iformall.domain.vo.WxMerchantTradeDetailVo; import com.iformall.domain.vo.WxMerchantTradeVo; import com.iformall.domain.vo.WxMerchantVo; @@ -55,6 +52,10 @@ public class WxMerchantController extends BaseController { @Autowired private WxProfitSharingReceiverService wxProfitSharingReceiverService; + @Autowired + private WxProfitPaymentReceiverService wxProfitPaymentReceiverService; + + @UserDataRuleAnnotation("merchant_list") @ApiOperation("分页列表接口") @GetMapping("listVo") @@ -392,7 +393,7 @@ public class WxMerchantController extends BaseController { if(merchant == null){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); } - return wxProfitSharingReceiverService.updateTtReceiver(merchant); + return wxProfitPaymentReceiverService.updateTtReceiver(merchant); } @@ -414,9 +415,9 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); } if(anEnum.equals(AppAddSubMerchantUrlType.improt_URL)){ - return wxProfitSharingReceiverService.getTtReceiverImprotURL(merchant); + return wxProfitPaymentReceiverService.getTtReceiverImprotURL(merchant); }else if(anEnum.equals(AppAddSubMerchantUrlType.Balance_URL)){ - return wxProfitSharingReceiverService.getTtReceiverBalanceURL(merchant); + return wxProfitPaymentReceiverService.getTtReceiverBalanceURL(merchant); }else{ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); } @@ -440,7 +441,7 @@ public class WxMerchantController extends BaseController { if(payAcount == null){ return new ResultData(ErrorCode.APP_ID_NOT_FOUND); } - return wxProfitSharingReceiverService.updateTtReceiverIsUse(merchant); + return wxProfitPaymentReceiverService.updateTtReceiverImportStatus(merchant); } @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") @@ -466,7 +467,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空"); } wxMerchant.updateTenantInfo(getTenantInfo()); - return wxMerchantService.updateMerchantAccount(wxMerchant,false); + return wxMerchantService.updateMerchantAccount(wxMerchant); } @ApiOperation("删除分账账户") @@ -479,7 +480,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户分账账户ID不能为空"); } receiver.updateTenantInfo(getTenantInfo()); - return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode(),false); + return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode()); } } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql new file mode 100644 index 000000000..bb22402ac --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql @@ -0,0 +1,6 @@ +--创建收款帐号表 + +--备份分账帐号表 +--将微信进件的数据转移到收款帐号表里--并将原数据删除 + +--将抖音进件的数据转移到收款帐号表里--原数据修改ReceiverType =10 diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java index c9bf8f8c7..dde903619 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -27,6 +27,9 @@ public class WxMerchantController extends BaseController { @Autowired private WxMerchantService wxMerchantService; + @Autowired + private WxProfitPaymentReceiverService wxProfitPaymentReceiverService; + @Autowired private WxProfitSharingReceiverService wxProfitSharingReceiverService; @@ -45,7 +48,7 @@ public class WxMerchantController extends BaseController { return new ResultData(wxMerchantService.findList(getTenantInfo())); } - @ApiOperation("查询账户信息") + @ApiOperation("微信查询分账信息") @GetMapping("/findAccountById") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) public ResultData findAccountById(@ModelAttribute WxMerchant wxMerchant) { @@ -60,18 +63,11 @@ public class WxMerchantController extends BaseController { if(payAccount == null){ return new ResultData(ErrorCode.API_KEY_NOT_FOUND); } - EnumProfitSharingType enumSharingType = EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT; - if(EnumPayMchType.TOTAL.getCode().equals(payAccount.getMchType())){ - enumSharingType = EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT; - }else if(EnumPayMchType.DIRECT.getCode().equals(payAccount.getMchType())){ - enumSharingType = EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2; - }else{ - return new ResultData(ErrorCode.APP_PLAT_ERROR); - } - return new ResultData(wxProfitSharingReceiverService.findReceiver(tenantInfo,wxMerchant.getId(), EnumAppPlat.WX,enumSharingType)); + + return new ResultData(wxProfitSharingReceiverService.findReceiver(tenantInfo,wxMerchant.getId(), EnumAppPlat.WX)); } - @ApiOperation("查询账户信息") + @ApiOperation("抖音查询收款账户信息") @GetMapping("/findTtAccountById") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) public ResultData findTtAccountById(@ModelAttribute WxMerchant wxMerchant) { @@ -80,7 +76,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); } wxMerchant.updateTenantInfo(getTenantInfo()); - return new ResultData(wxProfitSharingReceiverService.findReceiver(getTenantInfo(),wxMerchant.getId(), EnumAppPlat.TOUTIAO,EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN)); + return new ResultData(wxProfitPaymentReceiverService.findReceiver(getTenantInfo(),wxMerchant.getId(), EnumAppPlat.TOUTIAO,EnumProfitPaymentReceiverType.tt_merchant_number)); } @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") @@ -106,7 +102,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空"); } wxMerchant.updateTenantInfo(getTenantInfo()); - return wxMerchantService.updateMerchantAccount(wxMerchant,true); + return wxMerchantService.updateMerchantAccount(wxMerchant); } @ApiOperation("删除分账账户") @@ -121,7 +117,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户分账账户ID不能为空"); } receiver.updateTenantInfo(getTenantInfo()); - return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode(),true); + return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode()); } @ApiOperation("查询是否有权限修改账户") @@ -187,9 +183,9 @@ public class WxMerchantController extends BaseController { } if(anEnum.equals(AppAddSubMerchantUrlType.improt_URL)){ - return wxProfitSharingReceiverService.getTtReceiverImprotURL(merchant); + return wxProfitPaymentReceiverService.getTtReceiverImprotURL(merchant); }else if(anEnum.equals(AppAddSubMerchantUrlType.Balance_URL)){ - return wxProfitSharingReceiverService.getTtReceiverBalanceURL(merchant); + return wxProfitPaymentReceiverService.getTtReceiverBalanceURL(merchant); }else{ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java index b616dc6fc..114137576 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxProfitPaymentReceiver; import com.iformall.domain.po.WxProfitSharingReceiver; import com.iformall.domain.po.WxProfitSharingReceiverApply; import com.iformall.domain.po.base.TenantEntity; @@ -12,6 +13,7 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.file.aliyun.AliyunOSS; import com.iformall.service.WxMerchantService; +import com.iformall.service.WxProfitPaymentReceiverService; import com.iformall.service.WxProfitSharingReceiverApplyService; import com.iformall.service.WxProfitSharingReceiverService; import com.iformall.utils.ImgYwsqhUtil; @@ -44,7 +46,7 @@ public class WxProfitSharingReceiverApplyController extends BaseController { private WxProfitSharingReceiverApplyService wxProfitSharingReceiverApplyService; @Autowired - private WxProfitSharingReceiverService wxProfitSharingReceiverService; + private WxProfitPaymentReceiverService wxProfitPaymentReceiverService; @Autowired private WxMerchantService wxMerchantService; @@ -85,7 +87,7 @@ public class WxProfitSharingReceiverApplyController extends BaseController { if(merchant == null || EnumMerchantStatus.NOT_VALID.getCode().equals(merchant.getStatus())){ return new ResultData(ErrorCode.MERCHANT_INFO_NOT_VALID.getCode(),"商户不存在或已停用"); } - WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(merchant, merchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(merchant, merchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); if(receiver != null && MerchantImportStatus.improt_success.getCode().equals(receiver.getWxImportStatus())){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "该商户已进件成功"); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a897f4f1d..636a9c4cc 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -90,9 +90,9 @@ public class WxCarController extends BaseController { @Autowired WxPayAccountService wxPayAccountService; - + @Autowired - WxProfitSharingReceiverService wxProfitSharingReceiverService; + WxProfitPaymentReceiverService wxProfitPaymentReceiverService; @Autowired @Qualifier("objectCommonRedisTemplate") @@ -470,14 +470,14 @@ public class WxCarController extends BaseController { return new ResultData(Result.ERROR,"未设置停车商户."); } - WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { //查询商官商户 WxMerchant adminMerchant = wxMerchantService.findAdmin(park); if (null == adminMerchant) { return new ResultData(Result.ERROR,"未找到商管商户."); } - receiver = wxProfitSharingReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + receiver = wxProfitPaymentReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { return new ResultData(Result.ERROR,"商管商户未设置收款账号."); } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/TtMerchantReciverSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/TtMerchantReciverSchedule.java index e69d31c83..06c056bf6 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/TtMerchantReciverSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/TtMerchantReciverSchedule.java @@ -37,7 +37,7 @@ public class TtMerchantReciverSchedule { private WxPayAccountService payAccountService; @Autowired - private WxProfitSharingReceiverService wxProfitSharingReceiverService; + private WxProfitPaymentReceiverService wxProfitPaymentReceiverService; /** @@ -64,7 +64,7 @@ public class TtMerchantReciverSchedule { // logger.error("TtMerchantReciverSchedule error.updateTtReceiver:"+m.getId(),e); // } try { - wxProfitSharingReceiverService.updateTtReceiverIsUse(m); + wxProfitPaymentReceiverService.updateTtReceiverImportStatus(m); } catch (Exception e) { e.printStackTrace(); logger.error("TtMerchantReciverSchedule error.updateTtReceiver:"+m.getId(),e); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 79b095fe3..bf9a33813 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -196,20 +196,14 @@ public class WxMerchant extends TenantEntity { return String.join("\n", wxProfitSharingReceiver.stream().map(r->{ StringBuffer str = new StringBuffer(); - if(EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2.getCode().equals(r.getSharingType())){ - str.append("微信特约商户号:"); - }else if(EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN.getCode().equals(r.getSharingType())){ - str.append("抖音商户号:"); - }else if(EnumProfitSharingType.PROFIT_SHARING_TYPE_BANK.getCode().equals(r.getSharingType())){ - str.append("银行卡号:"); - }else if(EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT.getCode().equals(r.getSharingType())){ - if(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_MERCHANT_ID.getCode().equals(r.getReceiverType())){ + if(EnumProfitSharingType.PROFIT_SHARING_TYPE_SYS.getCode().equals(r.getSharingType())){ + if(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode().equals(r.getReceiverType())){ str.append("微信商户号:"); - }else if(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().equals(r.getReceiverType())){ + }else if(EnumProfitPaymentReceiverType.wx_personal_wechatid.getCode().equals(r.getReceiverType())){ str.append("个人微信号(微信已停用):"); - }else if(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_OPENID.getCode().equals(r.getReceiverType())){ + }else if(EnumProfitPaymentReceiverType.wx_personal_openid.getCode().equals(r.getReceiverType())){ str.append("OPENID:"); - } else if(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_SUB_OPENID.getCode().equals(r.getReceiverType())){ + } else if(EnumProfitPaymentReceiverType.wx_personal_sub_openid.getCode().equals(r.getReceiverType())){ str.append("OPENID:"); } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java new file mode 100644 index 000000000..d274ec12b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java @@ -0,0 +1,94 @@ +package com.iformall.domain.po; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.StringUtils; + +import java.util.Date; + +@TableName(value = "wx_profit_payment_receiver") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxProfitPaymentReceiver extends TenantEntity { + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="商户ID",name="merchantId") + private Long merchantId; + @io.swagger.annotations.ApiModelProperty(value="收款帐号类型 EnumProfitPaymentReceiverType",name="receiverType") + private Integer receiverType; + @io.swagger.annotations.ApiModelProperty(value="收款商户号",name="receiverAccount") + private String receiverAccount; + @io.swagger.annotations.ApiModelProperty(value="说明",name="receiverComments") + private String receiverComments; + @io.swagger.annotations.ApiModelProperty(value="",name="createTime") + private Date createTime; + @io.swagger.annotations.ApiModelProperty(value="",name="updateTime") + private Date updateTime; + + @io.swagger.annotations.ApiModelProperty(value="分账接收方状态 0,正常 1,停用",name="status") + private Integer status; + @io.swagger.annotations.ApiModelProperty(value="平台 EnumAppPlat",name="plat") + private Integer plat; + + @io.swagger.annotations.ApiModelProperty(value = "进件状态", name = "ttImportStatus") + private String ttImportStatus; + + @TableField(exist = false) + private Integer wxImportStatus; + @TableField(exist = false) + private Integer alipayImportStatus; + @TableField(exist = false) + private Integer hzImportStatus; + + private QueryMerchantResult getMerchantResult(){ + QueryMerchantResult queryMerchantResult = null; + try{ + if(StringUtils.isNotBlank(this.ttImportStatus)) { + queryMerchantResult = JSON.parseObject(this.ttImportStatus, QueryMerchantResult.class); + } + }catch(Exception e){} + if(queryMerchantResult == null){ + queryMerchantResult = new QueryMerchantResult(); + } + return queryMerchantResult; + } + + public Integer getWxImportStatus(){ + return getMerchantResult().getWx(); + } + public Integer getAlipayImportStatus(){ + return getMerchantResult().getAlipay(); + } + public Integer getHzImportStatus(){ + return getMerchantResult().getHz(); + } + + @io.swagger.annotations.ApiModelProperty(value = "进件页面", name = "ttImportUrl") + private String ttImportUrl; + + @io.swagger.annotations.ApiModelProperty(value = "余额页面", name = "ttBalanceUrl") + private String ttBalanceUrl; + + + + + + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="分账金额(分)",name="sharingAmount") + private Integer sharingAmount; + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="真实费率",name="rateAmount") + private Integer rateAmount; + @TableField(exist = false) + private Integer realRateAmount;//平台手续费 + @TableField(exist = false) + private Integer commissionAmount;//平台佣金 + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java index bb197b311..52b96241c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java @@ -30,7 +30,7 @@ public class WxProfitSharingReceiver extends TenantEntity { private Date createTime; @io.swagger.annotations.ApiModelProperty(value="",name="updateTime") private Date updateTime; - @io.swagger.annotations.ApiModelProperty(value="分账类型:1-服务商户分账,2-商户转入银行卡",name="sharingType") + @io.swagger.annotations.ApiModelProperty(value="EnumProfitSharingType 分账类型:1-服务商户分账,2-商户转入银行卡",name="sharingType") private Integer sharingType; @io.swagger.annotations.ApiModelProperty(value="",name="bankNo") private String bankNo; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java b/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java new file mode 100644 index 000000000..76215f157 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumProfitPaymentReceiverType { + wx_special_merchant_number(0, "MERCHANT_ID"),//微信特约商户号 + wx_personal_wechatid(1, "PERSONAL_WECHATID"),//微信号 已不支持 + wx_personal_openid(2, "PERSONAL_OPENID"),//v2,v3 + wx_personal_sub_openid(3, "PERSONAL_SUB_OPENID"), + + tt_merchant_number(10,"")//抖音商户号 + ; + + public static EnumProfitPaymentReceiverType getEnum(Integer code) { + for (EnumProfitPaymentReceiverType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumProfitPaymentReceiverType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingType.java b/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingType.java index 43d1e3b5e..4f43ed40a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingType.java @@ -4,11 +4,8 @@ package com.iformall.enums; * Created by Stormeye on 2018/08/09. */ public enum EnumProfitSharingType { - PROFIT_SHARING_TYPE_WECHAT(1, "微信分账"), - PROFIT_SHARING_TYPE_BANK(2, "银行卡分账"), - - PROFIT_SHARING_TYPE_DOUYIN(3, "抖音进件"), - PROFIT_SHARING_TYPE_WECHAT_v2(4, "微信特约商户进件"), + PROFIT_SHARING_TYPE_SYS(1, "系统分账"), + PROFIT_SHARING_TYPE_BANK(2, "银行卡打款"), ; public static EnumProfitSharingType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxProfitPaymentReceiverMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxProfitPaymentReceiverMapper.java new file mode 100644 index 000000000..c36e7b2e4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxProfitPaymentReceiverMapper.java @@ -0,0 +1,15 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxProfitPaymentReceiver; +import com.iformall.domain.po.WxProfitSharingReceiver; + +import java.util.List; + +public interface WxProfitPaymentReceiverMapper extends CommonMapper { + + List findList(WxProfitPaymentReceiver record); + + WxProfitPaymentReceiver findOne(WxProfitPaymentReceiver record); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxProfitSharingReceiverMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxProfitSharingReceiverMapper.java index c4c92e5ad..6d238fcfc 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxProfitSharingReceiverMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxProfitSharingReceiverMapper.java @@ -10,5 +10,4 @@ public interface WxProfitSharingReceiverMapper extends CommonMapper findMerchantIdList(WxProfitSharingReceiver wxProfitSharingReceiver); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index 9ec2ba45b..13227d1b2 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -142,10 +142,9 @@ public interface WxMerchantService { /** * * @param wxMerchant - * @param isSync 是否需要同步第三方(微信总分模式需要) * @return */ - ResultData updateMerchantAccount(WxMerchant wxMerchant,boolean isSync); + ResultData updateMerchantAccount(WxMerchant wxMerchant); ResultData updateMerchantAdmin(WxMerchant wxMerchant); diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java new file mode 100644 index 000000000..04e5f0ab6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java @@ -0,0 +1,70 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxProfitPaymentReceiver; +import com.iformall.domain.po.WxProfitSharingReceiver; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumAppPlat; +import com.iformall.enums.EnumProfitPaymentReceiverType; +import com.iformall.enums.EnumProfitSharingType; + +import java.util.List; + +public interface WxProfitPaymentReceiverService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + PageInfo listAsPage(WxProfitPaymentReceiver record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxProfitPaymentReceiver getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxProfitPaymentReceiver record); + +// /** +// * 根据Id删除实体 +// * +// * @param id +// */ +// void deleteById(Long id); + + /** + * 获取门店的收款帐号 + * @param tenantEntity + * @param merchantId + * @param plat + * @param receiverType + * @return + */ + WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat, EnumProfitPaymentReceiverType receiverType); + + + ResultData updateReceiver(WxProfitPaymentReceiver receiver); + + + + ResultData updateTtReceiver(WxMerchant merchant); + + ResultData getTtReceiverImprotURL(WxMerchant merchant); + + ResultData getTtReceiverBalanceURL(WxMerchant merchant); + + ResultData updateTtReceiverImportStatus(WxMerchant merchant); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java index 3a2fbbc07..a70448736 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java @@ -43,30 +43,22 @@ public interface WxProfitSharingReceiverService { */ void deleteById(Long id); - WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitSharingType sharingType); + WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat); List findReceivers(TenantEntity tenantEntity,Long merchantId); - ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList, boolean isSync); + ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList); - ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send, boolean isSync); + ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send); /** * * @param merchant * @param receiver - * @param isSync 是否需要同步第三方(微信总分模式需要) * @return */ - ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, boolean isSync); + ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver); void sendMsg(String phone, String account, String merchant, String time, Integer modelType, TenantEntity tenantEntity); - ResultData updateTtReceiver(WxMerchant merchant); - - ResultData getTtReceiverImprotURL(WxMerchant merchant); - - ResultData getTtReceiverBalanceURL(WxMerchant merchant); - - ResultData updateTtReceiverIsUse(WxMerchant merchant); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 5054390b9..0ad378c6b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -1471,9 +1471,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if(wxPayOrder != null && EnumPayMchType.TOTAL.getCode().equals(wxPayOrder.getMchType()) && EnumPayShare.YES.getCode().equals(wxPayOrder.getShare())){ WxProfitSharingReceiver receiver = payServiceFactory.getPayShareAdapterService(wxPayOrder.getPayVendor(),couponOrder.getPayVersion()) - .getReceiver(mallTenantEntity, merchantId, wxPayOrder.getTtPayWay(),wxPayOrder.getMchType()); + .getSharingReceiver(mallTenantEntity, merchantId, wxPayOrder.getTtPayWay(),wxPayOrder.getMchType()); if (null == receiver) { - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL.getCode(),"当前商户没有配置收款账号。"); + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL.getCode(),"当前商户没有配置分账账号。"); } } // else if(wxPayOrder != null && EnumPayMchType.DIRECT.getCode().equals(wxPayOrder.getMchType())){ @@ -2890,7 +2890,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { String merchant_uid = ""; if(EnumPayMchType.DIRECT.getCode().equals(payOrder.getMchType())){//直连模式记录收款商户 merchant_id = bUser.getMerchantId(); - WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, payOrder.getMchType()); + WxProfitPaymentReceiver receiver = payShareServie.getPaymantReceiver(payAccount, merchant_id); if(receiver == null){ throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index 5bfc8a1a7..963fbcc50 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -890,7 +890,7 @@ public class WxCouponServiceImpl implements WxCouponService { //多商户券,抖音 直连 门店只有进件支付宝才能参加活动 todo if(EnumAppPlat.TOUTIAO.equals(plat) && EnumCouponMerchantType.MULTIPLE_MERCHANT.getCode().equals(record.getMerchantType())){ for (WxMerchant merchant:merchantList) { - WxProfitSharingReceiver receiver = payShareServie.getReceiver(mallTenantEntity, merchant.getId(), null, payMchType.getCode()); + WxProfitPaymentReceiver receiver = payShareServie.getPaymantReceiver(mallTenantEntity, merchant.getId()); if (receiver == null) { badNames.add(merchant.getName()); } @@ -975,7 +975,7 @@ public class WxCouponServiceImpl implements WxCouponService { //总分模式下不能分账的商户 private boolean toTalPayMchTypeMerchantIsBad(PayShareAdapterService payShareServie,WxPayAccount payAccount, String merchantName,Long merchantId,EnumPayMchType payMchType,EnumAppPlat plat) throws Exception { - WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchantId, null, payMchType.getCode()); + WxProfitSharingReceiver receiver = payShareServie.getSharingReceiver(payAccount, merchantId, null, payMchType.getCode()); if (receiver == null) { return true; } @@ -1615,7 +1615,7 @@ public class WxCouponServiceImpl implements WxCouponService { if(wxCoupon.getSalePrice() != null && wxCoupon.getSalePrice() > 0) { PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); - WxProfitSharingReceiver receiver = payShareServie.getReceiver(makeMerchant, makeMerchant.getId(), null, payMchType.getCode()); + WxProfitPaymentReceiver receiver = payShareServie.getPaymantReceiver(makeMerchant, makeMerchant.getId()); if (receiver == null) { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "所属商户[\""+makeMerchant.getName()+"\"]未配置收款账户"); } @@ -1873,7 +1873,7 @@ public class WxCouponServiceImpl implements WxCouponService { Map merchantAutoShareMap = new HashMap(); for (Long mid:wxCoupon.getMerchantIds()) { //开通了支付宝就可以 - WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, mid, null, payMchType.getCode()); + WxProfitSharingReceiver receiver = payShareServie.getSharingReceiver(payAccount, mid, null, payMchType.getCode()); if (null == receiver) { merchantAutoShareMap.put(mid, false); }else { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index e802c5731..827adc5be 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -744,7 +744,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) @Override - public ResultData updateMerchantAccount(WxMerchant wxMerchant,boolean isSync) { + public ResultData updateMerchantAccount(WxMerchant wxMerchant) { try { if (wxMerchant.getId() == null) { return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); @@ -760,7 +760,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setReceiverType(wxMerchant.getAccountTypeValue()); receiver.setTrueName(wxMerchant.getAccountName()); receiver.setParameter(wxMerchant.getAccountParameter()); - return wxProfitSharingReceiverService.updateReceiver(wxMerchant, receiver, isSync); + return wxProfitSharingReceiverService.updateReceiver(wxMerchant, receiver); } } catch (Exception e) { logger.error("db failed: 账户操作失败, e:" + e.getMessage(),e); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 079959a49..e3aa29271 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -427,7 +427,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); } PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); - WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, payMchTypeEnum.getCode()); + WxProfitPaymentReceiver receiver = payShareServie.getPaymantReceiver(payAccount, merchant_id); if(receiver == null){ throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); } @@ -558,7 +558,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { String merchant_uid = ""; if(EnumPayMchType.DIRECT.getCode().equals(record.getMchType())){//直连模式记录收款商户 merchant_id = user.getMerchantId(); - WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, record.getMchType()); + WxProfitPaymentReceiver receiver = payShareServie.getPaymantReceiver(payAccount, merchant_id); if(receiver == null){ throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java new file mode 100644 index 000000000..3ee548dcc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java @@ -0,0 +1,325 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.dto.WxMerchantDto; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.po.msg.WxMsgRecord; +import com.iformall.domain.vo.WxMerchantVo; +import com.iformall.douyin.pay.DouYinPayHelper; +import com.iformall.douyin.pay.enums.AppAddSubMerchantUrlType; +import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; +import com.iformall.douyin.pay.preOrder.AppAddSubMerchant; +import com.iformall.douyin.pay.preOrder.AppAddSubMerchantResult; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxProfitPaymentReceiverMapper; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.*; +import com.iformall.service.pay.PayServiceFactory; +import com.iformall.service.pay.service.share.entity.ShareAccountResult; +import com.iformall.utils.Constant; +import com.iformall.utils.DateUtils; +import com.iformall.utils.RedisCacheUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Service +public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiverService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxProfitPaymentReceiverMapper wxProfitPaymentReceiverMapper; + @Autowired + WxAppinfoService wxAppinfoService; + @Autowired + WxPayAccountService wxPayAccountService; + + @Lazy + @Autowired + WxMerchantService wxMerchantService; + + @Autowired + private MqBaseProducer mqBaseProducer; + + @Autowired + PayServiceFactory payServiceFactory; + + @Autowired + @Qualifier("objectCommonRedisTemplate") + RedisTemplate paymentReceicerRedisTemplate; + + @Override + public PageInfo listAsPage(WxProfitPaymentReceiver record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxProfitPaymentReceiverMapper.findList(record)); + } + + @Override + public WxProfitPaymentReceiver getById(Long id) { + return wxProfitPaymentReceiverMapper.selectById(id); + } + + @Override + public void saveOrUpdate(WxProfitPaymentReceiver record) { + Date date = new Date(); + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(date); + record.setUpdateTime(date); + wxProfitPaymentReceiverMapper.insert(record); + } else { + record.setUpdateTime(date); + wxProfitPaymentReceiverMapper.updateById(record); + this.deleteRedis(record.getId()); + } + } + +// @Override +// public void deleteById(Long id) { +// wxProfitPaymentReceiverMapper.deleteById(id); +// } + + + @Override + public WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitPaymentReceiverType receiverType) { + WxProfitPaymentReceiver record = null; + String key = Constant.paymentReceicerPrev + tenantEntity.getTenantId() + + ":" + plat.getCode() + + ":" + merchantId + + ":" + receiverType.getCode(); + record = RedisCacheUtils.getCacheObject(paymentReceicerRedisTemplate, key, WxProfitPaymentReceiver.class); + if(record == null){ + WxProfitPaymentReceiver receiver = new WxProfitPaymentReceiver(); + receiver.updateTenantInfo(tenantEntity); + receiver.setMerchantId(merchantId); + receiver.setPlat(plat.getCode()); + receiver.setReceiverType(receiverType.getCode()); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + record = wxProfitPaymentReceiverMapper.findOne(receiver); + if(record != null){ + RedisCacheUtils.cache(paymentReceicerRedisTemplate, key, record, 3600*24*7); + } + } + return record; + + } + + + @Override + public ResultData updateTtReceiver(WxMerchant merchant) { + if(merchant == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); + } + WxProfitPaymentReceiver wxProfitPaymentReceiver = getTtPaymentReceiver(merchant); + + //进件页面 + AppAddSubMerchantResult improt_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.improt_URL); + if(improt_URLResult.isSuccess()){ + wxProfitPaymentReceiver.setReceiverAccount(improt_URLResult.getMerchantId()); + wxProfitPaymentReceiver.setTtImportUrl(improt_URLResult.getUrl()); + }else{ + logger.error("获取进件页面 error{}"+improt_URLResult.getMsg()); + } + //余额页面 + AppAddSubMerchantResult balance_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.Balance_URL); + if(balance_URLResult.isSuccess()){ + wxProfitPaymentReceiver.setReceiverAccount(balance_URLResult.getMerchantId()); + wxProfitPaymentReceiver.setTtBalanceUrl(balance_URLResult.getUrl()); + }else{ + logger.error("获取余额页面 error{}"+balance_URLResult.getMsg()); + } + this.saveOrUpdate(wxProfitPaymentReceiver); + return new ResultData(); + } + + @Override + public ResultData getTtReceiverImprotURL(WxMerchant merchant) { + if(merchant == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); + } + WxProfitPaymentReceiver wxProfitPaymentReceiver = getTtPaymentReceiver(merchant); + //进件页面 + AppAddSubMerchantResult improt_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.improt_URL); + if(improt_URLResult.isSuccess()){ + wxProfitPaymentReceiver.setReceiverAccount(improt_URLResult.getMerchantId()); + wxProfitPaymentReceiver.setTtImportUrl(improt_URLResult.getUrl()); + this.saveOrUpdate(wxProfitPaymentReceiver); + return new ResultData(wxProfitPaymentReceiver.getTtImportUrl()); + }else{ + logger.error("获取进件页面 error{}"+improt_URLResult.getMsg()); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + } + + @Override + public ResultData getTtReceiverBalanceURL(WxMerchant merchant) { + if(merchant == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); + } + WxProfitPaymentReceiver wxProfitPaymentReceiver = getTtPaymentReceiver(merchant); + //余额页面 + AppAddSubMerchantResult balance_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.Balance_URL); + if(balance_URLResult.isSuccess()){ + wxProfitPaymentReceiver.setReceiverAccount(balance_URLResult.getMerchantId()); + wxProfitPaymentReceiver.setTtBalanceUrl(balance_URLResult.getUrl()); + this.saveOrUpdate(wxProfitPaymentReceiver); + return new ResultData(wxProfitPaymentReceiver.getTtBalanceUrl()); + }else{ + logger.error("获取余额页面 error{}"+balance_URLResult.getMsg()); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + } + + private WxProfitPaymentReceiver getTtPaymentReceiver(WxMerchant merchant){ + WxProfitPaymentReceiver receiver = new WxProfitPaymentReceiver(); + receiver.updateTenantInfo(merchant); + receiver.setMerchantId(merchant.getId()); + receiver.setReceiverType(EnumProfitPaymentReceiverType.tt_merchant_number.getCode()); + receiver.setPlat(EnumAppPlat.TOUTIAO.getCode()); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + WxProfitPaymentReceiver wxProfitPaymentReceiver = wxProfitPaymentReceiverMapper.selectOne(new QueryWrapper(receiver)); + if(wxProfitPaymentReceiver == null){ + receiver.setReceiverAccount("0"); + this.saveOrUpdate(receiver); + return receiver; + } + return wxProfitPaymentReceiver; + } + + @Override + public ResultData updateTtReceiverImportStatus(WxMerchant merchant) { + if(merchant == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); + } + WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(merchant.getTenantId(), EnumAppPlat.TOUTIAO); + if(appInfo == null){ + throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); + } + WxPayAccount payAcount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); + if(payAcount == null){ + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND); + } + + WxProfitPaymentReceiver receiver = new WxProfitPaymentReceiver(); + receiver.updateTenantInfo(merchant); + receiver.setMerchantId(merchant.getId()); + receiver.setReceiverType(EnumProfitPaymentReceiverType.tt_merchant_number.getCode()); + receiver.setPlat(EnumAppPlat.TOUTIAO.getCode()); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + WxProfitPaymentReceiver wxProfitPaymentReceiver = wxProfitPaymentReceiverMapper.selectOne(new QueryWrapper(receiver)); + if(wxProfitPaymentReceiver == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到收款信息"); + } + + QueryMerchantResult queryMerchantResult = DouYinPayHelper.queryMerchantStatus(appInfo.getAppId(), payAcount.getMerchantApiKey(), wxProfitPaymentReceiver.getReceiverAccount(), wxProfitPaymentReceiver.getMerchantId().toString(), null); + if(queryMerchantResult != null){ + wxProfitPaymentReceiver.setTtImportStatus(JSON.toJSONString(queryMerchantResult)); + this.saveOrUpdate(wxProfitPaymentReceiver); + return new ResultData(); + }else{ + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"查询进件状态出错!"); + } + } + + private AppAddSubMerchantResult appAddSubMerchant(TenantEntity tenantEntity, String merchantId, AppAddSubMerchantUrlType appAddSubMerchantUrlType){ + WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.TOUTIAO); + if(appInfo == null){ + throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); + } + WxPayAccount payAcount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); + if(payAcount == null){ + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND); + } + AppAddSubMerchant appAddSubMerchant = new AppAddSubMerchant(); + appAddSubMerchant.setAppId(appInfo.getAppId()); + appAddSubMerchant.setSalt(payAcount.getMerchantApiKey()); + appAddSubMerchant.setSubMerchantId(merchantId); + appAddSubMerchant.setUrlType(appAddSubMerchantUrlType.getCode()); + return DouYinPayHelper.appAddSubMerchant(appAddSubMerchant); + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public ResultData updateReceiver(WxProfitPaymentReceiver receiver) { + + if(receiver.getMerchantId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"缺少商户信息"); + } + if(receiver.getPlat() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"缺少平台信息"); + } + if(receiver.getReceiverType() == null){ + receiver.setReceiverType(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode()); + } + + WxProfitPaymentReceiver receiverQ = new WxProfitPaymentReceiver(); + receiverQ.updateTenantInfo(receiver); + receiverQ.setMerchantId(receiver.getMerchantId()); + receiverQ.setReceiverAccount(receiver.getReceiverAccount()); + // + WxProfitPaymentReceiver paymentReceiver = wxProfitPaymentReceiverMapper.selectOne(new QueryWrapper(receiverQ)); + if(paymentReceiver != null){ + receiver.setId(paymentReceiver.getId()); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + this.saveOrUpdate(receiver); + }else{ + WxProfitPaymentReceiver oldReceiver = new WxProfitPaymentReceiver(); + oldReceiver.updateTenantInfo(receiver); + oldReceiver.setMerchantId(receiver.getMerchantId()); + oldReceiver.setReceiverType(receiver.getReceiverType()); + oldReceiver.setPlat(receiver.getPlat()); + oldReceiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + List oldList = wxProfitPaymentReceiverMapper.selectList(new QueryWrapper(oldReceiver)); + + receiver.setId(null); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + this.saveOrUpdate(receiver); + + if(oldList != null && oldList.size() > 0){ + for (WxProfitPaymentReceiver delReceiver:oldList) { + WxProfitPaymentReceiver del = new WxProfitPaymentReceiver(); + del.setId(delReceiver.getId()); + del.updateTenantInfo(delReceiver); + del.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode()); + this.saveOrUpdate(del); + } + } + } + + return new ResultData(); + } + + private void deleteRedis(Long id){ + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverMapper.selectById(id); + if(receiver != null){ + String key = Constant.paymentReceicerPrev + receiver.getTenantId() + + ":" + receiver.getPlat() + + ":" + receiver.getMerchantId() + + ":" + receiver.getReceiverType(); + RedisCacheUtils.removeCache(paymentReceicerRedisTemplate, key); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java index c39ef6c5d..519020417 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -161,7 +161,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ merchantQ.setStatus(EnumMerchantStatus.VALID.getCode()); WxMerchant merchant = wxMerchantService.findListOne(merchantQ); if(merchant != null && !merchant.getId().equals(payMerchantId)){ - return payShareAdapterService.getReceiver(tenantEntity, merchant.getId(), ttPayWay, mchType); + return payShareAdapterService.getSharingReceiver(tenantEntity, merchant.getId(), ttPayWay, mchType); } return null; } @@ -332,7 +332,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ isSharingResult = true; }else{ isCallSharing = true; - WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(merchant,sharingOrder.getMerchantId(),payOrder.getTtPayWay(),payOrder.getMchType()); + WxProfitSharingReceiver receiver = payShareAdapterService.getSharingReceiver(merchant,sharingOrder.getMerchantId(),payOrder.getTtPayWay(),payOrder.getMchType()); if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType()) && EnumPayShare.YES.getCode().equals(payOrder.getShare())){ //总分 分账 抖音不支持 不支持开通 JSONObject jo = new JSONObject(); @@ -427,7 +427,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType())){ //解冻给收款方(广场) JSONObject jo = new JSONObject(); - jo.put("type",EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_MERCHANT_ID.getMessage()); + jo.put("type",EnumProfitPaymentReceiverType.wx_special_merchant_number.getMessage()); jo.put("account",payAccount.getSubMchId()); jo.put("amount", shareAmount); jo.put("merchantId",0); @@ -435,7 +435,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ jo.put("description",0); receivers.add(jo); }else if(EnumPayMchType.DIRECT.getCode().equals(payOrder.getMchType())){ - WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrder,wxComposeChildOrderShare.getMerchantId(),payOrder.getTtPayWay(),payOrder.getMchType()); + WxProfitPaymentReceiver receiver = payShareAdapterService.getPaymantReceiver(sharingOrder,wxComposeChildOrderShare.getMerchantId()); //解冻给收款方(门店) JSONObject jo = new JSONObject(); jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverApplyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverApplyServiceImpl.java index 27052f358..2daf0a469 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverApplyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverApplyServiceImpl.java @@ -39,7 +39,7 @@ public class WxProfitSharingReceiverApplyServiceImpl implements WxProfitSharingR WxProfitSharingReceiverApplyMapper wxProfitSharingReceiverApplyMapper; @Autowired - WxProfitSharingReceiverService wxProfitSharingReceiverService; + WxProfitPaymentReceiverService wxProfitPaymentReceiverService; @Autowired WxAppinfoService wxAppinfoService; @@ -189,21 +189,13 @@ public class WxProfitSharingReceiverApplyServiceImpl implements WxProfitSharingR receiverApplyUpd.setUpdateTime(new Date()); wxProfitSharingReceiverApplyMapper.updateById(receiverApplyUpd); if(enumApplymentState.equals(EnumSharingReceiverApplymentState.APPLYMENT_STATE_FINISHED)){ - WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(receiverApply, receiverApply.getMerchantId(), EnumAppPlat.WX, EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); - WxProfitSharingReceiver receiverUpd = new WxProfitSharingReceiver(); - receiverUpd.updateTenantInfo(receiverApply); - if(receiver != null){ - receiverUpd.setId(receiver.getId()); - receiverUpd.setReceiverAccount(receiverApplyUpd.getSubMchid()); - }else{ - receiverUpd.setPlat(EnumAppPlat.WX.getCode()); - receiverUpd.setMerchantId(receiverApply.getMerchantId()); - receiverUpd.setReceiverType(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_MERCHANT_ID.getCode()); - receiverUpd.setReceiverAccount(receiverApplyUpd.getSubMchid()); - receiverUpd.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2.getCode()); - receiverUpd.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - } - wxProfitSharingReceiverService.saveOrUpdate(receiverUpd); + WxProfitPaymentReceiver receiver = new WxProfitPaymentReceiver(); + receiver.updateTenantInfo(receiverApply); + receiver.setMerchantId(receiverApply.getMerchantId()); + receiver.setPlat(EnumAppPlat.WX.getCode()); + receiver.setReceiverType(EnumProfitPaymentReceiverType.tt_merchant_number.getCode()); + receiver.setReceiverAccount(receiverApplyUpd.getSubMchid()); + wxProfitPaymentReceiverService.updateReceiver(receiver); } receiverApply.setSubMchid(receiverApplyUpd.getSubMchid()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java index 864a8e0e2..44ca366fb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java @@ -124,20 +124,23 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv @Override - public WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitSharingType sharingType) { + public WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat) { WxProfitSharingReceiver record = null; String key = Constant.sharingReceicerPrev + tenantEntity.getTenantId() - + ":" + merchantId - + ":" + plat.getCode() + "a" + sharingType.getCode(); + + ":" + plat.getCode() + + ":" + merchantId; record = RedisCacheUtils.getCacheObject(sharingReceicerRedisTemplate, key, WxProfitSharingReceiver.class); if(record == null){ WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); receiver.updateTenantInfo(tenantEntity); receiver.setMerchantId(merchantId); receiver.setPlat(plat.getCode()); - receiver.setSharingType(sharingType.getCode()); + receiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_SYS.getCode()); receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - record = wxProfitSharingReceiverMapper.findOne(receiver); + List receivers = wxProfitSharingReceiverMapper.findList(receiver); + if(receivers != null && receivers.size() > 0){ + record = receivers.get(0); + } if(record != null){ RedisCacheUtils.cache(sharingReceicerRedisTemplate, key, record, 3600*24*7); } @@ -156,14 +159,14 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv } @Override - public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList, boolean isSync) { + public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList) { WxAppinfo appInfo = wxAppinfoService.getCAppInfo(merchant,EnumAppPlat.WX); WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); receiver.updateTenantInfo(merchant); receiver.setMerchantId(merchant.getId()); - receiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT.getCode()); + receiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_SYS.getCode()); receiver.setId(IdWorker.get().nextId()); Date date = new Date(); receiver.setCreateTime(date); @@ -177,20 +180,18 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv //receiver.setReceiverType(receiverParam.getReceiverType()); //receiver.setTrueName(receiverParam.getTrueName()); - if(isSync){ - //添加分账账户 - ShareAccountResult createResult = payServiceFactory.getPayShareAdapterService(EnumPayWay.PAY_WAY_WECHAT.getCode(),payAccount.getPayVersion()) - .createShareAccount(appInfo, payAccount, receiver); - if (!createResult.isSuccess()) { - return new ResultData(createResult.getCode(), createResult.getMsg()); - } + //添加分账账户 + ShareAccountResult createResult = payServiceFactory.getPayShareAdapterService(EnumPayWay.PAY_WAY_WECHAT.getCode(),payAccount.getPayVersion()) + .createShareAccount(appInfo, payAccount, receiver); + if (!createResult.isSuccess()) { + return new ResultData(createResult.getCode(), createResult.getMsg()); } wxProfitSharingReceiverMapper.insert(receiver); //添加成功才删除账户 for (WxProfitSharingReceiver delReceiver : delList) { - delReceiver(delReceiver, EnumMsgSend.MSG_SEND_NOT_IMMEDIATELY.getCode(),isSync); + delReceiver(delReceiver, EnumMsgSend.MSG_SEND_NOT_IMMEDIATELY.getCode()); } WxProfitSharingReceiver wxProfitSharingReceiver = new WxProfitSharingReceiver(); @@ -269,148 +270,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv } @Override - public ResultData updateTtReceiver(WxMerchant merchant) { - if(merchant == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); - } - WxProfitSharingReceiver wxProfitSharingReceiver = getTtSharingReceiver(merchant); - - //进件页面 - AppAddSubMerchantResult improt_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.improt_URL); - if(improt_URLResult.isSuccess()){ - wxProfitSharingReceiver.setReceiverAccount(improt_URLResult.getMerchantId()); - wxProfitSharingReceiver.setTtImportUrl(improt_URLResult.getUrl()); - }else{ - logger.error("获取进件页面 error{}"+improt_URLResult.getMsg()); - } - //余额页面 - AppAddSubMerchantResult balance_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.Balance_URL); - if(balance_URLResult.isSuccess()){ - wxProfitSharingReceiver.setReceiverAccount(balance_URLResult.getMerchantId()); - wxProfitSharingReceiver.setTtBalanceUrl(balance_URLResult.getUrl()); - }else{ - logger.error("获取余额页面 error{}"+balance_URLResult.getMsg()); - } - this.saveOrUpdate(wxProfitSharingReceiver); - return new ResultData(); - } - - @Override - public ResultData getTtReceiverImprotURL(WxMerchant merchant) { - if(merchant == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); - } - WxProfitSharingReceiver wxProfitSharingReceiver = getTtSharingReceiver(merchant); - //进件页面 - AppAddSubMerchantResult improt_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.improt_URL); - if(improt_URLResult.isSuccess()){ - wxProfitSharingReceiver.setReceiverAccount(improt_URLResult.getMerchantId()); - wxProfitSharingReceiver.setTtImportUrl(improt_URLResult.getUrl()); - this.saveOrUpdate(wxProfitSharingReceiver); - return new ResultData(wxProfitSharingReceiver.getTtImportUrl()); - }else{ - logger.error("获取进件页面 error{}"+improt_URLResult.getMsg()); - return new ResultData(ErrorCode.SYS_SERVER_ERROR); - } - } - - @Override - public ResultData getTtReceiverBalanceURL(WxMerchant merchant) { - if(merchant == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); - } - WxProfitSharingReceiver wxProfitSharingReceiver = getTtSharingReceiver(merchant); - //余额页面 - AppAddSubMerchantResult balance_URLResult = appAddSubMerchant(merchant,merchant.getId().toString(),AppAddSubMerchantUrlType.Balance_URL); - if(balance_URLResult.isSuccess()){ - wxProfitSharingReceiver.setReceiverAccount(balance_URLResult.getMerchantId()); - wxProfitSharingReceiver.setTtBalanceUrl(balance_URLResult.getUrl()); - this.saveOrUpdate(wxProfitSharingReceiver); - return new ResultData(wxProfitSharingReceiver.getTtBalanceUrl()); - }else{ - logger.error("获取余额页面 error{}"+balance_URLResult.getMsg()); - return new ResultData(ErrorCode.SYS_SERVER_ERROR); - } - } - - private WxProfitSharingReceiver getTtSharingReceiver(WxMerchant merchant){ - WxProfitSharingReceiver oldReceiver = new WxProfitSharingReceiver(); - oldReceiver.updateTenantInfo(merchant); - oldReceiver.setMerchantId(merchant.getId()); - oldReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN.getCode()); - oldReceiver.setPlat(EnumAppPlat.TOUTIAO.getCode()); - WxProfitSharingReceiver wxProfitSharingReceiver = wxProfitSharingReceiverMapper.selectOne(new QueryWrapper(oldReceiver)); - if(wxProfitSharingReceiver == null){ - wxProfitSharingReceiver = oldReceiver; - wxProfitSharingReceiver.setReceiverType(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_MERCHANT_ID.getCode()); - wxProfitSharingReceiver.setReceiverAccount("0"); -// wxProfitSharingReceiver.setIsUse(EnumProfitSharingUse.APPLY.getCode()); - wxProfitSharingReceiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - this.saveOrUpdate(wxProfitSharingReceiver); - } - return wxProfitSharingReceiver; - } - - @Override - public ResultData updateTtReceiverIsUse(WxMerchant merchant) { - if(merchant == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); - } - WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(merchant.getTenantId(), EnumAppPlat.TOUTIAO); - if(appInfo == null){ - throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); - } - WxPayAccount payAcount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); - if(payAcount == null){ - throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND); - } - - WxProfitSharingReceiver oldReceiver = new WxProfitSharingReceiver(); - oldReceiver.updateTenantInfo(merchant); - oldReceiver.setMerchantId(merchant.getId()); - oldReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN.getCode()); - oldReceiver.setPlat(EnumAppPlat.TOUTIAO.getCode()); - WxProfitSharingReceiver wxProfitSharingReceiver = wxProfitSharingReceiverMapper.selectOne(new QueryWrapper(oldReceiver)); - if(wxProfitSharingReceiver == null){ - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到分账信息"); - } - - QueryMerchantResult queryMerchantResult = DouYinPayHelper.queryMerchantStatus(appInfo.getAppId(), payAcount.getMerchantApiKey(), wxProfitSharingReceiver.getReceiverAccount(), wxProfitSharingReceiver.getMerchantId().toString(), null); - if(queryMerchantResult != null){ -// if(queryMerchantResult.getWx().intValue() != 1){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"微信渠道未进件成功!"); -// } -// if(queryMerchantResult.getAlipay().intValue() != 1){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"支付宝渠道未进件成功!"); -// } -// wxProfitSharingReceiver.setIsUse(EnumProfitSharingUse.YES.getCode()); - wxProfitSharingReceiver.setTtImportStatus(JSON.toJSONString(queryMerchantResult)); - this.saveOrUpdate(wxProfitSharingReceiver); - return new ResultData(); - }else{ - return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"查询进件状态出错!"); - } - } - - private AppAddSubMerchantResult appAddSubMerchant(TenantEntity tenantEntity, String merchantId, AppAddSubMerchantUrlType appAddSubMerchantUrlType){ - WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.TOUTIAO); - if(appInfo == null){ - throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); - } - WxPayAccount payAcount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); - if(payAcount == null){ - throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND); - } - AppAddSubMerchant appAddSubMerchant = new AppAddSubMerchant(); - appAddSubMerchant.setAppId(appInfo.getAppId()); - appAddSubMerchant.setSalt(payAcount.getMerchantApiKey()); - appAddSubMerchant.setSubMerchantId(merchantId); - appAddSubMerchant.setUrlType(appAddSubMerchantUrlType.getCode()); - return DouYinPayHelper.appAddSubMerchant(appAddSubMerchant); - } - - @Override - public ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send, boolean isSync) { + public ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send) { // WxAppinfo appInfo = wxAppinfoService.getCAppInfo(receiver,EnumAppPlat.WX); // WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); @@ -434,13 +294,11 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv ))) { //还有别的商户使用这个账号,不从微信服务器申请删除 } else { - if(isSync){ - WxAppinfo appInfo = wxAppinfoService.getCAppInfo(receiver,EnumAppPlat.WX); - WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); - ShareAccountResult shareResult = payServiceFactory.getPayShareAdapterService(receiver.getPlat(),payAccount.getPayVersion()).deleteShareAccount(appInfo, payAccount, receiver); - if (!shareResult.isSuccess()) { - return new ResultData(shareResult.getCode(), shareResult.getMsg()); - } + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(receiver,EnumAppPlat.WX); + WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); + ShareAccountResult shareResult = payServiceFactory.getPayShareAdapterService(receiver.getPlat(),payAccount.getPayVersion()).deleteShareAccount(appInfo, payAccount, receiver); + if (!shareResult.isSuccess()) { + return new ResultData(shareResult.getCode(), shareResult.getMsg()); } } @@ -457,12 +315,12 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv } @Override - public ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver,boolean isSync) { + public ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver) { WxProfitSharingReceiver oldReceiver = new WxProfitSharingReceiver(); oldReceiver.updateTenantInfo(merchant); oldReceiver.setMerchantId(merchant.getId()); - oldReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT.getCode()); + oldReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_SYS.getCode()); oldReceiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); oldReceiver.setPlat(EnumAppPlat.WX.getCode()); List delList = wxProfitSharingReceiverMapper.selectList(new QueryWrapper(oldReceiver)); @@ -472,7 +330,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv oldReceiver = wxProfitSharingReceiverMapper.selectOne(new QueryWrapper(oldReceiver)); if (oldReceiver == null) { - return addReceiver(merchant, receiver, delList, isSync); + return addReceiver(merchant, receiver, delList); } else { oldReceiver.setParameter(receiver.getParameter()); oldReceiver.setUpdateTime(new Date()); @@ -486,8 +344,8 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv WxProfitSharingReceiver receiver = wxProfitSharingReceiverMapper.selectById(id); if(receiver != null){ String key = Constant.sharingReceicerPrev + receiver.getTenantId() - + ":" + receiver.getMerchantId() - + ":" + receiver.getPlat() + "a" + receiver.getSharingType(); + + ":" + receiver.getPlat() + + ":" + receiver.getMerchantId(); RedisCacheUtils.removeCache(sharingReceicerRedisTemplate, key); } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java index 86447e366..951156cb5 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java @@ -39,6 +39,14 @@ public interface PayShareAdapterService { */ // public PayShareCalculateAmount calculateAmount(Integer payAmount,Integer officialCommissionRate,Integer systemAmount,WxPayAccount payAccount); + /** + * 查询商户的收款账号信息 + * @param tenantEntity + * @param merchantId + * @return + */ + WxProfitPaymentReceiver getPaymantReceiver(TenantEntity tenantEntity, Long merchantId); + /** * 查询商户的收款账号信息 * @param tenantEntity @@ -46,7 +54,7 @@ public interface PayShareAdapterService { * @param ttPayWay * @return */ - WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType); + WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType); /** * 无分账接收方分账 ,钱直接分给小程序方 调用API分账 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java index 15d0f912e..b0a02eff1 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java @@ -22,6 +22,7 @@ import com.iformall.douyin.payv2.result.ProfitSharingResult; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.service.WxProfitPaymentReceiverService; import com.iformall.service.WxProfitSharingReceiverService; import com.iformall.service.order.entity.WxComposeChildOrderShare; import com.iformall.service.order.util.OrderHelper; @@ -78,6 +79,10 @@ public class TtPayShareService extends PayShareBaseAdapterService{ @Autowired WxProfitSharingReceiverService wxProfitSharingReceiverService; + @Lazy + @Autowired + WxProfitPaymentReceiverService wxProfitPaymentReceiverService; + /** * 做为分账的扩展数据 * @param payOrder @@ -94,6 +99,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ return EnumMerchantSubsidyType.DOUYIN.getCode(); } + // @Override // public Integer getSharingOrderInitialStatus() { // return EnumProfitSharingOrderStatus.PROFIT_SHARING_UNKNOWN.getCode(); @@ -308,12 +314,12 @@ public class TtPayShareService extends PayShareBaseAdapterService{ } @Override - public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { + public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { if(merchantId == null || merchantId.equals(0L)){ return null; } - WxProfitSharingReceiver record = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.TOUTIAO,EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN); + WxProfitSharingReceiver record = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.TOUTIAO); if(ttPayWay != null){ if(EnumTtPayChannel.WX_PAY.getCode().equals(ttPayWay) @@ -334,4 +340,20 @@ public class TtPayShareService extends PayShareBaseAdapterService{ } + @Override + public WxProfitPaymentReceiver getPaymantReceiver(TenantEntity tenantEntity, Long merchantId) { + if(merchantId == null || merchantId.equals(0L)){ + return null; + } + + WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.TOUTIAO,EnumProfitPaymentReceiverType.tt_merchant_number); + if(record != null && !MerchantImportStatus.improt_success.getCode().equals(record.getWxImportStatus()) + && !MerchantImportStatus.improt_success.getCode().equals(record.getAlipayImportStatus()) + && !MerchantImportStatus.improt_success.getCode().equals(record.getHzImportStatus())){ + log.error("该商户未开通支付"); + return null; + } + return record; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java index 8e8d5e63d..33b754a00 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java @@ -156,9 +156,14 @@ public class WxPayShareSFTService extends PayShareBaseAdapterService{ } @Override - public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { + public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { return null; } + @Override + public WxProfitPaymentReceiver getPaymantReceiver(TenantEntity tenantEntity, Long merchantId) { + return null; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java index 40bc71932..5954bc8b3 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java @@ -12,6 +12,7 @@ import com.iformall.douyin.pay.enums.MerchantImportStatus; import com.iformall.enums.*; import com.iformall.mapper.*; +import com.iformall.service.WxProfitPaymentReceiverService; import com.iformall.service.WxProfitSharingReceiverService; import com.iformall.utils.*; import net.sf.saxon.trans.Err; @@ -52,6 +53,10 @@ public class WxPayShareService extends PayShareBaseAdapterService{ @Autowired WxProfitSharingReceiverService wxProfitSharingReceiverService; + @Autowired + WxProfitPaymentReceiverService wxProfitPaymentReceiverService; + + final JSONObject statusMap = JSON.parseObject( "{\"ACCEPTED\":3," + "\"PROCESSING\": 4," + @@ -356,17 +361,26 @@ public class WxPayShareService extends PayShareBaseAdapterService{ } @Override - public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { + public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { if(merchantId == null || merchantId.equals(0L)){ return null; } - WxProfitSharingReceiver record = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); - if(record != null && EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().equals(record.getReceiverType())){ + WxProfitSharingReceiver record = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX); + if(record != null && EnumProfitPaymentReceiverType.wx_personal_wechatid.getCode().equals(record.getReceiverType())){ throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); } return record; } + @Override + public WxProfitPaymentReceiver getPaymantReceiver(TenantEntity tenantEntity, Long merchantId) { + if(merchantId == null || merchantId.equals(0L)){ + return null; + } + WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitPaymentReceiverType.wx_special_merchant_number); + return record; + } + private static String queryOrderShareAmount(String mchId,String transcationId,String apiKey) { WxProfitSharingP psCmd = new WxProfitSharingP(); psCmd.setMch_id(mchId);//服务商商户id diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java index 0422b27a7..77d0ce286 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java @@ -14,6 +14,7 @@ import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.*; import com.iformall.mapper.*; +import com.iformall.service.WxProfitPaymentReceiverService; import com.iformall.utils.Constant; import com.iformall.utils.RedisCacheUtils; import org.apache.commons.lang3.StringUtils; @@ -52,6 +53,10 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ @Lazy @Autowired WxProfitSharingReceiverService wxProfitSharingReceiverService; + + @Lazy + @Autowired + WxProfitPaymentReceiverService wxProfitPaymentReceiverService; @Autowired MaUtil maUtil; @@ -79,25 +84,27 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ @Override - public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { + public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { if(merchantId == null || merchantId.equals(0L)){ return null; } - //直连,必须是特约商户号 - if (EnumPayMchType.DIRECT.getCode() == mchType) { - return wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); -// 总分 - }else if (EnumPayMchType.TOTAL.getCode() == mchType) { - return wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); - } + return wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX); // if (null == receiver) { // throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); // } - return null; } + @Override + public WxProfitPaymentReceiver getPaymantReceiver(TenantEntity tenantEntity, Long merchantId) { + if(merchantId == null || merchantId.equals(0L)){ + return null; + } + WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitPaymentReceiverType.wx_special_merchant_number); + return record; + } + //无需分账,直接解冻 @Override public PayShareResult noReciverShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record) { diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index 2dec1945d..17bb72bd4 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -101,6 +101,7 @@ public class Constant { //获取mall信息 public static final String appinfoPrev = "appinfo:"; public static final String payaccountPrev = "payAccount:"; + public static final String paymentReceicerPrev = "paymentReceicer:"; public static final String sharingReceicerPrev = "sharingReceicer:"; public static final String mallinfoPrev = "mallinfo:"; public static final String subMallinfoPrev = "mallinfo:subMallinfo:"; diff --git a/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml b/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml new file mode 100644 index 000000000..c9dd5fc3f --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`,`merchant_id`, + `receiver_type`,`receiver_account`,`receiver_comments`, + `create_time`,`update_time`,`status`,`plat`, + `tt_import_status`,`tt_import_url`,`tt_balance_url` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `merchant_id` = #{merchantId} + + + + and `receiver_type` = #{receiverType} + + + + and `receiver_account` like concat('%', #{receiverAccount},'%') + + + + and `receiver_comments` like concat('%', #{receiverComments},'%') + + + + and `status` = #{status} + + + + and `plat` = #{plat} + + + + and `tt_import_status` -> '$.wx' = #{wxImportStatus} + + + and `tt_import_status` -> '$.alipay' = #{alipayImportStatus} + + + and `tt_import_status` -> '$.hz' = #{hzImportStatus} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxProfitSharingReceiverMapper.xml b/mallinkService/src/main/resources/mapper/WxProfitSharingReceiverMapper.xml index b66a2ab38..73c07f69a 100644 --- a/mallinkService/src/main/resources/mapper/WxProfitSharingReceiverMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxProfitSharingReceiverMapper.xml @@ -17,6 +17,7 @@ + @@ -24,7 +25,7 @@ - `id`,`tenant_id`,`parent_tenant_id`,`merchant_id`,`receiver_type`,`receiver_account`,`receiver_comments`,`create_time`,`update_time`,`sharing_type`,`bank_no`,`true_name`,`bank_code`,`status`,`parameter`,`is_use` + `id`,`tenant_id`,`parent_tenant_id`,`merchant_id`,`receiver_type`,`receiver_account`,`receiver_comments`,`create_time`,`update_time`,`sharing_type`,`bank_no`,`true_name`,`bank_code`,`status`,`parameter`,`plat`,`is_use` ,`tt_import_status`,`tt_import_url`,`tt_balance_url` @@ -98,6 +99,10 @@ + + and `plat` = #{plat} + + and `is_use` = #{isUse} From 43defa41ad24b5d6c81d5f429eeb7d8840b4de22 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 20:31:57 +0800 Subject: [PATCH 14/90] //sharing --- .../com/iformall/controller/WxMerchantController.java | 2 +- .../WxProfitSharingReceiverApplyController.java | 2 +- .../java/com/iformall/controller/WxCarController.java | 4 ++-- .../service/WxProfitPaymentReceiverService.java | 3 +-- .../impl/WxProfitPaymentReceiverServiceImpl.java | 10 ++++------ .../pay/service/share/douyin/TtPayShareService.java | 2 +- .../pay/service/share/wx/v2/WxPayShareService.java | 2 +- .../pay/service/share/wx/v3/WxPayShareV3Service.java | 2 +- 8 files changed, 12 insertions(+), 15 deletions(-) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java index dde903619..dee795c3e 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -76,7 +76,7 @@ public class WxMerchantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); } wxMerchant.updateTenantInfo(getTenantInfo()); - return new ResultData(wxProfitPaymentReceiverService.findReceiver(getTenantInfo(),wxMerchant.getId(), EnumAppPlat.TOUTIAO,EnumProfitPaymentReceiverType.tt_merchant_number)); + return new ResultData(wxProfitPaymentReceiverService.findReceiver(getTenantInfo(),wxMerchant.getId(), EnumAppPlat.TOUTIAO)); } @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java index 114137576..19cc74c8a 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxProfitSharingReceiverApplyController.java @@ -87,7 +87,7 @@ public class WxProfitSharingReceiverApplyController extends BaseController { if(merchant == null || EnumMerchantStatus.NOT_VALID.getCode().equals(merchant.getStatus())){ return new ResultData(ErrorCode.MERCHANT_INFO_NOT_VALID.getCode(),"商户不存在或已停用"); } - WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(merchant, merchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(merchant, merchant.getId(), EnumAppPlat.WX); if(receiver != null && MerchantImportStatus.improt_success.getCode().equals(receiver.getWxImportStatus())){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "该商户已进件成功"); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 4a03af478..312e9da60 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -468,14 +468,14 @@ public class WxCarController extends BaseController { return new ResultData(Result.ERROR,"未设置停车商户."); } - WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { //查询商官商户 WxMerchant adminMerchant = wxMerchantService.findAdmin(park); if (null == adminMerchant) { return new ResultData(Result.ERROR,"未找到商管商户."); } - receiver = wxProfitPaymentReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); + receiver = wxProfitPaymentReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { return new ResultData(Result.ERROR,"商管商户未设置收款账号."); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java index 04e5f0ab6..613a18505 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java @@ -49,10 +49,9 @@ public interface WxProfitPaymentReceiverService { * @param tenantEntity * @param merchantId * @param plat - * @param receiverType * @return */ - WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat, EnumProfitPaymentReceiverType receiverType); + WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat); ResultData updateReceiver(WxProfitPaymentReceiver receiver); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java index 3ee548dcc..995d21989 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java @@ -104,19 +104,18 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv @Override - public WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitPaymentReceiverType receiverType) { + public WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat) { WxProfitPaymentReceiver record = null; String key = Constant.paymentReceicerPrev + tenantEntity.getTenantId() + ":" + plat.getCode() - + ":" + merchantId - + ":" + receiverType.getCode(); + + ":" + merchantId; record = RedisCacheUtils.getCacheObject(paymentReceicerRedisTemplate, key, WxProfitPaymentReceiver.class); if(record == null){ WxProfitPaymentReceiver receiver = new WxProfitPaymentReceiver(); receiver.updateTenantInfo(tenantEntity); receiver.setMerchantId(merchantId); receiver.setPlat(plat.getCode()); - receiver.setReceiverType(receiverType.getCode()); +// receiver.setReceiverType(receiverType.getCode()); receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); record = wxProfitPaymentReceiverMapper.findOne(receiver); if(record != null){ @@ -317,8 +316,7 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv if(receiver != null){ String key = Constant.paymentReceicerPrev + receiver.getTenantId() + ":" + receiver.getPlat() - + ":" + receiver.getMerchantId() - + ":" + receiver.getReceiverType(); + + ":" + receiver.getMerchantId(); RedisCacheUtils.removeCache(paymentReceicerRedisTemplate, key); } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java index b0a02eff1..9a53d34a1 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java @@ -346,7 +346,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ return null; } - WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.TOUTIAO,EnumProfitPaymentReceiverType.tt_merchant_number); + WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.TOUTIAO); if(record != null && !MerchantImportStatus.improt_success.getCode().equals(record.getWxImportStatus()) && !MerchantImportStatus.improt_success.getCode().equals(record.getAlipayImportStatus()) && !MerchantImportStatus.improt_success.getCode().equals(record.getHzImportStatus())){ diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java index 5954bc8b3..4c5954c24 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java @@ -377,7 +377,7 @@ public class WxPayShareService extends PayShareBaseAdapterService{ if(merchantId == null || merchantId.equals(0L)){ return null; } - WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitPaymentReceiverType.wx_special_merchant_number); + WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX); return record; } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java index 77d0ce286..b5dc44b1d 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java @@ -101,7 +101,7 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ if(merchantId == null || merchantId.equals(0L)){ return null; } - WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitPaymentReceiverType.wx_special_merchant_number); + WxProfitPaymentReceiver record = wxProfitPaymentReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX); return record; } From c55bfb6bb0f56583f92d0318fb57e7a9b128a244 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 20:33:22 +0800 Subject: [PATCH 15/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 1 + .../com/iformall/service/park/pay/WxParkPayServiceImpl.java | 2 ++ .../pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 4a03af478..8e3f09d97 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -468,6 +468,7 @@ public class WxCarController extends BaseController { return new ResultData(Result.ERROR,"未设置停车商户."); } + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX, EnumProfitPaymentReceiverType.wx_special_merchant_number); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { //查询商官商户 diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index b7eb63ff0..fe9970ffa 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -15,6 +15,7 @@ import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxRefundOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumPayVersion; import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumYesOrNo; import com.iformall.exception.MallinkException; @@ -27,6 +28,7 @@ import com.iformall.service.WxParkService; import com.iformall.service.park.ParkFactory; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; import com.iformall.utils.CipherUtil; diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java index 0cb39b026..63cd4cf0c 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java @@ -204,7 +204,7 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl } /* * 普通支付/小程序支付 - * https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_3.shtml + * https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter4_5_1.shtml */ if (childOrders.size() == 1) { V3PayCommonMiniAppReq payReq = generatePayCommonRequest(payAccount,composeOrder,productName,record,openId,appInfo,currentDate); From d7e7e0f3dadf5d53db37112519aca5d134a52c52 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 20:38:02 +0800 Subject: [PATCH 16/90] fix car pay --- .../com/iformall/controller/basic/WxMerchantController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index ac2a3a4fd..88930a79b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -277,9 +277,13 @@ public class WxMerchantController extends BaseController { return wxMerchantService.updateMerchantLevel(wxMerchant); } - @ApiOperation("商户手填收款账号") + @ApiOperation("(微信)商户手填收款账号") @PostMapping("setMerchantAccount") public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { + if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || StringUtils.isBlank(wxMerchant.getApiKey())) { + return new ResultData(ResultData.ERROR,"参数缺失"); + } + return null; } From a0aa1a436ba4ad52983a78f114dff72560faed1c Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 20:56:59 +0800 Subject: [PATCH 17/90] fix car pay --- .../basic/WxMerchantController.java | 4 +-- .../iformall/service/WxMerchantService.java | 2 ++ .../service/impl/WxMerchantServiceImpl.java | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 88930a79b..35f0095fa 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -283,8 +283,8 @@ public class WxMerchantController extends BaseController { if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || StringUtils.isBlank(wxMerchant.getApiKey())) { return new ResultData(ResultData.ERROR,"参数缺失"); } - - return null; + wxMerchant.updateTenantInfo(getTenantInfo()); + return wxMerchantService.setWxMerchantAccount(wxMerchant); } @ApiOperation("查询当前租户下商户名称列表") diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index 13227d1b2..ac9075622 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -153,6 +153,8 @@ public interface WxMerchantService { ResultData updateMerchantTax(WxMerchant wxMerchant); ResultData updateMerchantLevel(WxMerchant wxMerchant); + + ResultData setWxMerchantAccount(WxMerchant wxMerchant); WxMerchantVo findMerchantById(TenantEntity tenantEntity,Long id); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 827adc5be..bcfd32784 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -85,6 +85,10 @@ public class WxMerchantServiceImpl implements WxMerchantService { @Lazy @Autowired WxProfitSharingReceiverService wxProfitSharingReceiverService; + + @Lazy + @Autowired + WxProfitPaymentReceiverService wxProfitPaymentReceiverService; @Autowired WxBillDepositMapper wxBillDepositMapper; @@ -928,6 +932,28 @@ public class WxMerchantServiceImpl implements WxMerchantService { } return new ResultData(Result.SUCCESS, "操作成功"); } + + @Override + public ResultData setWxMerchantAccount(WxMerchant wxMerchant) { + try { + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(wxMerchant, wxMerchant.getId(),EnumAppPlat.WX); + if (null == receiver ) { + receiver = new WxProfitPaymentReceiver(); + receiver.setMerchantId(wxMerchant.getId()); + receiver.setReceiverType(); + receiver.setReceiverComments("手动设置收款账号"); + receiver.setStatus(); + receiver.setPlat(EnumAppPlat.WX.getCode()); + } + receiver.setReceiverAccount(wxMerchant.getAccount()); + receiver.setApiKey(wxMerchant.getApiKey()); + wxProfitPaymentReceiverService.saveOrUpdate(receiver); + } catch (Exception e) { + logger.error("db failed: 账号操作失败, e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "操作成功"); + } @Override public WxMerchantVo findMerchantById(TenantEntity tenantEntity,Long id) { From abf91c2e84e6c944612399223dc34c2433f68112 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 21:02:24 +0800 Subject: [PATCH 18/90] //sharing --- .../java/com/iformall/service/impl/WxMerchantServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index bcfd32784..3c86b663d 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -940,9 +940,9 @@ public class WxMerchantServiceImpl implements WxMerchantService { if (null == receiver ) { receiver = new WxProfitPaymentReceiver(); receiver.setMerchantId(wxMerchant.getId()); - receiver.setReceiverType(); + receiver.setReceiverType(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode()); receiver.setReceiverComments("手动设置收款账号"); - receiver.setStatus(); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); receiver.setPlat(EnumAppPlat.WX.getCode()); } receiver.setReceiverAccount(wxMerchant.getAccount()); From 7d74354257a04a6207aa7d765d57411730180a98 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 21:11:18 +0800 Subject: [PATCH 19/90] //sharing --- .../basic/WxMerchantController.java | 39 ------------------- .../V2023021300001__add_分账类型.sql | 30 ++++++++++++++ 2 files changed, 30 insertions(+), 39 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 35f0095fa..93d4273b0 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -454,43 +454,4 @@ public class WxMerchantController extends BaseController { return wxProfitPaymentReceiverService.updateTtReceiverImportStatus(merchant); } - @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") - @PostMapping("/updateAccount") - public ResultData updateAccount(@RequestBody WxMerchant wxMerchant) { - logger.debug("[" + getIpAddr() + "] WxMerchantController::updateAccount"); - - if (wxMerchant.getId() == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); - } - WxMerchant merchant = wxMerchantService.selectById(wxMerchant.getId()); - if (merchant == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "未找到门店"); - } - wxMerchant.setName(merchant.getName()); - if (wxMerchant.getAccountTypeValue() == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号类型不能为空"); - } - if (StringUtils.isEmpty(wxMerchant.getAccountId())) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号ID不能为空"); - } - if (StringUtils.isEmpty(wxMerchant.getAccountName())) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空"); - } - wxMerchant.updateTenantInfo(getTenantInfo()); - return wxMerchantService.updateMerchantAccount(wxMerchant); - } - - @ApiOperation("删除分账账户") - @GetMapping("/deleteByReceiverId") - @ApiImplicitParam(name = "id", value = "商户分账账户ID", dataType = "Long", paramType = "query", required = true) - public ResultData deleteByReceiverId(@ModelAttribute WxProfitSharingReceiver receiver) { - logger.debug("[" + getIpAddr() + "] WxMerchantController::deleteByReceiverId"); - - if (receiver.getId() == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户分账账户ID不能为空"); - } - receiver.updateTenantInfo(getTenantInfo()); - return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode()); - } - } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql index bb22402ac..ec7acf57c 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql @@ -1,6 +1,36 @@ --创建收款帐号表 +DROP TABLE IF EXISTS `wx_profit_payment_receiver`; +CREATE TABLE `wx_profit_payment_receiver` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', + `merchant_id` bigint(20) NOT NULL COMMENT '商户ID', + `receiver_type` int(11) NOT NULL COMMENT '收款帐号类型', + `receiver_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '收款帐号', + `receiver_comments` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '说明', + `create_time` datetime(0) DEFAULT NULL, + `update_time` datetime(0) DEFAULT NULL, + `status` int(11) DEFAULT 0 COMMENT '状态: 0,正常 1,停用', + `plat` smallint(3) NOT NULL DEFAULT 1 COMMENT '平台 1:微信 2:阿里 3:头条', + `tt_import_status` json COMMENT '进件状态', + `tt_import_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '进件页面', + `tt_balance_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '余额页面', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `id_UNIQUE`(`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '分账接收方' ROW_FORMAT = Dynamic; --备份分账帐号表 --将微信进件的数据转移到收款帐号表里--并将原数据删除 +INSERT INTO `mallink`.`wx_profit_payment_receiver`(`id`, `tenant_id`, `parent_tenant_id`, `merchant_id`, `receiver_type`, `receiver_account`, `create_time`, `update_time`, `status`, `plat`, `tt_import_status`, `tt_import_url`, `tt_balance_url`) +(select `id`, `tenant_id`, `parent_tenant_id`, `merchant_id`, `receiver_type`, `receiver_account`, `create_time`, `update_time`, `status`, `plat`, `tt_import_status`, `tt_import_url`, `tt_balance_url` from wx_profit_sharing_receiver +where plat = 1 and sharing_type = 4); +delete from wx_profit_sharing_receiver where plat = 1 and sharing_type = 4; --将抖音进件的数据转移到收款帐号表里--原数据修改ReceiverType =10 +INSERT INTO `mallink`.`wx_profit_payment_receiver`(`id`, `tenant_id`, `parent_tenant_id`, `merchant_id`, `receiver_type`, `receiver_account`, `create_time`, `update_time`, `status`, `plat`, `tt_import_status`, `tt_import_url`, `tt_balance_url`) +(select `id`, `tenant_id`, `parent_tenant_id`, `merchant_id`, `receiver_type`, `receiver_account`, `create_time`, `update_time`, `status`, `plat`, `tt_import_status`, `tt_import_url`, `tt_balance_url` from wx_profit_sharing_receiver +where plat = 3 and sharing_type = 3); + +update wx_profit_sharing_receiver set receiver_type = 10 where plat = 3 and sharing_type = 3; + +update wx_profit_sharing_receiver set sharing_type = 1 where sharing_type != 2; From f81374933d9498e8eb09f001af5e256070322bb7 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 21:16:23 +0800 Subject: [PATCH 20/90] fix car pay --- .../resources/db/migration/V20230200001__car.sql | 3 +++ .../com/iformall/controller/WxCarController.java | 3 ++- .../domain/po/WxProfitPaymentReceiver.java | 14 ++++++++++++++ .../service/impl/WxMerchantServiceImpl.java | 2 +- .../src/main/java/com/iformall/utils/Constant.java | 2 ++ .../mapper/WxProfitPaymentReceiverMapper.xml | 3 ++- 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 6a15b75e2..f1636743c 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -128,3 +128,6 @@ ADD COLUMN `support_pay` int(1) COMMENT '会员小程序是否支持支付enumY ALTER TABLE `mallink`.`wx_park` ADD COLUMN `paid_call_back` varchar(100) COMMENT '支付完成回调地址'; + +alter table wx_profit_payment_receiver +add column `receiver_params` json COMMENT '其他配置参数'; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 312e9da60..23c94c7db 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -19,6 +19,7 @@ import com.iformall.service.park.impl.util.ParkHelper; import com.iformall.service.park.pay.WxParkPayService; import com.iformall.service.park.utils.ParkCacheUtils; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; +import com.iformall.utils.Constant; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -501,7 +502,7 @@ public class WxCarController extends BaseController { } //创建微信支付订单 PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), - "127.0.0.1", park.getPaidCallBack(), payAccount.getApiKey(), new Date()); + "127.0.0.1", park.getPaidCallBack(), (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey), new Date()); return new ResultData(wxResult); } catch (Exception e) { logger.error("park createPayOrder error",e); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java index d274ec12b..b8559e6cf 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java @@ -1,6 +1,7 @@ package com.iformall.domain.po; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; @@ -30,6 +31,8 @@ public class WxProfitPaymentReceiver extends TenantEntity { private Date createTime; @io.swagger.annotations.ApiModelProperty(value="",name="updateTime") private Date updateTime; + @io.swagger.annotations.ApiModelProperty(value="其他配置参数",name="receiverParams") + private String receiverParams; @io.swagger.annotations.ApiModelProperty(value="分账接收方状态 0,正常 1,停用",name="status") private Integer status; @@ -46,6 +49,17 @@ public class WxProfitPaymentReceiver extends TenantEntity { @TableField(exist = false) private Integer hzImportStatus; + public Object getReceiverParamValue(String key) { + if (StringUtils.isBlank(receiverParams)) { + return null; + } + JSONObject o = JSON.parseObject(receiverParams); + if (null == o ) { + return null; + } + return o.get(key); + } + private QueryMerchantResult getMerchantResult(){ QueryMerchantResult queryMerchantResult = null; try{ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 3c86b663d..753174f95 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -946,7 +946,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setPlat(EnumAppPlat.WX.getCode()); } receiver.setReceiverAccount(wxMerchant.getAccount()); - receiver.setApiKey(wxMerchant.getApiKey()); + receiver.setReceiverParams(new StringBuffer("{").append(Constant.paymentReceicerParamApiKey).append(":").append(wxMerchant.getApiKey()).append("}").toString()); wxProfitPaymentReceiverService.saveOrUpdate(receiver); } catch (Exception e) { logger.error("db failed: 账号操作失败, e:" + e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index 17bb72bd4..0d24ee98b 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -115,5 +115,7 @@ public class Constant { //wiwide系统常量 public static final Integer wiwideOldPlat = 0;//老平台 public static final Integer wiwideNewPlat = 1;//新平台 + + public static final String paymentReceicerParamApiKey = "apiKey"; } diff --git a/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml b/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml index c9dd5fc3f..23c9df3a9 100644 --- a/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxProfitPaymentReceiverMapper.xml @@ -9,6 +9,7 @@ + @@ -21,7 +22,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`merchant_id`, - `receiver_type`,`receiver_account`,`receiver_comments`, + `receiver_type`,`receiver_account`,`receiver_comments`,`receiver_params`, `create_time`,`update_time`,`status`,`plat`, `tt_import_status`,`tt_import_url`,`tt_balance_url` From 1f82b1c75ba063097645226f104c9cbcf153a624 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 21:19:09 +0800 Subject: [PATCH 21/90] //sharing --- .../domain/po/WxProfitPaymentReceiver.java | 16 ---------------- .../domain/po/WxProfitSharingReceiver.java | 14 -------------- 2 files changed, 30 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java index d274ec12b..354933944 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitPaymentReceiver.java @@ -75,20 +75,4 @@ public class WxProfitPaymentReceiver extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "余额页面", name = "ttBalanceUrl") private String ttBalanceUrl; - - - - - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="分账金额(分)",name="sharingAmount") - private Integer sharingAmount; - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="真实费率",name="rateAmount") - private Integer rateAmount; - @TableField(exist = false) - private Integer realRateAmount;//平台手续费 - @TableField(exist = false) - private Integer commissionAmount;//平台佣金 - - } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java index 52b96241c..60b57d889 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java @@ -45,20 +45,6 @@ public class WxProfitSharingReceiver extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="平台 EnumAppPlat",name="plat") private Integer plat; - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="分账金额(分)",name="sharingAmount") - private Integer sharingAmount; - - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="真实费率",name="rateAmount") - private Integer rateAmount; - @TableField(exist = false) - private Integer realRateAmount;//平台手续费 - @TableField(exist = false) - private Integer commissionAmount;//平台佣金 - - - @io.swagger.annotations.ApiModelProperty(value = "0,不使用 1,使用", name = "isUse") private Integer isUse; From efe944ae73378f32883e6165078c028529ee3d0f Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 13 Feb 2023 21:24:43 +0800 Subject: [PATCH 22/90] fix car pay --- .../java/com/iformall/service/impl/WxMerchantServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 753174f95..80cfb3b90 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -946,7 +946,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setPlat(EnumAppPlat.WX.getCode()); } receiver.setReceiverAccount(wxMerchant.getAccount()); - receiver.setReceiverParams(new StringBuffer("{").append(Constant.paymentReceicerParamApiKey).append(":").append(wxMerchant.getApiKey()).append("}").toString()); + receiver.setReceiverParams(new StringBuffer("{\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}").toString()); wxProfitPaymentReceiverService.saveOrUpdate(receiver); } catch (Exception e) { logger.error("db failed: 账号操作失败, e:" + e.getMessage()); From 46b2c9cd7de3c4560004d94241249ce9f3f20a86 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 13 Feb 2023 21:46:09 +0800 Subject: [PATCH 23/90] //sharing --- .../WxProfitPaymentReceiverServiceImpl.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java index 995d21989..9016c74a9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java @@ -21,6 +21,7 @@ import com.iformall.douyin.pay.preOrder.AppAddSubMerchantResult; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxProfitPaymentReceiverMapper; +import com.iformall.mapper.WxProfitSharingReceiverMapper; import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; import com.iformall.service.pay.PayServiceFactory; @@ -66,6 +67,9 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv @Autowired PayServiceFactory payServiceFactory; + @Autowired + WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; + @Autowired @Qualifier("objectCommonRedisTemplate") RedisTemplate paymentReceicerRedisTemplate; @@ -95,6 +99,34 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv wxProfitPaymentReceiverMapper.updateById(record); this.deleteRedis(record.getId()); } + //抖音的进件商户同步到 分账账户表 + //微信因为需要同步微信所以分开处理 + if(EnumAppPlat.TOUTIAO.getCode().equals(record.getPlat()) + && EnumProfitPaymentReceiverType.tt_merchant_number.getCode().equals(record.getReceiverType())){ + WxProfitSharingReceiver sharingReceiver = wxProfitSharingReceiverMapper.selectById(record); + boolean isCreate = false; + if(sharingReceiver == null){ + sharingReceiver = new WxProfitSharingReceiver(); + isCreate = true; + } + sharingReceiver.setId(record.getId()); + sharingReceiver.updateTenantInfo(record); + sharingReceiver.setReceiverType(record.getReceiverType()); + sharingReceiver.setReceiverAccount(record.getReceiverAccount()); + sharingReceiver.setReceiverComments(record.getReceiverComments()); + sharingReceiver.setCreateTime(record.getCreateTime()); + sharingReceiver.setUpdateTime(record.getUpdateTime()); + sharingReceiver.setStatus(record.getStatus()); + sharingReceiver.setPlat(record.getPlat()); + sharingReceiver.setTtImportStatus(record.getTtImportStatus()); + sharingReceiver.setTtImportUrl(record.getTtImportUrl()); + sharingReceiver.setTtBalanceUrl(record.getTtBalanceUrl()); + if(isCreate){ + wxProfitSharingReceiverMapper.insert(sharingReceiver); + }else{ + wxProfitSharingReceiverMapper.updateById(sharingReceiver); + } + } } // @Override From 5e134ba6d0a4ed3c379fa33d48c13c2974f58ff9 Mon Sep 17 00:00:00 2001 From: xhxu Date: Tue, 14 Feb 2023 11:35:10 +0800 Subject: [PATCH 24/90] //sharing --- .../vo/WxProfitSharingOrderDetailsVo.java | 1 - .../enums/EnumProfitSharingReceiverType.java | 74 +++++++++---------- .../impl/WxProfitSharingOrderServiceImpl.java | 32 +++++--- .../cashout/CashOutAdapterService.java | 13 ---- .../service/share/PayShareAdapterService.java | 8 -- .../share/PayShareBaseAdapterService.java | 17 +---- 6 files changed, 60 insertions(+), 85 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxProfitSharingOrderDetailsVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxProfitSharingOrderDetailsVo.java index c768e397a..ee5689246 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxProfitSharingOrderDetailsVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxProfitSharingOrderDetailsVo.java @@ -3,7 +3,6 @@ package com.iformall.domain.vo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.iformall.domain.po.base.TenantEntity; -import com.iformall.enums.EnumProfitSharingReceiverType; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang3.StringUtils; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingReceiverType.java b/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingReceiverType.java index 77c1e9fde..e69a5c0bd 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingReceiverType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingReceiverType.java @@ -1,37 +1,37 @@ -package com.iformall.enums; - -/** - * Created by Stormeye on 2018/08/09. - */ -public enum EnumProfitSharingReceiverType { - PROFIT_SHARING_RECEIVER_MERCHANT_ID(0, "MERCHANT_ID"),//v2,v3 - PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID(1, "PERSONAL_WECHATID"), - PROFIT_SHARING_RECEIVER_PERSONAL_OPENID(2, "PERSONAL_OPENID"),//v2,v3 - PROFIT_SHARING_RECEIVER_PERSONAL_SUB_OPENID(3, "PERSONAL_SUB_OPENID"), - ; - - public static EnumProfitSharingReceiverType getEnum(Integer code) { - for (EnumProfitSharingReceiverType value : values()) { - if (value.getCode().equals(code)) { - return value; - } - } - return null; - } - - private Integer code; - private String message; - - EnumProfitSharingReceiverType(Integer code, String message) { - this.code = code; - this.message = message; - } - - public Integer getCode() { - return code; - } - - public String getMessage() { - return message; - } -} +//package com.iformall.enums; +// +///** +// * Created by Stormeye on 2018/08/09. +// */ +//public enum EnumProfitSharingReceiverType { +// PROFIT_SHARING_RECEIVER_MERCHANT_ID(0, "MERCHANT_ID"),//v2,v3 +// PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID(1, "PERSONAL_WECHATID"), +// PROFIT_SHARING_RECEIVER_PERSONAL_OPENID(2, "PERSONAL_OPENID"),//v2,v3 +// PROFIT_SHARING_RECEIVER_PERSONAL_SUB_OPENID(3, "PERSONAL_SUB_OPENID"), +// ; +// +// public static EnumProfitSharingReceiverType getEnum(Integer code) { +// for (EnumProfitSharingReceiverType value : values()) { +// if (value.getCode().equals(code)) { +// return value; +// } +// } +// return null; +// } +// +// private Integer code; +// private String message; +// +// EnumProfitSharingReceiverType(Integer code, String message) { +// this.code = code; +// this.message = message; +// } +// +// public Integer getCode() { +// return code; +// } +// +// public String getMessage() { +// return message; +// } +//} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java index 519020417..f3ff83c5a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -249,7 +249,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ WxProfitSharingReceiver receiver = getByMerchantAdmin(sharingOrder,payShareAdapterService,wxComposeChildOrderShare.getMerchantId(),EnumMerchantAdmin.PRIVATE_SELL,payOrder.getTtPayWay(), payOrder.getMchType()); if(receiver != null){ JSONObject jo = new JSONObject(); - jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); + jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); jo.put("amount", sellerAmount); jo.put("merchantId",receiver.getMerchantId()); @@ -273,7 +273,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ WxProfitSharingReceiver receiver = getByMerchantAdmin(sharingOrder,payShareAdapterService,wxComposeChildOrderShare.getMerchantId(),EnumMerchantAdmin.PRIVATE_SYSTEM,payOrder.getTtPayWay(), payOrder.getMchType()); if(receiver != null){ JSONObject jo = new JSONObject(); - jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); + jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); jo.put("amount", systemAmount); jo.put("merchantId",receiver.getMerchantId()); @@ -299,7 +299,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ WxProfitSharingReceiver receiver = getByMerchantAdmin(sharingOrder,payShareAdapterService,wxComposeChildOrderShare.getMerchantId(),EnumMerchantAdmin.PUBLIC_ADMIN,payOrder.getTtPayWay(), payOrder.getMchType()); if(receiver != null){ JSONObject jo = new JSONObject(); - jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); + jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); jo.put("amount", mallAmount); jo.put("merchantId",receiver.getMerchantId()); @@ -336,7 +336,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType()) && EnumPayShare.YES.getCode().equals(payOrder.getShare())){ //总分 分账 抖音不支持 不支持开通 JSONObject jo = new JSONObject(); - jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); + jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); jo.put("amount", shareAmount); jo.put("merchantId",receiver.getMerchantId()); @@ -349,7 +349,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ && EnumTtPayChannel.ALI_PAY.getCode().equals(payOrder.getTtPayWay())){ //抖音 直连 多商户 支付宝支付 进件支付宝 分账 否则记账 JSONObject jo = new JSONObject(); - jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); + jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); jo.put("amount", shareAmount); jo.put("merchantId",receiver.getMerchantId()); @@ -427,7 +427,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType())){ //解冻给收款方(广场) JSONObject jo = new JSONObject(); - jo.put("type",EnumProfitPaymentReceiverType.wx_special_merchant_number.getMessage()); +// jo.put("type",EnumProfitPaymentReceiverType.wx_special_merchant_number.getMessage()); jo.put("account",payAccount.getSubMchId()); jo.put("amount", shareAmount); jo.put("merchantId",0); @@ -438,12 +438,20 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ WxProfitPaymentReceiver receiver = payShareAdapterService.getPaymantReceiver(sharingOrder,wxComposeChildOrderShare.getMerchantId()); //解冻给收款方(门店) JSONObject jo = new JSONObject(); - jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); - jo.put("account",receiver.getReceiverAccount()); - jo.put("amount", shareAmount); - jo.put("merchantId",receiver.getMerchantId()); - jo.put("bTenantId",receiver.getTenantId()); - jo.put("description",receiver.getId()); + if(receiver != null && receiver.getReceiverAccount().equals(wxComposeChildOrderShare.getMerchantUid())){ + jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); + jo.put("account",receiver.getReceiverAccount()); + jo.put("amount", shareAmount); + jo.put("merchantId",receiver.getMerchantId()); + jo.put("bTenantId",receiver.getTenantId()); + jo.put("description",receiver.getId()); + }else{ + jo.put("account",wxComposeChildOrderShare.getMerchantUid()); + jo.put("amount", shareAmount); + jo.put("merchantId",wxComposeChildOrderShare.getMerchantId()); + jo.put("bTenantId",payOrder.getTenantId()); + jo.put("description",0); + } receivers.add(jo); } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/cashout/CashOutAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/cashout/CashOutAdapterService.java index b0f2161b2..c20e8029c 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/cashout/CashOutAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/cashout/CashOutAdapterService.java @@ -1,22 +1,9 @@ package com.iformall.service.pay.service.cashout; -import java.util.Map; - -import com.alibaba.fastjson.JSONArray; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCashOut; import com.iformall.domain.po.WxPayAccount; -import com.iformall.domain.po.WxProfitSharingOrder; -import com.iformall.domain.po.WxProfitSharingReceiver; -import com.iformall.enums.EnumPayWay; -import com.iformall.enums.EnumProfitSharingOrderType; -import com.iformall.enums.EnumProfitSharingReceiverType; -import com.iformall.exception.MallinkException; -import com.iformall.service.pay.service.share.entity.ShareAccountResult; import com.iformall.service.pay.service.cashout.entity.CashOutAdapterResult; -import com.iformall.service.pay.service.share.entity.PayShareQueryResult; -import com.iformall.service.pay.service.share.entity.PayShareResult; -import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult; /** * 零钱接口 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java index 951156cb5..7cae2a9e8 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java @@ -90,14 +90,6 @@ public interface PayShareAdapterService { */ public PayShareQueryResult shareQuery(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record) throws MallinkException; - - /** - * 获取分账账号类型 - * @param accountType - * @return - */ - public EnumProfitSharingReceiverType getShareAccount(Integer accountType); - /** * 分账异步通知接收 * @param paramMap diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareBaseAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareBaseAdapterService.java index 66dd0cb8a..1dc736753 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareBaseAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareBaseAdapterService.java @@ -10,34 +10,23 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.iformall.common.ErrorCode; -import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxPayAccount; -import com.iformall.domain.po.WxProfitSharingOrder; import com.iformall.domain.po.WxProfitSharingReceiver; +import com.iformall.enums.EnumProfitPaymentReceiverType; import com.iformall.enums.EnumProfitSharingReceiverStatus; -import com.iformall.enums.EnumProfitSharingReceiverType; -import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxProfitSharingOrderMapper; -import com.iformall.mapper.WxProfitSharingReceiverMapper; import com.iformall.pay.WxPayment; import com.iformall.pay.WxProfitSharing; import com.iformall.pay.WxProfitSharingReceiverP; import com.iformall.service.WxProfitSharingReceiverService; import com.iformall.service.pay.service.share.entity.PayShareQueryResultReceivers; import com.iformall.service.pay.service.share.entity.ShareAccountResult; -import com.iformall.service.pay.service.share.wx.v2.WxPayShareService; import com.iformall.utils.BeanUtils; import com.iformall.utils.Utility; import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class PayShareBaseAdapterService implements PayShareAdapterService{ - - @Override - public EnumProfitSharingReceiverType getShareAccount(Integer accountType) { - return EnumProfitSharingReceiverType.getEnum(accountType); - } protected List getReceivers(String response) { if (StringUtils.isBlank(response)) { @@ -154,7 +143,7 @@ public abstract class PayShareBaseAdapterService implements PayShareAdapterServi JSONObject receiverJSON = new JSONObject(); - receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage()); + receiverJSON.put("type", EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); receiverJSON.put("account", receiver.getReceiverAccount()); receiverJSON.put("name", receiver.getTrueName()); @@ -205,7 +194,7 @@ public abstract class PayShareBaseAdapterService implements PayShareAdapterServi wxProfitSharingReceiverP.setSign_type("HMAC-SHA256"); JSONObject receiverJSON = new JSONObject(); - receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage()); + receiverJSON.put("type", EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage()); receiverJSON.put("account", receiver.getReceiverAccount()); wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString()); From 255fa9f755d55116559f04aa806d5d0cda005f96 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 14:19:03 +0800 Subject: [PATCH 25/90] fix car pay --- .../basic/WxMerchantController.java | 2 +- .../iformall/controller/WxCarController.java | 18 +- .../com/iformall/domain/po/WxMerchant.java | 4 +- .../service/impl/WxMerchantServiceImpl.java | 8 +- .../service/park/pay/WxParkPayService.java | 3 +- .../park/pay/WxParkPayServiceImpl.java | 28 ++- .../appPay/WxMiniAppPayAdapterService.java | 169 ++++++++---------- .../java/com/iformall/utils/Constant.java | 1 + 8 files changed, 121 insertions(+), 112 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 93d4273b0..965b3a6bc 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -280,7 +280,7 @@ public class WxMerchantController extends BaseController { @ApiOperation("(微信)商户手填收款账号") @PostMapping("setMerchantAccount") public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { - if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || StringUtils.isBlank(wxMerchant.getApiKey())) { + if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || null == wxMerchant.getIsIsv()) { return new ResultData(ResultData.ERROR,"参数缺失"); } wxMerchant.updateTenantInfo(getTenantInfo()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 23c94c7db..cda51b92b 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -492,17 +492,15 @@ public class WxCarController extends BaseController { .append(",\"mid\":").append(parkMerchant.getId()) .append(",\"mn\":").append(parkMerchant.getName()) .append("}"); - WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); - if(cAppInfo == null){ - new ResultData(Result.ERROR,ErrorCode.APP_ID_NOT_FOUND.name()); - } - WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); - if(payAccount == null){ - new ResultData(Result.ERROR,ErrorCode.API_KEY_NOT_FOUND.name()); - } //创建微信支付订单 - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), - "127.0.0.1", park.getPaidCallBack(), (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey), new Date()); + boolean isIsv = false; + Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); + if (EnumYesOrNo.YES.getCode() == isvModel) { + isIsv = true; + } + String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), + "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); } catch (Exception e) { logger.error("park createPayOrder error",e); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 796ee3210..d01e154c7 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -398,7 +398,9 @@ public class WxMerchant extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="首款账号",name="account") @TableField(exist = false) private String account; - + @io.swagger.annotations.ApiModelProperty(value="首款账号",name="account") + @TableField(exist = false) + private Integer isIsv; @io.swagger.annotations.ApiModelProperty(value="收款账号",name="apiKey") @TableField(exist = false) private String apiKey; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 80cfb3b90..21fa23be4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -945,8 +945,14 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); receiver.setPlat(EnumAppPlat.WX.getCode()); } + StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); + if (EnumYesOrNo.YES.getCode() == wxMerchant.getIsIsv()) { + psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); + }else { + psb.append("}"); + } receiver.setReceiverAccount(wxMerchant.getAccount()); - receiver.setReceiverParams(new StringBuffer("{\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}").toString()); + receiver.setReceiverParams(psb.toString()); wxProfitPaymentReceiverService.saveOrUpdate(receiver); } catch (Exception e) { logger.error("db failed: 账号操作失败, e:" + e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 51176c688..8e8697c07 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -14,7 +14,8 @@ public interface WxParkPayService { public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize); - public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + //share:是否分账,服务商模式下生效 + public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; public String handlePaidCallBack(Map paramMap); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index fe9970ffa..f4dbc8b3d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -6,6 +6,8 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; +import com.iformall.common.Result; +import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxCoupon; @@ -24,7 +26,9 @@ import com.iformall.mapper.WxCarPayOrderMapper; import com.iformall.mapper.WxPayAccountMapper; import com.iformall.pay.WxPayment; import com.iformall.service.ExcelService; +import com.iformall.service.WxAppinfoService; import com.iformall.service.WxParkService; +import com.iformall.service.WxPayAccountService; import com.iformall.service.park.ParkFactory; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; @@ -80,15 +84,35 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Autowired WxParkService wxParkService; + @Lazy + @Autowired + WxAppinfoService wxAppinfoService; + + @Lazy + @Autowired + WxPayAccountService wxPayAccountService; + @Override public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record)); } @Override - public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { - return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + if (!isIsvModel) { + return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + }else { + WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); + if(cAppInfo == null){ + throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); + } + WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); + if(payAccount == null){ + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(),"未查询到payAccount."); + } + return wxMiniAppPayAdapterService.payIsv(payAccount, cAppInfo, mchId, openId, productName, attach, payOrderNo, fee, ip, notifyUrl, currentDate, share); + } } private String notifyErrorResult(String msg) { diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index a2c8331cc..e91d9096f 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -59,7 +59,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem "\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," + "\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}"); - private WxPayOrderP generateWxPayOrderP(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate)throws Exception { + private WxPayOrderP generateWxPayOrderP(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate,String productId)throws Exception { // 统一下单 普通商户模式 String noncestr = Utility.generate32UUID(); WxPayOrderP wxPayOrderP = new WxPayOrderP(); @@ -75,6 +75,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem wxPayOrderP.setGoods_tag(productName); wxPayOrderP.setNotify_url(notifyUrl); wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 + wxPayOrderP.setProduct_id(productId); wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); @@ -86,85 +87,32 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception { // 统一下单 普通商户模式 - String noncestr = Utility.generate32UUID(); - WxPayOrderP wxPayOrderP = new WxPayOrderP(); - wxPayOrderP.setOpenid(openId); - wxPayOrderP.setAppid(appId); - wxPayOrderP.setMch_id(payAccount.getMchId()); - wxPayOrderP.setNonce_str(noncestr); - wxPayOrderP.setBody(productName); - wxPayOrderP.setAttach(getAttach(record)); - wxPayOrderP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderP.setTotal_fee(composeOrder.getPayment()); - wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP - wxPayOrderP.setGoods_tag(productName); - wxPayOrderP.setNotify_url(payAccount.getPayNotifyUrl()); - wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // 订单ID - wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); - Date futureDate = new Date(); - futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); - wxPayOrderP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 - Map payOrderMap = BeanUtils.toStringMap(wxPayOrderP); - wxPayOrderP.setSign(WxPayment.createSign(payOrderMap, payAccount.getApiKey())); - return wxPayOrderP; + return generateWxPayOrderP(openId,appId,payAccount.getMchId(),productName,getAttach(record),record.getPayOrderNo(),composeOrder.getPayment(),record.getIp(),payAccount.getPayNotifyUrl(),payAccount.getApiKey(),currentDate,String.valueOf(composeOrder.getMainOrderId())); } private PayAdapterResult getOrderPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,String noncestr) { - PayAdapterResult par = new PayAdapterResult(); - returnMap.put("payOrderId", String.valueOf(record.getId())); - String result_code = returnMap.get("result_code"); - if ("SUCCESS".equals(result_code)) { - par.setSuccess(true); - par.setMsg("success."); - par.setData(returnMap); - String prepay_id = returnMap.get("prepay_id"); - // update payOrder with prepay_id - record.setPrepayId(prepay_id); - record.setUpdateTime(new Date()); - record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); - - String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); - Map sighMap = MapUtil.getOrderMap(); - sighMap.put("appId", returnMap.get("appid")); - sighMap.put("timeStamp", timestamp); - sighMap.put("nonceStr", noncestr); - sighMap.put("package", "prepay_id=" + prepay_id); - sighMap.put("signType", "MD5"); - String signAgent = WxPayment.createSign(sighMap, payAccount.getApiKey()); - returnMap.put("timeStamp", timestamp); - returnMap.put("nonceStr", noncestr); - returnMap.put("package", "prepay_id=" + prepay_id); - returnMap.put("paySign", signAgent); - log.info("back to UI: " + returnMap.toString()); - } else { - String errMsg = ""; - JSONObject errObj = errorMap.getJSONObject(result_code); - if (errObj != null) { - errMsg = errObj.toJSONString(); - record.setFailReason(errMsg); - } else { - errMsg = returnMap.get("return_msg"); - record.setFailReason(errMsg); - } - record.setUpdateTime(new Date()); - - par.setSuccess(false); - par.setMsg(errMsg); - par.setData(returnMap); - } - - return par; + return getOrderPResult(returnMap,noncestr,payAccount.getApiKey(),record); } - private PayAdapterResult getOrderPResult(Map returnMap,String noncestr,String apiKey) { + private PayAdapterResult getOrderPResult(Map returnMap,String noncestr,String apiKey,WxPayOrder record) { PayAdapterResult par = new PayAdapterResult(); + if (null != record ) { + returnMap.put("payOrderId", String.valueOf(record.getId())); + } String result_code = returnMap.get("result_code"); if ("SUCCESS".equals(result_code)) { par.setSuccess(true); par.setMsg("success."); par.setData(returnMap); String prepay_id = returnMap.get("prepay_id"); + + if (null != record) { + // update payOrder with prepay_id + record.setPrepayId(prepay_id); + record.setUpdateTime(new Date()); + record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + } + String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); Map sighMap = MapUtil.getOrderMap(); sighMap.put("appId", returnMap.get("appid")); @@ -185,6 +133,10 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem errMsg = errObj.toJSONString(); } else { errMsg = returnMap.get("return_msg"); + } + if (null != record) { + record.setFailReason(errMsg); + record.setUpdateTime(new Date()); } par.setSuccess(false); par.setMsg(errMsg); @@ -193,44 +145,52 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem return par; } + ///////ISV模式 - - private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { + private WxPayOrderSP generateWxPayOrderSP(String openId,String parentAppId,String mchId,String appId,String subMchId,String productName, + String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String productId,Date currentDate,boolean share,String apiKey) throws Exception{ String noncestr = Utility.generate32UUID(); WxPayOrderSP wxPayOrderSP = new WxPayOrderSP(); wxPayOrderSP.setSub_openid(openId); - wxPayOrderSP.setAppid(appInfo.getParentAppId()); - wxPayOrderSP.setMch_id(payAccount.getMchId()); + wxPayOrderSP.setAppid(parentAppId); + wxPayOrderSP.setMch_id(mchId); wxPayOrderSP.setSub_appid(appId); - wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); + wxPayOrderSP.setSub_mch_id(subMchId); wxPayOrderSP.setNonce_str(noncestr); wxPayOrderSP.setBody(productName); - wxPayOrderSP.setAttach(getAttach(record)); - wxPayOrderSP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderSP.setTotal_fee(composeOrder.getPayment().toString()); - wxPayOrderSP.setSpbill_create_ip(record.getIp()); // 终端IP + wxPayOrderSP.setAttach(attach); + wxPayOrderSP.setOut_trade_no(payOrderNo); + wxPayOrderSP.setTotal_fee(fee.toString()); + wxPayOrderSP.setSpbill_create_ip(ip); // 终端IP wxPayOrderSP.setGoods_tag(productName); // 券ID - wxPayOrderSP.setNotify_url(payAccount.getPayNotifyUrl()); + wxPayOrderSP.setNotify_url(notifyUrl); wxPayOrderSP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderSP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // + wxPayOrderSP.setProduct_id(productId); // wxPayOrderSP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); wxPayOrderSP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 wxPayOrderSP.setSign_type("HMAC-SHA256"); - wxPayOrderSP.setProfit_sharing("Y"); -// wxPayOrderSP.setProfit_sharing(null); -// if (isShare == EnumPayShare.YES) { -// wxPayOrderSP.setProfit_sharing("Y"); -// } + if (share) { + wxPayOrderSP.setProfit_sharing("Y"); + }else { + wxPayOrderSP.setProfit_sharing("N"); + } Map payOrderMap = BeanUtils.toStringMap(wxPayOrderSP); - wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, payAccount.getApiKey())); + wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, apiKey)); return wxPayOrderSP; } - private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) { + private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { + return generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appId,payAccount.getSubMchId(),productName,getAttach(record),record.getPayOrderNo(),composeOrder.getPayment(), + record.getIp(),payAccount.getPayNotifyUrl(),String.valueOf(composeOrder.getMainOrderId()),currentDate,true,payAccount.getApiKey()); + } + + private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,String appId,String noncestr,String apiKey) { PayAdapterResult par = new PayAdapterResult(); - returnMap.put("payOrderId", String.valueOf(record.getId())); + if (null != record) { + returnMap.put("payOrderId", String.valueOf(record.getId())); + } String result_code = returnMap.get("result_code"); if ("SUCCESS".equals(result_code)) { par.setSuccess(true); @@ -239,17 +199,19 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem String prepay_id = returnMap.get("prepay_id"); // update payOrder with prepay_id - record.setPrepayId(prepay_id); - record.setUpdateTime(new Date()); + if (null != record) { + record.setPrepayId(prepay_id); + record.setUpdateTime(new Date()); + } String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); Map sighMap = MapUtil.getOrderMap(); - sighMap.put("appId", appInfo.getAppId()); + sighMap.put("appId", appId); sighMap.put("timeStamp", timestamp); sighMap.put("nonceStr", noncestr); sighMap.put("package", "prepay_id=" + prepay_id); sighMap.put("signType", "HMAC-SHA256"); - String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey()); + String signAgent = WxPayment.createSignHMAC(sighMap, apiKey); returnMap.put("timeStamp", timestamp); returnMap.put("nonceStr", noncestr); returnMap.put("package", "prepay_id=" + prepay_id); @@ -261,12 +223,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem JSONObject errObj = errorMap.getJSONObject(result_code); if (errObj != null) { errMsg = errObj.toJSONString(); - record.setFailReason(errMsg); } else { errMsg = returnMap.get("return_msg"); - record.setFailReason(errMsg); + + } + if (null != record) { + record.setFailReason(errMsg); + record.setUpdateTime(new Date()); } - record.setUpdateTime(new Date()); par.setSuccess(false); par.setMsg(errMsg); par.setData(returnMap); @@ -274,6 +238,10 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem return par; } + private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) { + return getOrderSPResult(returnMap,record,appInfo.getAppId(),noncestr,payAccount.getApiKey()); + } + @Override public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record,WxComposeOrder composeOrder,List childOrders, @@ -310,11 +278,20 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem } public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { - WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null); + String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); + log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); + Map returnMap = WxPayment.xmlToMap(response); + return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey,null); + } + + public PayAdapterResult payIsv(WxPayAccount payAccount,WxAppinfo appInfo,String subMchId,String openId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,Date currentDate,boolean share) throws Exception { + String apiKey = payAccount.getApiKey(); + WxPayOrderSP wxPayOrderP = generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appInfo.getAppId(),subMchId,productName,attach,payOrderNo,fee,ip,notifyUrl,null,currentDate,share,apiKey); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); - return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey); + return getOrderSPResult(returnMap,null,appInfo.getAppId(),wxPayOrderP.getNonce_str(),apiKey); } @Override diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index 0d24ee98b..bec407ae7 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -117,5 +117,6 @@ public class Constant { public static final Integer wiwideNewPlat = 1;//新平台 public static final String paymentReceicerParamApiKey = "apiKey"; + public static final String paymentReceiverParamIsv = "isvModel"; } From 6361abcaf84eebb07393e397071487cbd3012870 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 14:38:31 +0800 Subject: [PATCH 26/90] fix car pay --- .../market/WxCarPayOrderController.java | 57 +++++++++++++++++++ .../com/iformall/domain/po/WxCarPayOrder.java | 5 ++ .../iformall/mapper/WxCarPayOrderMapper.java | 2 + .../service/park/pay/WxParkPayService.java | 2 + .../park/pay/WxParkPayServiceImpl.java | 5 ++ .../resources/mapper/WxCarPayOrderMapper.xml | 14 +++++ 6 files changed, 85 insertions(+) create mode 100644 mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java new file mode 100644 index 000000000..a2b33a105 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java @@ -0,0 +1,57 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.base.BaseEntity; +import com.iformall.domain.po.WxActivity; +import com.iformall.domain.po.WxCarPayOrder; +import com.iformall.enums.EnumActivityStatus; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxActivityService; +import com.iformall.service.park.pay.WxParkPayService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("wxCarPayOrder") +@Api(description = "停车支付订单") +public class WxCarPayOrderController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxParkPayService wxParkPayService; + + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData list(@ModelAttribute WxCarPayOrder wxCarPayOrder, Integer pageNum, Integer pageSize) { + if (null == wxCarPayOrder) wxCarPayOrder = new WxCarPayOrder(); + wxCarPayOrder.updateTenantInfo(getTenantInfo()); + wxCarPayOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC); + final PageInfo page = wxParkPayService.listPayOrderAsPage(wxCarPayOrder, pageNum, pageSize); + return new ResultData(page); + } + + @ApiOperation("总和") + @GetMapping("sum") + public ResultData sum(@ModelAttribute WxCarPayOrder wxCarPayOrder) { + if (null == wxCarPayOrder) wxCarPayOrder = new WxCarPayOrder(); + wxCarPayOrder.updateTenantInfo(getTenantInfo()); + Integer total = wxParkPayService.sumCarPayOrder(wxCarPayOrder); + return new ResultData(total); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 4d14876ce..e519c692e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -52,4 +52,9 @@ public class WxCarPayOrder extends TenantEntity { @TableField(exist = false) private Integer notifyCountLimit; + + @TableField(exist = false) + private Date begin; + @TableField(exist = false) + private Date end; } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java index dc7f51a6a..6e023097d 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCarPayOrderMapper.java @@ -15,4 +15,6 @@ public interface WxCarPayOrderMapper extends CommonMapper { WxCarPayOrder findOneByParkOderNo(@Param("parkOrderNo")String parkOrderNo,@Param("tenantId")String tenantId); + Integer sum(WxCarPayOrder wxCarPayOrder); + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 8e8697c07..51cdde919 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -24,5 +24,7 @@ public interface WxParkPayService { Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName) throws Exception; public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); + + public Integer sumCarPayOrder(WxCarPayOrder record); } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index f4dbc8b3d..80bdee198 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -248,4 +248,9 @@ public class WxParkPayServiceImpl implements WxParkPayService { return wxCarPayOrderMapper.selectById(id, tenantId); } + @Override + public Integer sumCarPayOrder(WxCarPayOrder record) { + return wxCarPayOrderMapper.sum(record); + } + } diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml index b95331070..43c17e640 100644 --- a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -95,6 +95,14 @@ and `car_vendor` <= #{carVendor} + + and `create_time` >= #{begin} + + + + and `create_time` <= #{end} + + and id in @@ -120,5 +128,11 @@ from wx_car_pay_order where tenant_id = #{tenantId} and `park_order_no` = #{parkOrderNo} + + From 62ea41a592eb5768103400b15215a4c1859566f6 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 15:04:45 +0800 Subject: [PATCH 27/90] fix car pay --- .../resources/db/migration/V20230200001__car.sql | 4 ++++ .../com/iformall/controller/WxCarController.java | 11 ++++++----- .../java/com/iformall/domain/po/WxCarPayOrder.java | 4 ++++ .../service/park/pay/WxParkPayService.java | 2 +- .../service/park/pay/WxParkPayServiceImpl.java | 7 ++++--- .../main/resources/mapper/WxCarPayOrderMapper.xml | 14 +++++++++++++- 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index f1636743c..f3ed15ddc 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -5,6 +5,7 @@ CREATE TABLE `wx_car_pay_order` ( `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `c_user_id` bigint(20) NOT NULL COMMENT '用户ID', + `c_user_phone` varchar(30) COMMENT '用户手机号', `car_number` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '车牌号', `pay_amount` int(11) NOT NULL COMMENT '支付金额(分)', `pay_time` datetime NOT NULL COMMENT '支付时间', @@ -123,6 +124,8 @@ CREATE TABLE wx_car_pay_order_97 LIKE wx_car_pay_order; CREATE TABLE wx_car_pay_order_98 LIKE wx_car_pay_order; CREATE TABLE wx_car_pay_order_99 LIKE wx_car_pay_order; +drop table wx_car_pay_order; + ALTER TABLE `mallink`.`wx_park` ADD COLUMN `support_pay` int(1) COMMENT '会员小程序是否支持支付enumYesOrNo'; @@ -131,3 +134,4 @@ ADD COLUMN `paid_call_back` varchar(100) COMMENT '支付完成回调地址'; alter table wx_profit_payment_receiver add column `receiver_params` json COMMENT '其他配置参数'; + diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index cda51b92b..741428bf3 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -483,14 +483,15 @@ public class WxCarController extends BaseController { } StringBuffer attachSb = new StringBuffer("{") - .append("\"t\":").append(park.getTenantId()).append(",\"pt\":").append(park.getParentTenantId()) - .append(",\"v\":").append(park.getVendorType()) + .append("\"t\":\"").append(park.getTenantId()).append("\",\"pt\":\"").append(park.getParentTenantId()).append("\"") + .append(",\"v\":").append(park.getVendorType()) .append(",\"u\":").append(user.getUserId()) - .append(",\"car:\":").append(carNumber) + .append(",\"uh\":\"").append(user.getPhone()).append("\"") + .append(",\"car:\":\"").append(carNumber).append("\"") .append(",\"fee\":").append(payOrder.getFee()) - .append(",\"ma\":").append(receiver.getReceiverAccount()) + .append(",\"ma\":\"").append(receiver.getReceiverAccount()).append("\"") .append(",\"mid\":").append(parkMerchant.getId()) - .append(",\"mn\":").append(parkMerchant.getName()) + .append(",\"mn\":\"").append(parkMerchant.getName()).append("\"") .append("}"); //创建微信支付订单 boolean isIsv = false; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index e519c692e..6b16f280a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -24,6 +24,10 @@ public class WxCarPayOrder extends TenantEntity { private Date updateTime; @io.swagger.annotations.ApiModelProperty(value="用户ID",name="cUserId") private Long cUserId; + @TableField(exist = false) + private List userIds; + @io.swagger.annotations.ApiModelProperty(value="用户手机号",name="cUserPhone") + private String cUserPhone; @io.swagger.annotations.ApiModelProperty(value="车牌号",name="carNumber") private String carNumber; @io.swagger.annotations.ApiModelProperty(value="支付金额(分)",name="payAmount") diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 51cdde919..9c613ccab 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -21,7 +21,7 @@ public interface WxParkPayService { public String handlePaidCallBack(Map paramMap); public void handlePaidSuccess(TenantEntity tenantEntity,WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String payOrderNo, - Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName) throws Exception; + Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName,String userPhone) throws Exception; public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index 80bdee198..f3a9e1834 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -167,10 +167,11 @@ public class WxParkPayServiceImpl implements WxParkPayService { String merchantAccount = attachObj.getString("ma"); Long merchantId = attachObj.getLong("mid"); String merchantName = attachObj.getString("mn"); + String userPhone = attachObj.getString("uh"); handlePaidSuccess(te,park,cUserId,carVendor,carNumber,payOrderNo,Integer.parseInt(cashFeeStr), DateUtils.string2Date(time_end, DateUtils.DATE_PATTERN_ALL_NOSPACE).getTime(),transcationId, - merchantAccount,merchantId,merchantName); + merchantAccount,merchantId,merchantName,userPhone); } catch (Exception e) { logger.error("handlePaidCallBackError.",e); return notifyErrorResult(e.getMessage()); @@ -190,7 +191,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Override public void handlePaidSuccess(TenantEntity tenantEntity,WxPark wxPark,Long cUserId,Integer carVendor,String carNumber, String payOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, - Long merchantId,String merchantName) throws Exception{ + Long merchantId,String merchantName,String userPhone) throws Exception{ //查询该笔订单是否已经存在 WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(payOrderNo, tenantEntity.getTenantId()); String parkOrderNo = ParkCreatePayOrder.getRealParkOrderNumber(payOrderNo,EnumCarVendor.getEnum(carVendor)); @@ -219,8 +220,8 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.setMerchantId(merchantId); payOrder.setMerchantName(merchantName); payOrder.setCarVendor(carVendor); + payOrder.setCUserPhone(userPhone); wxCarPayOrderMapper.insert(payOrder); - //通知车场支付成功 try { parkFactory.getParkService(carVendor).notifyPaid(wxPark,new ParkNotifyPaid(tenantEntity.getTenantId(),payOrderNo,parkOrderNo,fee,paidTime)); diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml index 43c17e640..2d0faf7f9 100644 --- a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -8,6 +8,7 @@ + @@ -23,7 +24,7 @@ - `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`car_number`,`pay_amount`, + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`c_user_phone`,`car_number`,`pay_amount`, `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`merchant_id`,`merchant_name`,`park_notify`, `notify_fail_reason`,`notify_count`,`car_vendor` @@ -83,6 +84,10 @@ and `merchant_name` like concat('%', #{merchantName},'%') + + and `c_user_phone` like concat('%', #{cUserPhone},'%') + + and `park_notify` = #{parkNotify} @@ -103,6 +108,13 @@ and `create_time` <= #{end} + + and c_user_id in + + #{uidItem} + + + and id in From 873831b0059449601b01b7032370bc8c58573ea3 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 15:20:57 +0800 Subject: [PATCH 28/90] fix car pay --- .../java/com/iformall/service/WxMerchantService.java | 3 ++- .../iformall/service/impl/WxMerchantServiceImpl.java | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index ac9075622..86cdd8872 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -5,6 +5,7 @@ import com.iformall.common.ResultData; import com.iformall.domain.dto.WxMerchantDto; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxMerchantCorp; +import com.iformall.domain.po.WxPark; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxProfitSharingReceiver; @@ -216,5 +217,5 @@ public interface WxMerchantService { Map findMerchantMap(WxMerchant merchantQ); - WxMerchant findParkMerchant(TenantEntity tenantEntity); + WxMerchant findParkMerchant(WxPark wxPark); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 21fa23be4..889119478 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -1973,14 +1973,16 @@ public class WxMerchantServiceImpl implements WxMerchantService { } @Override - public WxMerchant findParkMerchant(TenantEntity tenantEntity) { + public WxMerchant findParkMerchant(WxPark wxPark) { WxMerchant record = null; - String key = Constant.parkMerchantPrev + tenantEntity.getTenantId(); + String key = Constant.parkMerchantPrev + wxPark.getTenantId(); record = RedisCacheUtils.getCacheObject(redisTemplate, key, WxMerchant.class); if(record == null){ WxMerchant merchantQ = new WxMerchant(); - merchantQ.updateTenantInfo(tenantEntity); - merchantQ.setHasCarVendor(1); + merchantQ.updateTenantInfo(wxPark); + merchantQ.setCarVendorType(wxPark.getVendorType()); + merchantQ.setStatus(EnumMerchantStatus.VALID.getCode()); + merchantQ.setIsDel(EnumYesOrNo.NO.getCode()) ; List merchantList = wxMerchantMapper.findList(merchantQ); if (null != merchantList && merchantList.size() > 0 ) { record = merchantList.get(0); From 70a74b54854889b0e204eaa0496478f924aa4ed7 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 15:51:42 +0800 Subject: [PATCH 29/90] fix car pay --- .../java/com/iformall/service/impl/WxMerchantServiceImpl.java | 2 +- .../main/java/com/iformall/service/park/impl/fute/FuteUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 889119478..ed3814ab8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -1982,7 +1982,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { merchantQ.updateTenantInfo(wxPark); merchantQ.setCarVendorType(wxPark.getVendorType()); merchantQ.setStatus(EnumMerchantStatus.VALID.getCode()); - merchantQ.setIsDel(EnumYesOrNo.NO.getCode()) ; + merchantQ.setIsDel(EnumYesOrNo.NO.getCode()); List merchantList = wxMerchantMapper.findList(merchantQ); if (null != merchantList && merchantList.size() > 0 ) { record = merchantList.get(0); diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index d76b7e167..f2816c618 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -132,7 +132,7 @@ public class FuteUtil { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); - httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); + httpPost.addHeader(HTTP.CONTENT_TYPE,"application/x-www-form-urlencoded"); httpPost.addHeader("Accept", "application/json"); httpPost.addHeader("Accept-Encoding", "UTF-8"); From 09fc4719b3e9f5841a50be21c1e0c38b5a877e93 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 16:14:51 +0800 Subject: [PATCH 30/90] fix car --- .../service/park/impl/fute/FuteUtil.java | 55 ++++++++++++------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index f2816c618..5ba9eb200 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -119,9 +119,8 @@ public class FuteUtil { private static String ProcBussiness(String url,Map param,String signKey) { try { - String sign = sign(param, signKey); - param.put("sign", sign); - return Proc(url,param); + String allUrl = signUrl(url,param, signKey); + return Proc(allUrl,null); } catch (Exception e) { log.error("fute request error.",e); } @@ -173,24 +172,42 @@ public class FuteUtil { return result; } - private static String sign(Map map, String signKey){ + private static String signUrl(String url,Map map, String signKey){ if(map==null){ - return null; + return url; } - if(map.containsKey("sign")) { - map.remove("sign"); - } - List keyList = new ArrayList(map.keySet()); - Collections.sort(keyList); - StringBuffer sb = new StringBuffer(); - for(int i=0;i keyList = new ArrayList(map.keySet()); + Collections.sort(keyList); + StringBuffer signsb = new StringBuffer(); + if (url.contains("?")) { + url = url + "&"; + }else { + url = url + "?"; + } + StringBuffer urlsb = new StringBuffer(url); + for(int i=0;i Date: Tue, 14 Feb 2023 17:10:53 +0800 Subject: [PATCH 31/90] fix car pay --- .../market/WxCarPayOrderController.java | 21 ++++++++++++++ .../com/iformall/domain/po/WxCarPayOrder.java | 29 ++++++++++++++++++- .../service/park/pay/WxParkPayService.java | 6 ++++ .../park/pay/WxParkPayServiceImpl.java | 11 +++++++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java index a2b33a105..0f06c3fc1 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCarPayOrderController.java @@ -7,6 +7,7 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.base.BaseEntity; +import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.domain.po.WxActivity; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.enums.EnumActivityStatus; @@ -18,6 +19,10 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +50,14 @@ public class WxCarPayOrderController extends BaseController { return new ResultData(page); } + @GetMapping("export") + public void export(@ModelAttribute WxCarPayOrder wxCarPayOrder, HttpServletRequest request, HttpServletResponse response) { + if (null == wxCarPayOrder) wxCarPayOrder = new WxCarPayOrder(); + wxCarPayOrder.updateTenantInfo(getTenantInfo()); + wxCarPayOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC); + wxParkPayService.exportData(wxCarPayOrder, request, response); + } + @ApiOperation("总和") @GetMapping("sum") public ResultData sum(@ModelAttribute WxCarPayOrder wxCarPayOrder) { @@ -53,5 +66,13 @@ public class WxCarPayOrderController extends BaseController { Integer total = wxParkPayService.sumCarPayOrder(wxCarPayOrder); return new ResultData(total); } + + @ApiOperation("总和") + @GetMapping("detail") + public ResultData detail(@ModelAttribute WxCarPayOrder wxCarPayOrder) { + if (null == wxCarPayOrder) wxCarPayOrder = new WxCarPayOrder(); + wxCarPayOrder.updateTenantInfo(getTenantInfo()); + return new ResultData(wxParkPayService.detailWxCarPayOrder(wxCarPayOrder.getId(),wxCarPayOrder.getTenantId())); + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 6b16f280a..c5543857d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -3,6 +3,8 @@ package com.iformall.domain.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; + +import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -16,36 +18,61 @@ public class WxCarPayOrder extends TenantEntity { private static final long serialVersionUID = -5094915301794376964L; + @Excel(name = "ID", width = 20, orderNum = "1", prefix = "`") protected Long id; - + @Excel(name = "创建时间", width = 20,exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "2") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") private Date createTime; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") private Date updateTime; + @Excel(name = "用户ID", width = 20, orderNum = "3") @io.swagger.annotations.ApiModelProperty(value="用户ID",name="cUserId") private Long cUserId; @TableField(exist = false) private List userIds; + @Excel(name = "用户手机号", width = 20, orderNum = "4") @io.swagger.annotations.ApiModelProperty(value="用户手机号",name="cUserPhone") private String cUserPhone; + public Long getcUserId() { + return cUserId; + } + public void setcUserId(Long cUserId) { + this.cUserId = cUserId; + } + public String getcUserPhone() { + return cUserPhone; + } + public void setcUserPhone(String cUserPhone) { + this.cUserPhone = cUserPhone; + } + @Excel(name = "车牌号", width = 20, orderNum = "5") @io.swagger.annotations.ApiModelProperty(value="车牌号",name="carNumber") private String carNumber; + @Excel(name = "支付金额(分)", width = 20, orderNum = "6") @io.swagger.annotations.ApiModelProperty(value="支付金额(分)",name="payAmount") private Integer payAmount; + @Excel(name = "支付时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss",orderNum = "7") @io.swagger.annotations.ApiModelProperty(value="支付时间",name="payTime") private Date payTime; + @Excel(name = "微信生成的订单号", width = 20, orderNum = "8") @io.swagger.annotations.ApiModelProperty(value="微信生成的订单号",name="transactionId") private String transactionId; + @Excel(name = "车场订单号", width = 20, orderNum = "9") @io.swagger.annotations.ApiModelProperty(value="车场订单号",name="parkOrderNo") private String parkOrderNo; + @Excel(name = "商户收款账户", width = 20, orderNum = "10") @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") private String merchantAccount; + @Excel(name = "商户编号", width = 20, orderNum = "11") @io.swagger.annotations.ApiModelProperty(value="商户编号",name="merchantId") private Long merchantId; + @Excel(name = "商户名称", width = 20, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="商户名称",name="merchantName") private String merchantName; + @Excel(name = "是否已通知车场", width = 20, replace = {"已通知成功_1"}, orderNum = "13") @io.swagger.annotations.ApiModelProperty(value="是否已通知车场EnumYesOrNo",name="parkNotify") private Integer parkNotify; + @Excel(name = "通知失败原因", width = 20, orderNum = "14") @io.swagger.annotations.ApiModelProperty(value="通知失败原因",name="notifyFailReason") private String notifyFailReason; @io.swagger.annotations.ApiModelProperty(value="通知重试次数",name="notifyCount") diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 9c613ccab..f9fba60a5 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -3,10 +3,14 @@ package com.iformall.service.park.pay; import java.util.Date; import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxPark; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.enums.EnumCarVendor; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; @@ -14,6 +18,8 @@ public interface WxParkPayService { public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize); + public void exportData(WxCarPayOrder record, HttpServletRequest request, HttpServletResponse response); + //share:是否分账,服务商模式下生效 public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index f3a9e1834..0f55dd6bf 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -16,6 +16,7 @@ import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxRefundOrder; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.enums.EnumCarVendor; import com.iformall.enums.EnumPayVersion; import com.iformall.enums.EnumPayWay; @@ -46,6 +47,9 @@ import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -96,6 +100,13 @@ public class WxParkPayServiceImpl implements WxParkPayService { public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record)); } + + @Override + public void exportData(WxCarPayOrder record, HttpServletRequest request, HttpServletResponse response) { + String filename = "停车支付订单"; + List list = wxCarPayOrderMapper.findList(record); + excelService.exportCsv(list, null, filename, WxCarPayOrder.class, filename + ".csv", response, false); + } @Override public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, From 1f96ef01264adac82e5f7ac6bab911cd878bc79b Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 17:13:20 +0800 Subject: [PATCH 32/90] fix car pay --- .../com/iformall/service/park/pay/WxParkPayServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index 0f55dd6bf..89eadfaf4 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -221,7 +221,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.updateTenantInfo(tenantEntity); payOrder.setCreateTime(new Date()); payOrder.setUpdateTime(new Date()); - payOrder.setCUserId(cUserId); + payOrder.setcUserId(cUserId); payOrder.setCarNumber(carNumber); payOrder.setPayAmount(fee); payOrder.setPayTime(paidTime); @@ -231,7 +231,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.setMerchantId(merchantId); payOrder.setMerchantName(merchantName); payOrder.setCarVendor(carVendor); - payOrder.setCUserPhone(userPhone); + payOrder.setcUserPhone(userPhone); wxCarPayOrderMapper.insert(payOrder); //通知车场支付成功 try { From 4f5a21e09c095f114eeebc1a364d12a6797ce0a9 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 17:15:51 +0800 Subject: [PATCH 33/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 741428bf3..1fe437192 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -524,7 +524,7 @@ public class WxCarController extends BaseController { public ResultData payOrderList(Integer pageNum, Integer pageSize) { WxCarPayOrder carPayOrder = new WxCarPayOrder(); carPayOrder.updateTenantInfo(getTenantInfo()); - carPayOrder.setCUserId(getMemberId()); + carPayOrder.setcUserId(getMemberId()); carPayOrder.setSortColumn(SortField.CreateTime_DESC.getValue()); return new ResultData(wxParkPayService.listPayOrderAsPage(carPayOrder, pageNum, pageSize)); } From d15c9a06d915488da96ba312f271c4fc43fa1f5b Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 17:32:57 +0800 Subject: [PATCH 34/90] fix car pay --- .../WxProfitPaymentControllerController.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 mallinkAdmin/src/main/java/com/iformall/controller/market/WxProfitPaymentControllerController.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxProfitPaymentControllerController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxProfitPaymentControllerController.java new file mode 100644 index 000000000..911aad5cd --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxProfitPaymentControllerController.java @@ -0,0 +1,63 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.annotation.TenantIgnore; +import com.iformall.annotation.UserDataRuleAnnotation; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.BaseEntity; +import com.iformall.domain.vo.WxMerchantTradeDetailVo; +import com.iformall.domain.vo.WxMerchantTradeVo; +import com.iformall.domain.vo.WxMerchantVo; +import com.iformall.douyin.pay.enums.AppAddSubMerchantUrlType; +import com.iformall.enums.*; +import com.iformall.service.*; +import com.iformall.utils.Constant; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author gongbiao + */ +@RestController +@RequestMapping("wxProfitPayment") +public class WxProfitPaymentControllerController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxMerchantService wxMerchantService; + @Autowired + private WxProfitPaymentReceiverService wxProfitPaymentReceiverService; + + @ApiOperation("(微信)商户手填收款账号信息") + @GetMapping("getMerchantAccount") + @ApiImplicitParam(name = "mid", value = "mid", dataType = "Long", paramType = "query", required = true) + public ResultData getMerchantAccount(Long mid) { + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(getTenantInfo(), mid, EnumAppPlat.WX); + if (null != receiver) { + Map retMap = new HashMap(); + retMap.put("account", receiver.getReceiverAccount()); + retMap.put("isIsv", receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv)); + retMap.put("apiKey", receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey)); + return new ResultData(retMap); + } + return new ResultData(); + } +} From 99735235932556b15962ea4ff8d8c6e58ec3c42c Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 17:55:23 +0800 Subject: [PATCH 35/90] fix car pay --- .../java/com/iformall/service/impl/WxMerchantServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index ed3814ab8..9343db555 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -947,9 +947,9 @@ public class WxMerchantServiceImpl implements WxMerchantService { } StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); if (EnumYesOrNo.YES.getCode() == wxMerchant.getIsIsv()) { - psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); + psb.append("}"); }else { - psb.append("}"); + psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); } receiver.setReceiverAccount(wxMerchant.getAccount()); receiver.setReceiverParams(psb.toString()); From 7ec2cb36d363aab771c1e5bf7be422907b14faf7 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 14 Feb 2023 18:04:49 +0800 Subject: [PATCH 36/90] fix car pay --- .../iformall/service/impl/WxCouponPasswordServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java index 0a5d6213d..5576955a4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java @@ -96,7 +96,7 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService { @Override public void mkPasswords(TenantEntity tenantEntity, Long couponId, Integer inventory) { - String strAll = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String strAll = "0123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"; // 1.获取 coupon short 1 int couponShort = 0; String couponShortStr = "0"; @@ -104,14 +104,15 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService { pwQ.updateTenantInfo(tenantEntity); List pwgList = wxCouponPasswordMapper.findCouponGroupList(pwQ); couponShort = pwgList.size(); - couponShortStr = String.valueOf(strAll.charAt(couponShort%62)); + int dospt = strAll.length(); + couponShortStr = String.valueOf(strAll.charAt(couponShort%dospt)); // 2.随机字符 Random rand = new Random(); List pwList = new ArrayList<>(); while (true) { StringBuilder sb = new StringBuilder(); for (int j = 0; j < 9; j++) { - int f = (int) (Math.random() * 62); + int f = (int) (Math.random() * dospt); sb.append(strAll.charAt(f)); if (j == 4) { sb.append(couponShortStr); From 4870dd57e28c91551ca4a9bb2a00e9621e216123 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 15 Feb 2023 10:42:09 +0800 Subject: [PATCH 37/90] //sharing --- .../service/impl/WxProfitPaymentReceiverServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java index 9016c74a9..b9706818a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java @@ -111,6 +111,7 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv } sharingReceiver.setId(record.getId()); sharingReceiver.updateTenantInfo(record); + sharingReceiver.setMerchantId(record.getMerchantId()); sharingReceiver.setReceiverType(record.getReceiverType()); sharingReceiver.setReceiverAccount(record.getReceiverAccount()); sharingReceiver.setReceiverComments(record.getReceiverComments()); From 0635096705178a2b27010c500905968e8edd60f4 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 15 Feb 2023 11:19:08 +0800 Subject: [PATCH 38/90] fix car pay --- .../src/main/java/com/iformall/config/ShiroConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java index 3a45473a3..789c83120 100644 --- a/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java +++ b/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java @@ -121,6 +121,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/jieshunCarCallback/**", "anon"); filterChainDefinitionMap.put("/cyfCarCallback/**", "anon"); filterChainDefinitionMap.put("/hkwsCarCallback/**", "anon"); + filterChainDefinitionMap.put("/futeCarCallback/**", "anon"); // static files filterChainDefinitionMap.put("/css/**", "anon"); From f0b04655a726bb05821c530781f0eb960838cf33 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 15 Feb 2023 11:29:34 +0800 Subject: [PATCH 39/90] fix car pay --- .../com/iformall/controller/basic/WxMerchantController.java | 1 + .../src/main/java/com/iformall/domain/po/WxMerchant.java | 2 ++ mallinkService/src/main/resources/mapper/WxMerchantMapper.xml | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 965b3a6bc..0b6569335 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -87,6 +87,7 @@ public class WxMerchantController extends BaseController { wxMerchant.updateTenantInfo(getTenantInfo()); wxMerchant.setSortColumns(BaseEntity.SortField.TopTime_DESC); wxMerchant.setIsPrivate(EnumYesOrNo.NO.getCode()); + wxMerchant.setNoCarVendor(1); final PageInfo page = wxMerchantService.listVoAsPage(wxMerchant, pageNum, pageSize,false); return new ResultData(page); } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index d01e154c7..69b66c5ac 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -408,5 +408,7 @@ public class WxMerchant extends TenantEntity { //查询停车商户根据此字段 @TableField(exist = false) private Integer hasCarVendor; + @TableField(exist = false) + private Integer noCarVendor; } diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index 618d4e268..8b9e05cef 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -108,6 +108,10 @@ and m.`car_vendor_type` is not null and m.`car_vendor_type` > 0 + + + and (m.`car_vendor_type` = 0 or m.`car_vendor_type` is null) + and m.`business_id` = #{businessId} From e35a1158f324f7bd3b3827b2db554755854b22b4 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 15 Feb 2023 15:07:38 +0800 Subject: [PATCH 40/90] //sharing --- .../V2023021300001__add_分账类型.sql | 2 + .../controller/WxMerchantController.java | 79 ++++++++++++------- .../enums/EnumProfitPaymentReceiverType.java | 4 +- 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql index ec7acf57c..fe0607b3c 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021300001__add_分账类型.sql @@ -31,6 +31,8 @@ INSERT INTO `mallink`.`wx_profit_payment_receiver`(`id`, `tenant_id`, `parent_te (select `id`, `tenant_id`, `parent_tenant_id`, `merchant_id`, `receiver_type`, `receiver_account`, `create_time`, `update_time`, `status`, `plat`, `tt_import_status`, `tt_import_url`, `tt_balance_url` from wx_profit_sharing_receiver where plat = 3 and sharing_type = 3); +update wx_profit_payment_receiver set receiver_type = 10 where plat = 3; + update wx_profit_sharing_receiver set receiver_type = 10 where plat = 3 and sharing_type = 3; update wx_profit_sharing_receiver set sharing_type = 1 where sharing_type != 2; diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java index dee795c3e..b5fbdadc2 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -63,22 +63,9 @@ public class WxMerchantController extends BaseController { if(payAccount == null){ return new ResultData(ErrorCode.API_KEY_NOT_FOUND); } - return new ResultData(wxProfitSharingReceiverService.findReceiver(tenantInfo,wxMerchant.getId(), EnumAppPlat.WX)); } - @ApiOperation("抖音查询收款账户信息") - @GetMapping("/findTtAccountById") - @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) - public ResultData findTtAccountById(@ModelAttribute WxMerchant wxMerchant) { - log.debug("[" + getIpAddr() + "] WxMerchantController::findTtAccountById"); - if (wxMerchant.getId() == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); - } - wxMerchant.updateTenantInfo(getTenantInfo()); - return new ResultData(wxProfitPaymentReceiverService.findReceiver(getTenantInfo(),wxMerchant.getId(), EnumAppPlat.TOUTIAO)); - } - @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") @PostMapping("/updateAccount") public ResultData addAccount(@RequestBody WxMerchant wxMerchant) { @@ -120,13 +107,7 @@ public class WxMerchantController extends BaseController { return wxProfitSharingReceiverService.delReceiver(receiver, EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode()); } - @ApiOperation("查询是否有权限修改账户") - @GetMapping("/permitModifiy") - public ResultData permitModifiy() { - log.debug("[" + getIpAddr() + "] WxMerchantController::permitModifiy"); - boolean has = hasPermission(); - return new ResultData(has); - } + @TenantIgnore @ApiOperation("获取微信OpenId") @@ -160,6 +141,56 @@ public class WxMerchantController extends BaseController { } } + @ApiOperation("微信查询收款信息") + @GetMapping("/findPaymentAccountById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData findPaymentAccountById(@ModelAttribute WxMerchant wxMerchant) { + log.debug("[" + getIpAddr() + "] WxMerchantController::findPaymentAccountById"); + if (wxMerchant.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); + } + TenantEntity tenantInfo = getTenantInfo(); + wxMerchant.updateTenantInfo(tenantInfo); + + WxPayAccount payAccount = payAccountService.getPayAccount(tenantInfo, EnumAppPlat.WX); + if(payAccount == null){ + return new ResultData(ErrorCode.API_KEY_NOT_FOUND); + } + return new ResultData(wxProfitPaymentReceiverService.findReceiver(tenantInfo,wxMerchant.getId(), EnumAppPlat.WX)); + } + + + + @ApiOperation("查询是否有权限修改账户") + @GetMapping("/permitModifiy") + public ResultData permitModifiy() { + log.debug("[" + getIpAddr() + "] WxMerchantController::permitModifiy"); + boolean has = hasPermission(); + return new ResultData(has); + } + + + public boolean hasPermission() { + WxMerchantBUser user = getLoginBUser(); + CUser buser = getCUser(); + WxMerchant wxMerchant = wxMerchantService.selectById(user.getMerchantId()); + return wxMerchant != null && wxMerchant.getLinkPhone().equals(buser.getPhone()); + } + + + @ApiOperation("抖音查询收款账户信息") + @GetMapping("/findTtAccountById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData findTtAccountById(@ModelAttribute WxMerchant wxMerchant) { + log.debug("[" + getIpAddr() + "] WxMerchantController::findTtAccountById"); + if (wxMerchant.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); + } + wxMerchant.updateTenantInfo(getTenantInfo()); + return new ResultData(wxProfitPaymentReceiverService.findReceiver(getTenantInfo(),wxMerchant.getId(), EnumAppPlat.TOUTIAO)); + } + + @RedisCache() @ApiOperation("获取进件/余额页面") @GetMapping("/getTtReceiverUrl") @@ -189,14 +220,6 @@ public class WxMerchantController extends BaseController { }else{ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请检查传递参数"); } - - } - - public boolean hasPermission() { - WxMerchantBUser user = getLoginBUser(); - CUser buser = getCUser(); - WxMerchant wxMerchant = wxMerchantService.selectById(user.getMerchantId()); - return wxMerchant != null && wxMerchant.getLinkPhone().equals(buser.getPhone()); } } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java b/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java index 76215f157..d606d9110 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumProfitPaymentReceiverType.java @@ -4,9 +4,9 @@ package com.iformall.enums; * Created by Stormeye on 2018/08/09. */ public enum EnumProfitPaymentReceiverType { - wx_special_merchant_number(0, "MERCHANT_ID"),//微信特约商户号 + wx_special_merchant_number(0, "MERCHANT_ID"),//微信商户号 wx_personal_wechatid(1, "PERSONAL_WECHATID"),//微信号 已不支持 - wx_personal_openid(2, "PERSONAL_OPENID"),//v2,v3 + wx_personal_openid(2, "PERSONAL_OPENID"),// wx_personal_sub_openid(3, "PERSONAL_SUB_OPENID"), tt_merchant_number(10,"")//抖音商户号 From a16e2db39f16fa15d2ded625dc98c5dab9be792f Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 15 Feb 2023 17:35:06 +0800 Subject: [PATCH 41/90] //name --- .../com/iformall/service/cuser/tt/TtCUserServiceAdapter.java | 4 ++-- .../com/iformall/service/cuser/wx/WxCUserServiceAdapter.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java index f6bd3fb4a..cbb302ca9 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java @@ -121,7 +121,7 @@ public class TtCUserServiceAdapter extends BasicCUserService implements CUserSer updateUser.updateTenantInfo(cuser); updateUser.setUnionId(userInfo.getUnionId()); if(userInfo.getNickName() == null){ - updateUser.setNickName(AppUtils.getAppId());//获取不到昵称 + updateUser.setNickName("未授权昵称");//获取不到昵称 }else{ updateUser.setNickName(userInfo.getNickName()); } @@ -233,7 +233,7 @@ public class TtCUserServiceAdapter extends BasicCUserService implements CUserSer wxCUserFrom.setIsNewUser(EnumYesOrNo.NO.getCode()); } else { user = new TtCUser(); - user.setNickName(AppUtils.getAppId());//新用户随机昵称,短8位 + user.setNickName("未授权昵称");//新用户随机昵称,短8位 user.updateTenantInfo(cUser); user.setAppId(cUser.getAppId()); user.setOpenId(cUser.getOpenId()); diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java index b2ecbeb59..820cf6d92 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java @@ -132,7 +132,7 @@ public class WxCUserServiceAdapter extends BasicCUserService implements CUserSer updateUser.updateTenantInfo(cuser); updateUser.setUnionId(userInfo.getUnionId()); if(userInfo.getNickName() == null){ - updateUser.setNickName(AppUtils.getAppId());//获取不到微信昵称 + updateUser.setNickName("未授权昵称");//获取不到微信昵称 }else{ updateUser.setNickName(userInfo.getNickName()); } @@ -247,7 +247,7 @@ public class WxCUserServiceAdapter extends BasicCUserService implements CUserSer } else { // 新用户 user = new WxCUser(); - user.setNickName(AppUtils.getAppId());//新用户随机昵称,短8位 + user.setNickName("未授权昵称");//新用户随机昵称,短8位 user.updateTenantInfo(cUser); user.setAppId(cUser.getAppId()); user.setOpenId(cUser.getOpenId()); From 008d3a705f498d791771e88e64271f437e084108 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 15 Feb 2023 17:53:44 +0800 Subject: [PATCH 42/90] fix car pay --- .../com/iformall/controller/basic/WxMerchantController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 0b6569335..7c7b7096e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -87,7 +87,11 @@ public class WxMerchantController extends BaseController { wxMerchant.updateTenantInfo(getTenantInfo()); wxMerchant.setSortColumns(BaseEntity.SortField.TopTime_DESC); wxMerchant.setIsPrivate(EnumYesOrNo.NO.getCode()); - wxMerchant.setNoCarVendor(1); + if (null != wxMerchant.getHasCarVendor()) { + wxMerchant.setHasCarVendor(1); + }else { + wxMerchant.setNoCarVendor(1); + } final PageInfo page = wxMerchantService.listVoAsPage(wxMerchant, pageNum, pageSize,false); return new ResultData(page); } From 99bb7bd74168cbdcc1f3775339ad2e8268686295 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 15 Feb 2023 18:27:07 +0800 Subject: [PATCH 43/90] //city --- .../V2023021500001__add_locate_city.sql | 408 ++++++++++++++++++ .../controller/WxUserGrantController.java | 3 + .../java/com/iformall/domain/po/CUser.java | 3 + .../cuser/tt/TtBUserServiceAdapter.java | 1 + .../cuser/tt/TtCUserServiceAdapter.java | 1 + .../cuser/wx/WxBUserServiceAdapter.java | 1 + .../cuser/wx/WxCUserServiceAdapter.java | 1 + .../main/resources/mapper/TtBuserMapper.xml | 3 +- .../main/resources/mapper/TtCUserMapper.xml | 3 +- .../main/resources/mapper/WxBuserMapper.xml | 3 +- .../main/resources/mapper/WxCUserMapper.xml | 3 +- 11 files changed, 426 insertions(+), 4 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql new file mode 100644 index 000000000..b15b8dd2f --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql @@ -0,0 +1,408 @@ +ALTER TABLE `mallink`.`tt_buser` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; + +ALTER TABLE `mallink`.`wx_buser` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; + +ALTER TABLE `mallink`.`tt_c_user_0` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_1` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_2` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_3` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_4` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_5` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_6` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_7` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_8` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_9` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_10` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_11` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_12` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_13` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_14` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_15` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_16` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_17` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_18` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_19` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_20` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_21` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_22` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_23` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_24` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_25` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_26` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_27` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_28` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_29` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_30` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_31` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_32` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_33` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_34` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_35` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_36` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_37` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_38` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_39` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_40` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_41` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_42` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_43` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_44` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_45` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_46` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_47` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_48` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_49` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_50` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_51` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_52` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_53` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_54` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_55` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_56` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_57` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_58` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_59` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_60` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_61` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_62` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_63` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_64` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_65` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_66` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_67` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_68` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_69` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_70` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_71` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_72` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_73` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_74` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_75` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_76` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_77` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_78` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_79` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_80` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_81` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_82` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_83` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_84` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_85` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_86` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_87` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_88` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_89` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_90` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_91` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_92` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_93` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_94` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_95` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_96` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_97` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_98` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`tt_c_user_99` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; + + +ALTER TABLE `mallink`.`wx_c_user_0` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_1` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_2` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_3` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_4` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_5` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_6` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_7` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_8` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_9` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_10` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_11` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_12` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_13` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_14` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_15` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_16` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_17` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_18` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_19` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_20` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_21` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_22` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_23` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_24` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_25` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_26` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_27` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_28` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_29` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_30` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_31` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_32` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_33` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_34` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_35` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_36` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_37` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_38` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_39` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_40` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_41` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_42` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_43` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_44` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_45` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_46` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_47` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_48` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_49` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_50` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_51` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_52` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_53` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_54` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_55` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_56` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_57` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_58` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_59` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_60` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_61` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_62` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_63` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_64` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_65` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_66` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_67` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_68` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_69` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_70` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_71` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_72` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_73` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_74` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_75` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_76` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_77` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_78` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_79` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_80` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_81` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_82` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_83` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_84` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_85` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_86` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_87` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_88` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_89` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_90` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_91` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_92` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_93` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_94` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_95` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_96` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_97` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_98` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; +ALTER TABLE `mallink`.`wx_c_user_99` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 6c738c394..49cd965c4 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -325,11 +325,14 @@ public class WxUserGrantController extends BaseController { logger.info(map.toString()); String longitude = map.get("longitude"); String latitude = map.get("latitude"); + String city = map.get("city"); CUser user = getCUser(); if (!StringUtils.isBlank(longitude)) user.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); if (!StringUtils.isBlank(latitude)) user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); + if (!StringUtils.isBlank(city)) + user.setLocateCity(city); cuserFactory.getCUserService(user.getAppPlat()).updateLBS(user); return new ResultData(); } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/CUser.java b/mallinkService/src/main/java/com/iformall/domain/po/CUser.java index b7b4a5f09..39fb9c48b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/CUser.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/CUser.java @@ -68,6 +68,9 @@ public class CUser extends BaseCUserEntity { /*纬度**/ @io.swagger.annotations.ApiModelProperty(value="纬度",name="latitude") private BigDecimal latitude; + /*定位城市**/ + @io.swagger.annotations.ApiModelProperty(value="纬度",name="latitude") + private String locateCity; /*登录次数**/ @io.swagger.annotations.ApiModelProperty(value="登录次数",name="loginCount") private Integer loginCount; diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtBUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtBUserServiceAdapter.java index 699edf690..da0962ea6 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtBUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtBUserServiceAdapter.java @@ -229,6 +229,7 @@ public class TtBUserServiceAdapter extends BasicCUserService implements CUserSer userL.updateTenantInfo(user); userL.setLongitude(user.getLongitude()); userL.setLatitude(user.getLatitude()); + userL.setLocateCity(user.getLocateCity()); userL.setUpdateDate(new Date()); ttBuserMapper.updateById(userL); cleanCuserToken(user.getToken()); diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java index cbb302ca9..91f01efd3 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java @@ -292,6 +292,7 @@ public class TtCUserServiceAdapter extends BasicCUserService implements CUserSer userL.updateTenantInfo(user); userL.setLongitude(user.getLongitude()); userL.setLatitude(user.getLatitude()); + userL.setLocateCity(user.getLocateCity()); userL.setUpdateDate(new Date()); ttCUserMapper.updateById(userL); cleanCuserToken(user.getToken()); diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java index d66696dcc..5cfff49c0 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java @@ -233,6 +233,7 @@ public class WxBUserServiceAdapter extends BasicCUserService implements CUserSer userL.updateTenantInfo(user); userL.setLongitude(user.getLongitude()); userL.setLatitude(user.getLatitude()); + userL.setLocateCity(user.getLocateCity()); userL.setUpdateDate(new Date()); wxBuserMapper.updateById(userL); cleanCuserToken(user.getToken()); diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java index 820cf6d92..61ebdcdd6 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java @@ -305,6 +305,7 @@ public class WxCUserServiceAdapter extends BasicCUserService implements CUserSer userL.updateTenantInfo(user); userL.setLongitude(user.getLongitude()); userL.setLatitude(user.getLatitude()); + userL.setLocateCity(user.getLocateCity()); userL.setUpdateDate(new Date()); wxCUserMapper.updateById(userL); cleanCuserToken(user.getToken()); diff --git a/mallinkService/src/main/resources/mapper/TtBuserMapper.xml b/mallinkService/src/main/resources/mapper/TtBuserMapper.xml index ad084a638..67589fdc6 100644 --- a/mallinkService/src/main/resources/mapper/TtBuserMapper.xml +++ b/mallinkService/src/main/resources/mapper/TtBuserMapper.xml @@ -30,6 +30,7 @@ + @@ -55,7 +56,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`, `city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`, `qrcode_source`,`scene`,`scene_address`,`session_key`,`score`, - `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, + `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, `locate_city`, `login_count`, `extra_info`, `is_subscribe`,`open_app_id`,`user_id`, `mp_open_id`,`mp_app_id`,`mp_subscribe`,`mp_subscribe_time`,`mp_subscribe_scene`, `subs_open_id`,`subs_app_id`,`subs_subscribe`,`subs_subscribe_time`,`subs_subscribe_scene`,`credit`,`active_time`,`qr_code` diff --git a/mallinkService/src/main/resources/mapper/TtCUserMapper.xml b/mallinkService/src/main/resources/mapper/TtCUserMapper.xml index 3fb904143..2a61861d5 100644 --- a/mallinkService/src/main/resources/mapper/TtCUserMapper.xml +++ b/mallinkService/src/main/resources/mapper/TtCUserMapper.xml @@ -31,6 +31,7 @@ + @@ -54,7 +55,7 @@ `id`,`user_id`,`tenant_id`,`parent_tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`, `city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`, `qrcode_source`,`scene`,`scene_address`,`session_key`,`score`, - `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, + `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, `locate_city`, `login_count`, `extra_info`, `is_subscribe`, `open_app_id`, `mp_open_id`,`mp_app_id`,`mp_subscribe`,`mp_subscribe_time`,`mp_subscribe_scene`, diff --git a/mallinkService/src/main/resources/mapper/WxBuserMapper.xml b/mallinkService/src/main/resources/mapper/WxBuserMapper.xml index 3f96d925d..944729b41 100644 --- a/mallinkService/src/main/resources/mapper/WxBuserMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBuserMapper.xml @@ -30,6 +30,7 @@ + @@ -55,7 +56,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`, `city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`, `qrcode_source`,`scene`,`scene_address`,`session_key`,`score`, - `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, + `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, `locate_city`, `login_count`, `extra_info`, `is_subscribe`,`open_app_id`,`user_id`, `mp_open_id`,`mp_app_id`,`mp_subscribe`,`mp_subscribe_time`,`mp_subscribe_scene`, `subs_open_id`,`subs_app_id`,`subs_subscribe`,`subs_subscribe_time`,`subs_subscribe_scene`,`credit`,`active_time`,`qr_code` diff --git a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml index 23f5a166a..ac1cb4c35 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml @@ -31,6 +31,7 @@ + @@ -57,7 +58,7 @@ `id`,`user_id`,`tenant_id`,`parent_tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`, `city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`, `qrcode_source`,`scene`,`scene_address`,`session_key`,`score`, - `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, + `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, `locate_city`, `login_count`, `extra_info`, `is_subscribe`, `open_app_id`, `mp_open_id`,`mp_app_id`,`mp_subscribe`,`mp_subscribe_time`,`mp_subscribe_scene`, From 2a4430bb35291590786e4fdb00ab96cf6965cc81 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 16 Feb 2023 11:29:26 +0800 Subject: [PATCH 44/90] //city --- ...V2023021000001__add_tingche_permission.sql | 4 +- .../V2023021500001__add_locate_city.sql | 202 ++++++++++++++++++ .../java/com/iformall/domain/po/CUser.java | 2 +- .../iformall/domain/po/WxCUserBasicInfo.java | 4 + .../mapper/WxCUserBasicInfoMapper.xml | 3 +- 5 files changed, 211 insertions(+), 4 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql index 4df9e81b8..2b70e2bf6 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021000001__add_tingche_permission.sql @@ -5,8 +5,8 @@ INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702]' WHERE `id` = 1; UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 4, 5, 6, 7, 8, 9, 10, 50, 101, 102, 103, 104, 105, 106, 107, 201, 202, 203, 204, 205, 209, 211, 212, 221, 222, 224, 225, 251, 409, 410, 411, 416, 418, 420, 421, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 961, 6611, 60701, 60702]' WHERE `id` = 2; UPDATE `mallink`.`mall_sale_type` SET `menus` = '[2, 4, 5, 6, 7, 10, 50, 201, 202, 205, 211, 212, 221, 222, 224, 225, 251, 409, 410, 411, 416, 418, 501, 502, 503, 504, 505, 506, 507, 508, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 60701, 60702]' WHERE `id` = 3; -UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 223, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 615, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 647, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 676, 680, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 5310, 5320, 6611, 60701, 60702, 61501, 61502]' WHERE `id` = 12; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 223, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 615, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 647, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 676, 680, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702, 61501, 61502]' WHERE `id` = 12; UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 224, 225, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702]' WHERE `id` = 1028; UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 224, 225, 251, 299, 300, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702]' WHERE `id` = 1035001036; -UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 225, 223, 224, 251, 299, 300, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 615, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 647, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 676, 680, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 5310, 5320, 6611, 60701, 60702, 61501, 61502]' WHERE `id` = 103500103610; +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 225, 223, 224, 251, 299, 300, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 431, 432, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 615, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 647, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 676, 680, 681, 682, 683, 684, 685, 687, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 715, 901, 902, 903, 904, 905, 906, 907, 908, 910, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 6611, 60701, 60702, 61501, 61502]' WHERE `id` = 103500103610; diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql index b15b8dd2f..102672951 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021500001__add_locate_city.sql @@ -406,3 +406,205 @@ ALTER TABLE `mallink`.`wx_c_user_98` ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; ALTER TABLE `mallink`.`wx_c_user_99` ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `longitude`; + + +ALTER TABLE `mallink`.`wx_c_user_basic_info_0` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_1` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_2` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_3` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_4` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_5` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_6` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_7` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_8` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_9` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_10` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_11` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_12` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_13` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_14` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_15` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_16` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_17` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_18` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_19` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_20` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_21` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_22` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_23` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_24` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_25` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_26` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_27` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_28` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_29` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_30` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_31` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_32` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_33` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_34` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_35` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_36` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_37` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_38` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_39` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_40` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_41` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_42` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_43` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_44` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_45` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_46` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_47` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_48` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_49` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_50` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_51` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_52` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_53` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_54` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_55` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_56` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_57` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_58` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_59` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_60` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_61` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_62` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_63` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_64` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_65` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_66` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_67` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_68` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_69` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_70` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_71` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_72` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_73` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_74` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_75` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_76` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_77` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_78` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_79` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_80` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_81` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_82` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_83` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_84` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_85` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_86` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_87` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_88` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_89` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_90` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_91` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_92` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_93` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_94` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_95` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_96` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_97` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_98` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; +ALTER TABLE `mallink`.`wx_c_user_basic_info_99` +ADD COLUMN `locate_city` varchar(100) COMMENT '定位城市' AFTER `active_time`; \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/CUser.java b/mallinkService/src/main/java/com/iformall/domain/po/CUser.java index 39fb9c48b..c4ac34cc6 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/CUser.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/CUser.java @@ -69,7 +69,7 @@ public class CUser extends BaseCUserEntity { @io.swagger.annotations.ApiModelProperty(value="纬度",name="latitude") private BigDecimal latitude; /*定位城市**/ - @io.swagger.annotations.ApiModelProperty(value="纬度",name="latitude") + @io.swagger.annotations.ApiModelProperty(value="定位城市",name="locateCity") private String locateCity; /*登录次数**/ @io.swagger.annotations.ApiModelProperty(value="登录次数",name="loginCount") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java index 104f9e690..d57a58631 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -95,6 +95,10 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; + /*定位城市**/ + @io.swagger.annotations.ApiModelProperty(value="定位城市",name="locateCity") + private String locateCity; + @io.swagger.annotations.ApiModelProperty(value="登录次数",name="loginCount") private Integer loginCount; diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 17ea2c401..d81f7ac92 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -25,6 +25,7 @@ + @@ -35,7 +36,7 @@ wcubi.`id`,wcubi.`phone`,wcubi.`birthdate`,wcubi.`education`,wcubi.`sex`,wcubi.`height`,wcubi.`weight`,wcubi.`id_card`,wcubi.`email`, wcubi.`address`,wcubi.`poins`,wcubi.`tag_id`,wcubi.`create_date`,wcubi.`update_date`, wcubi.`final_tenant_id`,wcubi.`tenant_id`,wcubi.`parent_tenant_id`,wcubi.`name`,wcubi.`nick_name`, - wcubi.`avatar_url`,wcubi.`credit`,wcubi.`active_time`,wcubi.`login_count`,wcubi.`act_record`, + wcubi.`avatar_url`,wcubi.`credit`,wcubi.`active_time`,wcubi.`locate_city`,wcubi.`login_count`,wcubi.`act_record`, wcubi.score_date,wcubi.status From 3eb1fb8e95708b0b3807474215fbdf9284929383 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 16 Feb 2023 16:15:14 +0800 Subject: [PATCH 45/90] //city --- .../com/iformall/controller/BaseController.java | 16 ++++++++++++++++ .../controller/WxUserGrantController.java | 14 +++++++++++++- .../impl/WxCUserBasicInfoServiceImpl.java | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index 4d0303c84..1eaa310e2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -269,6 +269,22 @@ public class BaseController { return null; } + public int syncBasicInfoCity(WxCUserBasicInfo basicInfo,String city){ + if(basicInfo == null || StringUtils.isBlank(city)){ + return 0; + } + if(city.equals(basicInfo.getLocateCity())){ + return 0; + } + WxCUserBasicInfo record = new WxCUserBasicInfo(); + record.setId(basicInfo.getId()); + record.setFinalTenantId(basicInfo.getFinalTenantId()); + record.setLocateCity(city); + wxCUserBasicInfoService.update(record); + removeCacheMember(basicInfo.getId()); + return 1; + } + public String getIpAddr() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ipaddress = IPUtil.getIpAddr(request); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 49cd965c4..7c521b0d9 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -334,6 +334,18 @@ public class WxUserGrantController extends BaseController { if (!StringUtils.isBlank(city)) user.setLocateCity(city); cuserFactory.getCUserService(user.getAppPlat()).updateLBS(user); + + if(StringUtils.isNotBlank(city)){ + try { + int i = syncBasicInfoCity(getCacheMember(),city); + if(i > 0){ + //todo同步猫酷 + + } + }catch(Exception e){} + + } + return new ResultData(); } @@ -698,7 +710,6 @@ public class WxUserGrantController extends BaseController { record.setWeight(wxCUserBasicInfo.getWeight()); record.setHeight(wxCUserBasicInfo.getHeight()); record.setAddress(wxCUserBasicInfo.getAddress()); - record.setUpdateDate(new Date()); record.setFinalTenantId(tenantEntity.getFinalTenantId()); wxCUserBasicInfoService.update(record); @@ -796,4 +807,5 @@ public class WxUserGrantController extends BaseController { } } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index 916ee87e2..267004304 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -784,6 +784,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc @Override public void update(WxCUserBasicInfo record) { + record.setUpdateDate(new Date()); wxCUserBasicInfoMapper.updateById(record); } From efd97a057c620bbf74e87be8162f9af143c1159f Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 16 Feb 2023 16:30:26 +0800 Subject: [PATCH 46/90] //merchant --- .../controller/WxMerchantController.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java index b5fbdadc2..3dad30a26 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -18,6 +18,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; +import java.util.Map; + @RestController @RequestMapping("/api/merchant") @Api(description = "商户相关接口") @@ -48,7 +51,7 @@ public class WxMerchantController extends BaseController { return new ResultData(wxMerchantService.findList(getTenantInfo())); } - @ApiOperation("微信查询分账信息") + @ApiOperation("微信查询收款/分账信息") @GetMapping("/findAccountById") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) public ResultData findAccountById(@ModelAttribute WxMerchant wxMerchant) { @@ -63,7 +66,23 @@ public class WxMerchantController extends BaseController { if(payAccount == null){ return new ResultData(ErrorCode.API_KEY_NOT_FOUND); } - return new ResultData(wxProfitSharingReceiverService.findReceiver(tenantInfo,wxMerchant.getId(), EnumAppPlat.WX)); + Map data = new HashMap<>(); + if(EnumPayMchType.TOTAL.getCode().equals(payAccount.getMchType())){ + data.put("mchType",EnumPayMchType.TOTAL.getCode()); + WxProfitSharingReceiver receiver = wxProfitSharingReceiverService.findReceiver(tenantInfo, wxMerchant.getId(), EnumAppPlat.WX); + if(receiver != null){ + data.put("receiver",receiver); + } + return new ResultData(data); + }else if(EnumPayMchType.DIRECT.getCode().equals(payAccount.getMchType())){ + data.put("mchType",EnumPayMchType.DIRECT.getCode()); + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(tenantInfo, wxMerchant.getId(), EnumAppPlat.WX); + if(receiver != null){ + data.put("receiver",receiver); + } + return new ResultData(data); + } + return new ResultData(ErrorCode.APP_PLAT_ERROR); } @ApiOperation("更新收款账户信息:必填项 id(商户ID) name(商户名称) accountId(账号ID) accountTypeValue(账号类型) accountName(账号名称)") @@ -141,26 +160,6 @@ public class WxMerchantController extends BaseController { } } - @ApiOperation("微信查询收款信息") - @GetMapping("/findPaymentAccountById") - @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) - public ResultData findPaymentAccountById(@ModelAttribute WxMerchant wxMerchant) { - log.debug("[" + getIpAddr() + "] WxMerchantController::findPaymentAccountById"); - if (wxMerchant.getId() == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "商户ID不能为空"); - } - TenantEntity tenantInfo = getTenantInfo(); - wxMerchant.updateTenantInfo(tenantInfo); - - WxPayAccount payAccount = payAccountService.getPayAccount(tenantInfo, EnumAppPlat.WX); - if(payAccount == null){ - return new ResultData(ErrorCode.API_KEY_NOT_FOUND); - } - return new ResultData(wxProfitPaymentReceiverService.findReceiver(tenantInfo,wxMerchant.getId(), EnumAppPlat.WX)); - } - - - @ApiOperation("查询是否有权限修改账户") @GetMapping("/permitModifiy") public ResultData permitModifiy() { From 9a22a08ae3f664cd84a660f67fae5ea891f6f4e5 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 16 Feb 2023 18:24:17 +0800 Subject: [PATCH 47/90] fix card --- .../market/WxCardPayController.java | 1 - .../controller/market/WxCouponController.java | 35 +++- .../db/migration/V2023021400001__card.sql | 105 ++++++++++ .../controller/WxCardPayController.java | 188 +++++++++++++++++- .../com/iformall/domain/po/WxCardInfo.java | 14 +- .../java/com/iformall/domain/po/WxCoupon.java | 3 + .../com/iformall/enums/EnumCardInfoType.java | 36 ++++ .../enums/EnumCouponPasswordStatus.java | 5 +- .../iformall/enums/EnumCouponSendType.java | 2 +- .../com/iformall/mapper/WxCouponMapper.java | 2 + .../iformall/service/WxCardInfoService.java | 4 + .../com/iformall/service/WxCouponService.java | 2 + .../service/impl/WxCardInfoServiceImpl.java | 58 ++++++ .../service/impl/WxCardSpendServiceImpl.java | 62 +++--- .../service/impl/WxCouponServiceImpl.java | 36 +++- .../service/impl/WxOrderServiceImpl.java | 1 + .../java/com/iformall/utils/Constant.java | 4 + .../resources/mapper/WxCardInfoMapper.xml | 10 +- .../main/resources/mapper/WxCouponMapper.xml | 25 ++- 19 files changed, 531 insertions(+), 62 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java index a080e1e2c..17a75d340 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java @@ -62,7 +62,6 @@ public class WxCardPayController extends BaseController { @SystemControllerLog(description = "储值卡支付-售卡记录列表") public ResultData cardOrderList(@ModelAttribute WxCardVo wxCardVo, Integer pageNum, Integer pageSize) { String ipStr = getIpAddr(); - logger.info("cardPay/cardOrderList: " + ipStr); if (wxCardVo == null) {wxCardVo = new WxCardVo();} else { if(StringUtils.isBlank(wxCardVo.getOuPhone())) { diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java index 1b779efa8..3b0b37fee 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java @@ -194,7 +194,7 @@ public class WxCouponController extends BaseController { return resultData; } - + @TenantIgnore @ApiOperation("根据id更新接口") @PostMapping("update") @@ -402,6 +402,39 @@ public class WxCouponController extends BaseController { CouponCacheUtils.removeCouponCache(redisTemplate, wxCoupon.getId()); return new ResultData(); } + + @TenantIgnore + @ApiOperation("后置设置金额") + @PostMapping("setPrice") + public ResultData setPrice(@RequestBody WxCoupon wxCoupon) { + TenantEntity tenantEntity = getTenantInfo(); + wxCoupon.updateTenantInfo(tenantEntity); + WxCoupon coupon = wxCouponService.findById(wxCoupon); + if (null == coupon ) { + return new ResultData(ResultData.ERROR, "券未查询到。"+wxCoupon.getId()); + } + if (EnumYesOrNo.YES.getCode() != coupon.getIsAfterSetPrice()) { + return new ResultData(ResultData.ERROR, "当前不是后置类型,不能设置。"+wxCoupon.getId()); + } + if (null != coupon.getPrice() && coupon.getPrice() > 0 ) { + return new ResultData(ResultData.ERROR, "当前已设置面额,不能设置。"+wxCoupon.getId()); + } + if (EnumCouponSubsidyType.WECHAT_COUPON.getCode().equals(coupon.getSubsidyType())) { + // 微信 立减 + if (coupon.getSubsidyNum() > coupon.getSalePrice()) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); + } + } else if (EnumCouponSubsidyType.OFFLINE_SUBSIDY.getCode().equals(coupon.getSubsidyType())) { + // 线下补贴 + int subsidy_num = wxCoupon.getPrice() - coupon.getSalePrice(); + if (coupon.getSubsidyNum() > subsidy_num) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); + } + } + ResultData resultData = wxCouponService.setPrice(wxCoupon); + return resultData; + } + @ApiOperation("根据id删除接口") @GetMapping("/del") diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql new file mode 100644 index 000000000..48b4229f2 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql @@ -0,0 +1,105 @@ +alter table wx_coupon_0 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_1 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_2 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_3 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_4 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_5 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_6 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_7 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_8 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_9 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_10 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_11 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_12 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_13 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_14 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_15 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_16 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_17 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_18 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_19 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_20 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_21 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_22 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_23 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_24 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_25 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_26 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_27 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_28 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_29 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_30 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_31 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_32 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_33 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_34 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_35 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_36 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_37 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_38 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_39 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_40 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_41 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_42 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_43 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_44 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_45 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_46 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_47 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_48 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_49 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_50 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_51 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_52 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_53 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_54 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_55 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_56 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_57 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_58 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_59 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_60 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_61 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_62 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_63 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_64 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_65 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_66 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_67 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_68 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_69 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_70 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_71 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_72 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_73 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_74 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_75 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_76 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_77 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_78 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_79 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_80 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_81 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_82 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_83 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_84 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_85 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_86 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_87 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_88 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_89 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_90 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_91 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_92 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_93 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_94 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_95 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_96 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_97 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_98 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_99 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; + +alter table wx_card_info add column coupon_password_id bigint(20) comment '卡密编码'; +alter table wx_card_info add column type int(1) not null default 0 comment '卡类型'; + + diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index b6d526ce1..2f2b664ba 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -1,31 +1,46 @@ package com.iformall.controller; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxCardSpendVo; +import com.iformall.enums.EnumCouponStatus; +import com.iformall.enums.EnumCreditLockedStatus; +import com.iformall.enums.EnumMerchantStatus; import com.iformall.enums.EnumMerchantSubsidySource; +import com.iformall.enums.EnumPayWay; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCardInfoService; import com.iformall.service.WxCardSpendService; +import com.iformall.service.WxCouponOrderService; +import com.iformall.service.WxCouponPasswordService; +import com.iformall.service.WxCouponService; import com.iformall.service.WxMerchantService; import com.iformall.service.WxOrderService; +import com.iformall.utils.Constant; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; - +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.servlet.http.HttpServletRequest; /** * @author Stormeye Wu wuguoqiang@iformall.com */ @RestController -@Api(description = "C端扫B端商户码储值卡支付") +@Api(description = "储值卡支付") @RequestMapping("/api/cardPay") public class WxCardPayController extends BaseController { @@ -39,6 +54,21 @@ public class WxCardPayController extends BaseController { @Autowired WxCardSpendService wxCardSpendService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + WxCardInfoService wxCardInfoService; + + @Autowired + WxCouponOrderService wxCouponOrderService; + + @Autowired + WxCouponPasswordService wxCouponPassword; + + @Autowired + WxCouponService wxCouponService; @ApiOperation("C端扫B端储值卡交易流水(消费记录 + 补贴)列表接口") @GetMapping("list") @@ -76,4 +106,158 @@ public class WxCardPayController extends BaseController { final List> mapList = wxCardSpendService.sumCardSpendForMerchant(wxCardSpend); return new ResultData(mapList); } + + @ApiOperation(value = "微信B端扫C端电子储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"cUserId\":\"String\",\"totalFee\":\"String(元)\"}") + @PostMapping("order_create_ecard") + public ResultData saveECardCardPayOrder(@RequestBody Map paramMap, HttpServletRequest request) { + String cardIdStr = paramMap.get("cardId"); + String cUserIdStr = paramMap.get("cUserId"); + if (StringUtils.isBlank(cUserIdStr) || cUserIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cUserId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); + } + if (StringUtils.isBlank(cardIdStr) || cardIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cardId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); + } + Long cUserId = null; + try { + cUserId = Long.valueOf(cUserIdStr); + } catch (Exception e) { + logger.error("cardId convert failed:" + cardIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); + } + String totalFeeStr = paramMap.get("totalFee"); + WxMerchantBUser merchantBUser = getLoginBUser(); + Long cardId = null; + try { + cardId = Long.valueOf(cardIdStr); + } catch (Exception e) { + logger.error("cardId convert failed:" + cardIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); + } + + WxCardInfo cardInfo = wxCardInfoService.getById(cardId); + if(cardInfo == null) { + logger.error("卡不存在: " + cardIdStr); + return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); + } + + return saveCardPayOrder(cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + } + + private ResultData saveCardPayOrder(Long cUserId,WxCardInfo cardInfo,WxMerchantBUser merchantBUser,String totalFeeStr,EnumPayWay payWay) { + String ipStr = getIpAddr(); + if (Constant.defaultCUserId != cUserId) { + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,merchantBUser.getFinalTenantId()); + if (null != wxCUserBasicInfo && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) { + logger.error(ErrorCode.MEMBER_IS_LOCKED.getMessage()); + return new ResultData(ErrorCode.MEMBER_IS_LOCKED); + } + } + if (StringUtils.isBlank(totalFeeStr) || totalFeeStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("totalFee不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "totalFee不能为空"); + } + + BigDecimal totalFee = new BigDecimal(totalFeeStr); + totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + Integer payment = totalFee.multiply(new BigDecimal(100)).intValue(); + + + Long merchantId = null; + + if(payment > cardInfo.getRemainingAmount()) { + logger.error("卡余额不足: " + cardInfo.getId()); + return new ResultData(ErrorCode.CARD_REMAIN_AMOUNT_IS_NOT_ENOUGH); + } + + //查看所有者与扫码者是否为一致 + WxCouponOrder couponOrder = wxCouponOrderService.getById(cardInfo.getId(),cardInfo.getTenantId()); + if (!couponOrder.getOwnerId().equals(cUserId)) { + logger.error("卡已被领取: " + cardInfo.getId()); + return new ResultData(ErrorCode.CARD_TRANSFERED); + } + + WxCouponMerchant couponMerchant = wxCardSpendService.checkMerchantInCoupon(cardInfo, merchantId); + if(couponMerchant == null) { + logger.error("商户不支持此卡 " + cardInfo.getId()); + return new ResultData(ErrorCode.COUPON_ORDER_MERANT_IS_NULL.getCode(), "商户不支持此卡"); + } + + WxMerchant merchant = wxMerchantService.getById(merchantId); + if (merchant.getStatus() == EnumMerchantStatus.NOT_VALID.getCode()) { + logger.error("商户已禁用, merchantId: " + merchant.getId()); + return new ResultData(ErrorCode.MERCHANT_INFO_NOT_VALID); + } + + WxOrder order = null; + try { + order = wxOrderService.saveCardPayOrder(merchant, cUserId, totalFeeStr, payment,payWay); + } catch (MallinkException e) { + logger.error("saveCardPayOrder 1" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("saveCardPayOrder 2" + e.getMessage()); + return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); + } + + WxCardSpend record = new WxCardSpend(); + record.updateTenantInfo(merchant); + record.setCardId(cardInfo.getId()); + record.setOwnerId(cUserId); + record.setMerchantId(merchantId); + record.setOrderId(order.getId()); + record.setIp(ipStr); + record.setDeductionAmount(payment); + record.setRemark("操作于["+payWay.getMessage()+"("+payWay.getCode()+")]"); + + try { + return wxCardSpendService.createCardSpend(record, order, couponMerchant,payWay); + } catch (MallinkException e) { + logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("card spend error, req 3: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); + } + } + + @ApiOperation(value = "微信B端扫C端实体储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"totalFee\":\"String(元)\"}") + @PostMapping("order_create_card") + public ResultData saveCardPayOrder(@RequestBody Map paramMap, HttpServletRequest request) { + String cardIdStr = paramMap.get("cardId"); + String totalFeeStr = paramMap.get("totalFee"); + if (StringUtils.isBlank(cardIdStr) || cardIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cardId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); + } + Long cardId = null; + try { + cardId = Long.valueOf(cardIdStr); + } catch (Exception e) { + logger.error("cardId convert failed:" + cardIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); + } + + WxMerchantBUser merchantBUser = getLoginBUser(); + + WxCouponPassword couponPassword = wxCouponPassword.getById(cardId); + if (null == couponPassword) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "卡未查询到"); + } + + WxCoupon coupon = wxCouponService.getById(couponPassword.getCouponId(),couponPassword.getTenantId()); + if (coupon == null) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY); + } + if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { + logger.error("此券已作废:" + coupon.getId()); + return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); + } + + WxCardInfo carInfo = wxCardInfoService.cardCreateByOffline(couponPassword, coupon); + return saveCardPayOrder(Constant.defaultCUserId,carInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java index b543d3cde..fd8f5dedc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java @@ -22,7 +22,12 @@ public class WxCardInfo extends TenantEntity { @Excel(name = "卡号", width = 20, orderNum = "1") @io.swagger.annotations.ApiModelProperty(value="主键ID-与coupon_order_id一致",name="id") protected Long id; - + @io.swagger.annotations.ApiModelProperty(value="卡密编码",name="couponPasswordId") + protected Long couponPasswordId; + @TableField(exist = false) + protected Long couponPasswordIdLike; + @io.swagger.annotations.ApiModelProperty(value="卡类型EnumCardInfoType",name="type") + protected Integer type; @io.swagger.annotations.ApiModelProperty(value = "券ID", name = "couponId") private Long couponId; @io.swagger.annotations.ApiModelProperty(value="微信订单号-购买类储值卡时的订单号",name="transactionId") @@ -35,12 +40,10 @@ public class WxCardInfo extends TenantEntity { public String getRemainingAmountStr() { return new BigDecimal(remainingAmount == null ? 0 : remainingAmount).divide(new BigDecimal(100)).toPlainString(); } - @Excel(name = "余额(元)", width = 20, orderNum = "7") @TableField(exist = false) private String remainingAmountStr; - @io.swagger.annotations.ApiModelProperty(value="剩余面额",name="remainingAmount") private Integer remainingAmount; @io.swagger.annotations.ApiModelProperty(value="分账总手续费",name="serviceFeeAmount") @@ -51,24 +54,19 @@ public class WxCardInfo extends TenantEntity { private Integer remainingShareFeeAmount; @io.swagger.annotations.ApiModelProperty(value="分账通道费差(购买时刻的通道费差,分账完结时使用)",name="rateAmount") private Integer rateAmount; - @Excel(name = "购买时间 ", width = 20, orderNum = "10", format = "yyyy-MM-dd HH:mm:ss") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; - @io.swagger.annotations.ApiModelProperty(value = "是否支持转送(0:不支持,1支持)", name = "supportTransfer") private Integer supportTransfer; - @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="查询-开始时间",name="startdate") protected Date startdate; - @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="enddate") protected Date enddate; - @TableField(exist = false) private List couponIdList; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index 36cc5f6c3..10a618c2b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -395,6 +395,9 @@ public class WxCoupon extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "是否删除1是0否", name = "isDel") private Integer isDel; + @io.swagger.annotations.ApiModelProperty(value = "是否后置面额1是0否,EnumYesOrNo", name = "isAfterSetPrice") + private Integer isAfterSetPrice; + @TableField(exist = false) private Long[] merchantIds; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java new file mode 100644 index 000000000..6777b3e28 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCardInfoType { + + ECARD(0, "电子卡"), + CARD(1, "实体卡") + ; + + public static EnumCardInfoType getEnum(Integer code) { + for (EnumCardInfoType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCardInfoType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java index 6b99f6986..867dd7bce 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java @@ -9,8 +9,9 @@ public enum EnumCouponPasswordStatus { INIT(0, "初始"), MSG_SENDING(1, "消息发送中"), MSG_SENDED(2, "消息已发送"), - USED(3, "已使用"), - CANCEL(4, "已作废"); + USED(3, "已兑换"), + CANCEL(4, "已作废"), + PAID(5, "已支付过"),; public static EnumCouponPasswordStatus getEnum(Integer code) { for (EnumCouponPasswordStatus value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java index bf82d42d3..8a8e1230a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java @@ -8,7 +8,7 @@ public enum EnumCouponSendType { // 1:主动领取 2:定向投放 ACTIVE(1,"主动领取"), PASSIVE(2, "定向投放"), - GIFT(3, "礼包券") + GIFT(3, "主券主动领取,子券自动发,如礼包子券") ; public static EnumCouponSendType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java index 64d4a47cc..e7132e3d3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java @@ -42,6 +42,8 @@ public interface WxCouponMapper extends CommonMapper { void deleteById(@Param("id")Long id,@Param("tenantId")String tenantId); + Integer setPrice(@Param("id")Long id,@Param("tenantId")String tenantId,@Param("price")Integer price); + Integer reduceInventory(@Param("id")Long id,@Param("tenantId")String tenantId,@Param("number")Integer number); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java index 711e4be3f..7d8a25677 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java @@ -2,6 +2,8 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCardInfo; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.vo.WxCardVo; import javax.servlet.http.HttpServletRequest; @@ -33,6 +35,8 @@ public interface WxCardInfoService { * @param record */ void saveOrUpdate(WxCardInfo record); + + WxCardInfo cardCreateByOffline(WxCouponPassword couponPassword,WxCoupon coupon); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index 9d689beb9..54c3aa80c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -93,6 +93,8 @@ public interface WxCouponService { * @param record */ ResultData saveOrUpdate(WxCoupon record); + + ResultData setPrice(WxCoupon record); ResultData updateTtProduct(WxCoupon wxCoupon); /** diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java index a1100fc7a..60220c96e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -4,17 +4,29 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.WxCardInfo; +import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.vo.WxCardVo; +import com.iformall.enums.EnumCardInfoType; +import com.iformall.enums.EnumCouponPasswordStatus; +import com.iformall.enums.EnumCouponPasswordSupport; import com.iformall.mapper.WxCardInfoMapper; import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxCouponPasswordMapper; import com.iformall.service.ExcelService; import com.iformall.service.WxCardInfoService; +import com.iformall.utils.RedisLock; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.util.Date; import java.util.List; @Service @@ -28,6 +40,12 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Autowired WxCouponChannelMapper wxCouponChannelMapper; + + @Autowired + RedisLock redisLock; + + @Autowired + WxCouponPasswordMapper couponPasswordMapper; @Override public PageInfo listAsPage(WxCardVo record, Integer pageIndex, Integer pageSize) { @@ -80,4 +98,44 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { } } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public WxCardInfo cardCreateByOffline(WxCouponPassword couponPassword,WxCoupon coupon) { + //如果没有卡,则直接创建一个 + WxCardInfo cardInfo = this.getById(couponPassword.getId()); + if (null == cardInfo) { + long time = System.currentTimeMillis() + RedisLock.TIMEOUT; + String timeStr = String.valueOf(time); + boolean stocksetlock = redisLock.lock("cardInfoLockSet_"+couponPassword.getId(), timeStr); + if (stocksetlock) { + cardInfo = new WxCardInfo(); + cardInfo.setId(couponPassword.getId()); + cardInfo.updateTenantInfo(couponPassword); + cardInfo.setCouponId(couponPassword.getCouponId()); + cardInfo.setAmount(coupon.getPrice()); + cardInfo.setSaleAmount(coupon.getSalePrice()); + cardInfo.setCouponPasswordId(couponPassword.getId()); + cardInfo.setRemainingAmount(coupon.getPrice()); + cardInfo.setShareFeeAmount(0); + cardInfo.setRemainingShareFeeAmount(0); + cardInfo.setRateAmount(0); + cardInfo.setType(EnumCardInfoType.CARD.getCode()); + if (coupon.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) { + WxCouponPassword updateCPwd = new WxCouponPassword(); + updateCPwd.setId(couponPassword.getId()); + updateCPwd.setCardId(cardInfo.getId()); + updateCPwd.setStatus(EnumCouponPasswordStatus.USED.getCode()); + couponPasswordMapper.updateById(updateCPwd); + } + cardInfo.setServiceFeeAmount(0); + cardInfo.setCreateDate(new Date()); + cardInfo.setUpdateDate(new Date()); + cardInfo.setSupportTransfer(coupon.getSupportTransfer()); + wxCardInfoMapper.insert(cardInfo); + } + redisLock.unlock("cardInfoLockSet_"+couponPassword.getId(), timeStr); + } + return cardInfo; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index 66794bf33..943addd3a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -16,6 +16,7 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; +import com.iformall.utils.Constant; import com.iformall.utils.PayUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -304,37 +305,38 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } // } - // 成长值 - try { - orderUpdate.setPayment(real_payment); - wxScoreRulesService.addScore2(coupon,EnumScoreType.CONSUMPTION, orderUpdate, coupon.getBusiness()); - } catch (Exception e) { - logger.error("成长值:" + e.getMessage()); + if (null != orderUpdate.getCUserId() && Constant.defaultCUserId != orderUpdate.getCUserId()) { + // 成长值 + try { + orderUpdate.setPayment(real_payment); + wxScoreRulesService.addScore2(coupon,EnumScoreType.CONSUMPTION, orderUpdate, coupon.getBusiness()); + } catch (Exception e) { + logger.error("成长值:" + e.getMessage()); + } + + // 积分 + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); + creditHistory.setOperatorId(record.getOwnerId()); + creditHistory.setCUserId(record.getOwnerId()); + creditHistory.setCreateDate(new Date()); + // creditHistory.updateTenantInfo(record); + creditHistory.setTenantId(record.getFinalTenantId()); + creditHistory.setFinalTenantId(record.getFinalTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setBusinessId(coupon.getBusiness()); + creditHistory.setSpend(real_payment); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(record.getMerchantId()); + WxMerchant wxMerchant = wxMerchantMapper.selectById(record.getMerchantId()); + creditHistory.setChangePurpose("卡消费:消费商户["+wxMerchant.getName()+"] 金额["+creditHistory.getSpendStr()+"元]"); + wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } } - - // 积分 - try { - //-------此处为【现金支付】记录增加积分操作------- - WxCreditHistory creditHistory = new WxCreditHistory(); - creditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); - creditHistory.setOperatorId(record.getOwnerId()); - creditHistory.setCUserId(record.getOwnerId()); - creditHistory.setCreateDate(new Date()); -// creditHistory.updateTenantInfo(record); - creditHistory.setTenantId(record.getFinalTenantId()); - creditHistory.setFinalTenantId(record.getFinalTenantId()); - creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); - creditHistory.setBusinessId(coupon.getBusiness()); - creditHistory.setSpend(real_payment); - //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 - creditHistory.setMerchantId(record.getMerchantId()); - WxMerchant wxMerchant = wxMerchantMapper.selectById(record.getMerchantId()); - creditHistory.setChangePurpose("卡消费:消费商户["+wxMerchant.getName()+"] 金额["+creditHistory.getSpendStr()+"元]"); - wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); - } catch (Exception e) { - logger.error("积分值:" + e.getMessage()); - } - return new ResultData(record); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index 963fbcc50..404e415cb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -496,16 +496,20 @@ public class WxCouponServiceImpl implements WxCouponService { record.setSubsidyNum(0); } if (EnumCouponSubsidyType.WECHAT_COUPON.getCode().equals(record.getSubsidyType())) { - // 微信 立减 - if (record.getSubsidyNum() > record.getSalePrice()) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); - } + if (EnumYesOrNo.YES.getCode() != record.getIsAfterSetPrice()) { + // 微信 立减 + if (record.getSubsidyNum() > record.getSalePrice()) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); + } + } } else if (EnumCouponSubsidyType.OFFLINE_SUBSIDY.getCode().equals(record.getSubsidyType())) { - // 线下补贴 - int subsidy_num = record.getPrice() - record.getSalePrice(); - if (record.getSubsidyNum() > subsidy_num) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); - } + if (EnumYesOrNo.YES.getCode() != record.getIsAfterSetPrice()) { + // 线下补贴 + int subsidy_num = record.getPrice() - record.getSalePrice(); + if (record.getSubsidyNum() > subsidy_num) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); + } + } } else if (EnumCouponSubsidyType.WECHAT_MCHPAY.getCode().equals(record.getSubsidyType())) { // TODO 微信转账到银行卡 @@ -1011,6 +1015,20 @@ public class WxCouponServiceImpl implements WxCouponService { return false; } + @Override + @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData setPrice(WxCoupon record) { + Integer count = wxCouponMapper.setPrice(record.getId(), record.getTenantId(), record.getPrice()); + if (null == count || count <= 0 ) { + return new ResultData(Result.ERROR,"设置失败"); + } + //TODO 设置卡密金额 + return new ResultData(); + } + + + + @Override public ResultData updateTtProduct(WxCoupon record) { if(EnumCouponType.getDouYinType().contains(record.getType())){ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 70cce4adf..bc3bcea27 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1455,6 +1455,7 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setCouponId(order.getProductId()); cardInfo.setAmount(coupon.getPrice()); cardInfo.setSaleAmount(coupon.getSalePrice()); + cardInfo.setCouponPasswordId(couponPasswordId); cardInfo.setRemainingAmount(coupon.getPrice()); if (!coupon.checkIsFree()) { //判断该transctionId是否已经存在,如果存在,则不添加 diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index bec407ae7..354969f6c 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -116,7 +116,11 @@ public class Constant { public static final Integer wiwideOldPlat = 0;//老平台 public static final Integer wiwideNewPlat = 1;//新平台 + //收款账号参数配置项key public static final String paymentReceicerParamApiKey = "apiKey"; public static final String paymentReceiverParamIsv = "isvModel"; + + //默认c端虚拟会员编号 + public static final Long defaultCUserId = 111111111111111111L; } diff --git a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml index d869ab7de..d77dff2a2 100644 --- a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml @@ -17,11 +17,11 @@ - + - `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`transaction_id`, + `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`coupon_password_id`,`transaction_id`, `amount`,`sale_amount`,`remaining_amount`,`service_fee_amount`, `share_fee_amount`,`remaining_share_fee_amount`, `rate_amount`, `create_date`,`update_date`,`support_transfer` @@ -71,6 +71,12 @@ and `update_date` = #{updateDate} + + and `coupon_password_id` = #{couponPasswordId} + + + and `coupon_password_id` like concat('%',#{couponPasswordIdLike},'%') + and `create_date` between #{startdate} and #{enddate} diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index 85ae02484..cf1ce0c5d 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -61,6 +61,7 @@ + @@ -126,7 +127,7 @@ c.`id`,c.`tenant_id`,c.`parent_tenant_id`,c.`make_merchant_id`,c.`brand`,c.`type`,c.`cover_img`,c.`cover_picture`,c.`detail_picture`, c.`title`,c.`sub_title`,c.`item_group`,c.`sale_price`,c.`freight_price`,c.`use_price`,c.`use_limit_rule`,c.`use_limit_quantity`,c.`send_type`, c.`valid_type`,c.`valid_start_date`,c.`valid_end_date`,c.pick_start_date,c.pick_end_date,c.`valid_days`,c.`detail`,c.`price`,c.tail_price,c.orig_price,c.`unit`,c.`remain_inventory`,c.`inventory`, - c.`remark`,c.`status`,c.`create_date`,c.`update_date`,c.`business`,c.`sub_business`,c.`support_transfer`,c.`subsidy_num`,c.`subsidy_type`, + c.`remark`,c.`status`,c.`create_date`,c.`update_date`,c.`business`,c.`sub_business`,c.`support_transfer`,c.`subsidy_num`,c.`subsidy_type`,c.`is_after_set_price`, c.`press_limit_num`, c.`press_limit_hours`, c.`auto_refund`,c.`credit_price`,c.`credit_refund`,c.`put_apply_status`,c.`stock_apply_status`,c.`cancle_apply_status`, c.`conditions`,c.approval_type,c.content_type,c.source_type,c.merchant_type,c.password_support,c.gift_list,c.product_type,c.category_id,c.goods_id @@ -322,6 +323,10 @@ and JSON_CONTAINS(gift_list,json_array(#{giftList})) + + + and `is_after_set_price` = #{isAfterSetPrice} + and id in @@ -379,7 +384,7 @@ select c.id,c.type,c.cover_img,c.title,c.sub_title,c.item_group,c.sale_price,c.use_price,c.price,c.tail_price,c.orig_price,c.unit,c.detail,c.remark,c.valid_type,c.valid_start_date, - c.valid_end_date,c.pick_start_date,c.pick_end_date,c.auto_refund,c.business,c.subsidy_type,c.source_type,c.merchant_type,c.content_type,c.gift_list,c.support_transfer,c.subsidy_num - from wx_coupon c where c.id = #{id} and c.`tenant_id` = #{tenantId} + c.valid_end_date,c.pick_start_date,c.pick_end_date,c.auto_refund,c.business,c.subsidy_type,c.source_type,c.merchant_type,c.content_type,c.gift_list,c.support_transfer,c.subsidy_num, + c.is_after_set_price from wx_coupon c where c.id = #{id} and c.`tenant_id` = #{tenantId} @@ -413,7 +418,7 @@ @@ -661,6 +666,10 @@ and cc.status = 0 and cc.target_ad = #{targetAd}) + + + and c.`is_after_set_price` = #{isAfterSetPrice} + and c.id in @@ -1514,5 +1523,9 @@ update wx_coupon set make_merchant_id = #{makeMerchantId} where id = #{id} and tenant_id = #{tenantId} + + + update wx_coupon set price = #{price} where id = #{id} and tenant_id = #{tenantId} and price = 0 + From be8938e6ade545291d1055e48d9af9891c28b76e Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 16 Feb 2023 19:27:34 +0800 Subject: [PATCH 48/90] fix card --- mallinkService/src/main/resources/mapper/WxCouponMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index cf1ce0c5d..31b85e9e8 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -1524,7 +1524,7 @@ update wx_coupon set make_merchant_id = #{makeMerchantId} where id = #{id} and tenant_id = #{tenantId} - + update wx_coupon set price = #{price} where id = #{id} and tenant_id = #{tenantId} and price = 0 From 47a06d4c51a5e0397afe0b2fb0fa965a1aed009f Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 12:14:49 +0800 Subject: [PATCH 49/90] fix car pay --- .../park/impl/fute/FuteParkService.java | 59 +++++++++++++++---- .../service/park/impl/fute/FuteUtil.java | 23 ++++++++ 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java index 88e40070e..0b5d94eac 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java @@ -128,19 +128,56 @@ public class FuteParkService extends BaseParkService implements ParkAdapterServi if (null == valueMap) { return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置。"+coupon.getTitle()); } - //String orderNo = paramMap.get("parkOrderId"); - String couponNo = valueMap.get("couponNo"); - if (StringUtils.isBlank(couponNo)) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[couponNo]。"+coupon.getTitle()); + String reduceType = valueMap.get("reduceType"); + if (StringUtils.isBlank(reduceType)) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券未设置停车场优惠券配置参数[减免类型]。"+coupon.getTitle()); } - String ret = fute.useCoupon(park, couponNo, carNumber); - //打折登陆验证 - logger.info("fute useCoupon result:"+ret); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("state") == 1){ - return new ResultData(); + if ((!"1".equals(reduceType)) && (!"2".equals(reduceType))) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券设置停车场优惠券配置参数[减免类型]值非法。"+coupon.getTitle()); + } + String reduceValueStr = valueMap.get("reduceValue"); + if (StringUtils.isBlank(reduceValueStr)) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券未设置停车场优惠券配置参数[减免数值]。"+coupon.getTitle()); + } + Integer reduceValue = 0; + try { + reduceValue = Integer.parseInt(reduceValueStr); + }catch(Exception e) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券设置停车场优惠券配置参数[减免数值]值非法。"+coupon.getTitle()); + } + boolean isTimeCash = false; + if ("1".equals(reduceType)) { + isTimeCash = true; + } + String createRet = fute.createCoupon(park, carNumber, isTimeCash, reduceValue); + logger.info("fute createCoupon result:"+createRet); + JSONObject createRetObj = JSON.parseObject(createRet); + if (createRetObj.getIntValue("state") == 1){ + String codeUrl = createRetObj.getString("code_url"); + if (StringUtils.isBlank(codeUrl)) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前用户使用福特优惠券失败。福特返回二维码URL为空"); + } + String couponNO = codeUrl.substring(codeUrl.lastIndexOf("/")+1); + if (couponNO.contains("?")) { + couponNO = couponNO.substring(0,couponNO.indexOf("?")); + } + if (StringUtils.isBlank(couponNO)) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前用户使用福特优惠券失败。福特返回二维码URL非法"); + } + + String ret = fute.useCoupon(park, couponNO, carNumber); + //打折登陆验证 + logger.info("fute useCoupon result:"+ret); + JSONObject retObj = JSON.parseObject(ret); + if (retObj.getIntValue("state") == 1){ + return new ResultData(); + }else { + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前用户使用福特优惠券失败。"+retObj.getString("errmsg")); + } + + }else { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前用户使用福特优惠券失败。"+retObj.getString("errmsg")); + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前用户使用福特优惠券失败。"+createRetObj.getString("errmsg")); } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index 5ba9eb200..5b22e356d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -52,6 +52,7 @@ import java.util.TimeZone; public class FuteUtil { public static final String QUERY_PRICE = "http://s1.appykt.com/zld/parkapi/query_price"; + public static final String COUPON_CREATE = "http://s1.appykt.com/zld/createTicketByApi"; public static final String COUPON_USE = "http://s1.appykt.com/zld/useTicket"; public static final String NOTIFY_PAID = "http://s1.appykt.com/zld/parkapi/pay_notify"; @@ -83,6 +84,28 @@ public class FuteUtil { return ProcBussiness(QUERY_PRICE, param,vp.getString("signkey")); } + /** + * 创建优惠券 + */ + public String createCoupon(WxPark wxPark,String carNumber,boolean isTimeCash,Integer cashValue) { + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + Map param = new HashMap(); + param.put("loginuin", vp.getString("loginuin"));//商家账号 + param.put("md5pass", vp.getString("md5pass"));//商家登录密码进行MD5 加密 + param.put("codeType", 0);//0:动态码 1:固定码 + param.put("ticketCount", 1); + if (isTimeCash) { + param.put("type", 3); + }else { + param.put("type", 5); + } + param.put("reduce", cashValue); + param.put("parkid", wxPark.getParkingId()); + log.info("fute createCoupon :" + JSON.toJSONString(param)); + return ProcBussiness(COUPON_CREATE, param, vp.getString("signkey")); + } + /** * 使用优惠券 **/ From d4d02502dc30f3e24afd5efb5850e702b9073362 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 12:31:54 +0800 Subject: [PATCH 50/90] fix car pay --- .../java/com/iformall/service/park/impl/fute/FuteUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index 5b22e356d..dc8d6d8ac 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -93,8 +93,8 @@ public class FuteUtil { Map param = new HashMap(); param.put("loginuin", vp.getString("loginuin"));//商家账号 param.put("md5pass", vp.getString("md5pass"));//商家登录密码进行MD5 加密 - param.put("codeType", 0);//0:动态码 1:固定码 - param.put("ticketCount", 1); + //param.put("codeType", 0);//0:动态码 1:固定码 + //param.put("ticketCount", 1); if (isTimeCash) { param.put("type", 3); }else { From 0c0035b8391c113b64b8d912321fae81bd64bd4f Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 14:01:25 +0800 Subject: [PATCH 51/90] fix car pay --- .../main/java/com/iformall/service/park/impl/fute/FuteUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index dc8d6d8ac..ecba67765 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -101,6 +101,7 @@ public class FuteUtil { param.put("type", 5); } param.put("reduce", cashValue); + param.put("remark", "0"); param.put("parkid", wxPark.getParkingId()); log.info("fute createCoupon :" + JSON.toJSONString(param)); return ProcBussiness(COUPON_CREATE, param, vp.getString("signkey")); From b6c4e056405011b087f4a42176f58d86b878ba87 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 14:11:03 +0800 Subject: [PATCH 52/90] fix car pay --- .../main/java/com/iformall/service/park/impl/fute/FuteUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index ecba67765..7b3653fdd 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -92,7 +92,7 @@ public class FuteUtil { JSONObject vp = JSON.parseObject(vendroParams); Map param = new HashMap(); param.put("loginuin", vp.getString("loginuin"));//商家账号 - param.put("md5pass", vp.getString("md5pass"));//商家登录密码进行MD5 加密 + param.put("md5pass", MD5(vp.getString("password")));//商家登录密码进行MD5 加密 //param.put("codeType", 0);//0:动态码 1:固定码 //param.put("ticketCount", 1); if (isTimeCash) { From 362c5981f4baa2239ed38834d374842d053a6c0b Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 15:30:28 +0800 Subject: [PATCH 53/90] fix car pay --- .../impl/fute/FuteParkCallbackService.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java index e4cd2ada1..159352c9f 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkCallbackService.java @@ -40,7 +40,10 @@ public class FuteParkCallbackService extends BaseParkService implements ParkCall /** - * {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0} + * {card_number=, user_name=, park_id=1101780001, sign=001b2dbfa21089a14274c4d3e330cd82, in_channel_id=营销中心入口, + * remark=正常入场, in_channel=2f48a7a9-1be5-406c-b078-51d3506adab2, park_flag=1, area_id=90221771-fe94-4cfd-80d7-c14e7c97e775, + * empty_plot=3490, user_no=, car_type=36, uid=001, in_time=1676563040, car_number=湘A87M0K, c_type=通道扫牌, in_optname=监控室, + * order_id=46eea0c8-8a0b-4583-9273-f9843a42ddec, in_image=} */ @Override public ParkNotifyParam parseInNoticyParam(Object param) { @@ -50,7 +53,7 @@ public class FuteParkCallbackService extends BaseParkService implements ParkCall String parkName = ""; String synId = paramMap.get("order_id").toString(); - Long inTime = (Long)paramMap.get("in_time"); + Integer inTime = (Integer)paramMap.get("in_time"); ParkNotifyParam p = new ParkNotifyParam(); p.setCarNumber(carNumber); @@ -58,7 +61,7 @@ public class FuteParkCallbackService extends BaseParkService implements ParkCall p.setParkName(parkName); p.setSynId(synId); try { - p.setEntranceTime(new Date(inTime)); + p.setEntranceTime(new Date(inTime.longValue()*1000)); } catch (Exception e) { log.error("fute entranceTime format error",e); return null; @@ -66,6 +69,14 @@ public class FuteParkCallbackService extends BaseParkService implements ParkCall return p; } + /** + * {out_channel=08497aa1-bc39-4223-9659-83fba2680082, sign=37316011fd7f4997f0937ae839246968, remark=正常出场, + * in_channel=cdb95bb9-b43e-4a4c-83cc-99d0e5e1f7d4, empty_plot=19, car_type=36, duration=99, uid=001, total=0.0000, + * freereasons=, out_image=, out_optname=监控室, pay_type=cash, in_optcode=001, reduce_amount=0.0000, out_time=1676562822, + * card_number=, park_id=1101780001, in_channel_id=南门入口相机, auth_code=, in_time=1676556899, ouid=001, out_type=通道扫牌, + * car_number=湘A67H9R, out_order_id=03d6973e-0276-4264-bd0a-5aee59e6cf98, c_type=通道扫牌, pay_channel=0, + * amount_receivable=0.0000, in_optname=监控室, out_channel_id=南门出口直行相机, order_id=03d6973e-0276-4264-bd0a-5aee59e6cf98} + */ @Override public ParkNotifyParam parseOutNoticyParam(Object param) { Map paramMap = (Map) param; @@ -74,8 +85,8 @@ public class FuteParkCallbackService extends BaseParkService implements ParkCall String parkName = ""; String synId = paramMap.get("order_id").toString(); - Long inTime = (Long)paramMap.get("in_time"); - Long outTime = (Long)paramMap.get("out_time"); + Integer inTime = (Integer)paramMap.get("in_time"); + Integer outTime = (Integer)paramMap.get("out_time"); ParkNotifyParam p = new ParkNotifyParam(); p.setCarNumber(carNumber); @@ -83,13 +94,13 @@ public class FuteParkCallbackService extends BaseParkService implements ParkCall p.setParkName(parkName); p.setSynId(synId); try { - p.setEntranceTime(new Date(inTime)); + p.setEntranceTime(new Date(inTime.longValue()*1000)); } catch (Exception e) { log.error("fute entranceTime format error",e); return null; } try { - p.setOutTime(new Date(outTime)); + p.setOutTime(new Date(outTime.longValue()*1000)); } catch (Exception e) { log.error("fute outTime format error",e); return null; From 10e9dfd3c0895fc40890439a78212d80f50e0751 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 16:27:01 +0800 Subject: [PATCH 54/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 1fe437192..80e6d24c4 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -1,5 +1,6 @@ package com.iformall.controller; +import com.alibaba.fastjson.JSON; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; @@ -431,6 +432,7 @@ public class WxCarController extends BaseController { @ApiOperation(value = "停车费创建支付订单", notes = "{\"carNumber\":\"鄂AAAAAA\",\"carFee\":\"100\"}") @PostMapping("/createPayOrder") public ResultData createPayOrder(@RequestBody Map paramMap) { + logger.info("car createPayOrder "+JSON.toJSONString(paramMap)); WxPark park = getCurrentPark(getTenantInfo()); if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { return null; From 8196def7524931baf6b0ec31a007c54ddb7c3c57 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 16:32:54 +0800 Subject: [PATCH 55/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 80e6d24c4..669ea1e4b 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -463,6 +463,7 @@ public class WxCarController extends BaseController { String carFeeStr = paramMap.get("carFee"); Integer carFee = Integer.parseInt(carFeeStr); if (payOrder.getFee() != carFee) { + logger.info(">>> payOrder "+JSON.toJSONString(payOrder) +" >>> feeparam "+carFee); return new ResultData(Result.ERROR,"停车费已发生变更,请下拉刷新."); } //查询当前停车商户的收款账号 From 39c3492626631d44cd3efdfa02789c3ff88d4b4a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 16:51:09 +0800 Subject: [PATCH 56/90] fix car pay --- .../main/java/com/iformall/controller/WxCarController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 669ea1e4b..c31233a75 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -432,7 +432,6 @@ public class WxCarController extends BaseController { @ApiOperation(value = "停车费创建支付订单", notes = "{\"carNumber\":\"鄂AAAAAA\",\"carFee\":\"100\"}") @PostMapping("/createPayOrder") public ResultData createPayOrder(@RequestBody Map paramMap) { - logger.info("car createPayOrder "+JSON.toJSONString(paramMap)); WxPark park = getCurrentPark(getTenantInfo()); if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { return null; @@ -462,8 +461,7 @@ public class WxCarController extends BaseController { } String carFeeStr = paramMap.get("carFee"); Integer carFee = Integer.parseInt(carFeeStr); - if (payOrder.getFee() != carFee) { - logger.info(">>> payOrder "+JSON.toJSONString(payOrder) +" >>> feeparam "+carFee); + if (payOrder.getFee().intValue() != carFee.intValue()) { return new ResultData(Result.ERROR,"停车费已发生变更,请下拉刷新."); } //查询当前停车商户的收款账号 From bf338e266ac8079306d8d9e977a3cc23aeac1f82 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 17:07:56 +0800 Subject: [PATCH 57/90] fix car pay --- .../java/com/iformall/controller/WxCarController.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index c31233a75..3711b60fd 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -2,6 +2,7 @@ package com.iformall.controller; import com.alibaba.fastjson.JSON; import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; @@ -452,8 +453,9 @@ public class WxCarController extends BaseController { //创建车场支付订单 ParkCreatePayOrder payOrder = parkFactory.getParkService(park.getVendorType()).createPayOrder(paramMap, park,carNumber); EnumCarVendor carVendor = EnumCarVendor.getEnum(park.getVendorType()); - String uniquePayOrderNo = ParkCreatePayOrder.getUniqueParkOrderNumber(payOrder.getParkOrderNumber(), carVendor); - if (null == payOrder || StringUtils.isBlank(uniquePayOrderNo)) { + //微信订单号最大32位,有的车场传过来的超过长度 + //String uniquePayOrderNo = ParkCreatePayOrder.getUniqueParkOrderNumber(payOrder.getParkOrderNumber(), carVendor); + if (null == payOrder || StringUtils.isBlank(payOrder.getParkOrderNumber())) { return new ResultData(Result.ERROR,"创建车场订单错误."); } if (payOrder.getFee() <= 0 ) { @@ -500,8 +502,10 @@ public class WxCarController extends BaseController { if (EnumYesOrNo.YES.getCode() == isvModel) { isIsv = true; } + final IdWorker idWorker = IdWorker.get(); + String uniquePayOrderNo = carVendor.getMessage()+"_"+idWorker.nextId(); String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付,车场订单号"+payOrder.getParkOrderNumber(), attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); } catch (Exception e) { From 32a57e140d8dbf464d3fda08c37b4ec0d2ff76cc Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 18:14:28 +0800 Subject: [PATCH 58/90] fix car pay --- .../iformall/controller/WxCarController.java | 24 ++++++++------ ...ideNotifyCarPaidSuccessMsgServiceImpl.java | 2 +- .../service/park/pay/WxParkPayService.java | 4 +-- .../park/pay/WxParkPayServiceImpl.java | 31 +++++++------------ 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 3711b60fd..cca03860c 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -21,6 +21,8 @@ import com.iformall.service.park.impl.util.ParkHelper; import com.iformall.service.park.pay.WxParkPayService; import com.iformall.service.park.utils.ParkCacheUtils; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; +import com.iformall.utils.AesUtil; +import com.iformall.utils.Base64Util; import com.iformall.utils.Constant; import io.swagger.annotations.Api; @@ -484,17 +486,20 @@ public class WxCarController extends BaseController { return new ResultData(Result.ERROR,"商管商户未设置收款账号."); } } - + String receiverAccount = receiver.getReceiverAccount(); + int rlength = receiverAccount.length(); + //最大128 StringBuffer attachSb = new StringBuffer("{") - .append("\"t\":\"").append(park.getTenantId()).append("\",\"pt\":\"").append(park.getParentTenantId()).append("\"") - .append(",\"v\":").append(park.getVendorType()) - .append(",\"u\":").append(user.getUserId()) + .append("\"u\":").append(user.getUserId()) .append(",\"uh\":\"").append(user.getPhone()).append("\"") .append(",\"car:\":\"").append(carNumber).append("\"") - .append(",\"fee\":").append(payOrder.getFee()) - .append(",\"ma\":\"").append(receiver.getReceiverAccount()).append("\"") - .append(",\"mid\":").append(parkMerchant.getId()) - .append(",\"mn\":\"").append(parkMerchant.getName()).append("\"") + .append(",\"fee\":").append(payOrder.getFee()); + if (rlength > 4) { + attachSb.append(",\"ma\":\"").append(receiverAccount.substring(rlength-4,rlength)).append("\""); + }else { + attachSb.append(",\"ma\":\"").append(receiverAccount).append("\""); + } + attachSb.append(",\"mid\":").append(parkMerchant.getId()) .append("}"); //创建微信支付订单 boolean isIsv = false; @@ -505,7 +510,8 @@ public class WxCarController extends BaseController { final IdWorker idWorker = IdWorker.get(); String uniquePayOrderNo = carVendor.getMessage()+"_"+idWorker.nextId(); String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付,车场订单号"+payOrder.getParkOrderNumber(), attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), + String attach = attachSb.toString(); + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付,车场订单号"+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); } catch (Exception e) { diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java index 9f8dd0b03..e8b7e4a46 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideNotifyCarPaidSuccessMsgServiceImpl.java @@ -33,6 +33,6 @@ public class FmInsideNotifyCarPaidSuccessMsgServiceImpl implements MsgSendServic public void send(BaseMsg baseMsg) throws Exception { FmInsideNotifyCarPaidSuccessMsg msg = (FmInsideNotifyCarPaidSuccessMsg)baseMsg; Map paramMap = JSON.parseObject(msg.getJsonMsg(), Map.class); - wxParkPayService.handlePaidCallBack(paramMap); + wxParkPayService.handlePaidCallBack(msg.getTenantId(),paramMap); } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index f9fba60a5..f2e9ab892 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -24,9 +24,9 @@ public interface WxParkPayService { public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; - public String handlePaidCallBack(Map paramMap); + public String handlePaidCallBack(String tenantId,Map paramMap); - public void handlePaidSuccess(TenantEntity tenantEntity,WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String payOrderNo, + public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String payOrderNo, Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName,String userPhone) throws Exception; public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index 89eadfaf4..cb0cb96c2 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -36,6 +36,7 @@ import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; +import com.iformall.utils.Base64Util; import com.iformall.utils.CipherUtil; import com.iformall.utils.DateUtils; import com.iformall.utils.RedisLock; @@ -147,7 +148,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { } @Override - public String handlePaidCallBack(Map paramMap) { + public String handlePaidCallBack(String tenantId,Map paramMap) { //支付返回消息 String returnCode = paramMap.get("return_code"); if ("SUCCESS".equals(returnCode)) { @@ -161,28 +162,20 @@ public class WxParkPayServiceImpl implements WxParkPayService { String payOrderNo = paramMap.get("out_trade_no"); String time_end = paramMap.get("time_end"); String transcationId = paramMap.get("transaction_id"); - String attach = paramMap.get("attach"); JSONObject attachObj = JSON.parseObject(attach); - String tenantId = attachObj.getString("t"); - String parentTenantId = attachObj.getString("pt"); - TenantEntity te = new TenantEntity(); - te.setTenantId(tenantId); - te.setParentTenantId(parentTenantId); - - WxPark park = getCurrentPark(te); - - Integer carVendor = attachObj.getInteger("v"); + TenantEntity teq = new TenantEntity(); + teq.setTenantId(tenantId); + WxPark wxPark = getCurrentPark(teq); + Integer carVendor = wxPark.getVendorType(); Long cUserId = attachObj.getLong("u"); String carNumber = attachObj.getString("car"); String merchantAccount = attachObj.getString("ma"); Long merchantId = attachObj.getLong("mid"); - String merchantName = attachObj.getString("mn"); String userPhone = attachObj.getString("uh"); - - handlePaidSuccess(te,park,cUserId,carVendor,carNumber,payOrderNo,Integer.parseInt(cashFeeStr), + handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,payOrderNo,Integer.parseInt(cashFeeStr), DateUtils.string2Date(time_end, DateUtils.DATE_PATTERN_ALL_NOSPACE).getTime(),transcationId, - merchantAccount,merchantId,merchantName,userPhone); + merchantAccount,merchantId,"停车商户",userPhone); } catch (Exception e) { logger.error("handlePaidCallBackError.",e); return notifyErrorResult(e.getMessage()); @@ -200,11 +193,11 @@ public class WxParkPayServiceImpl implements WxParkPayService { } @Override - public void handlePaidSuccess(TenantEntity tenantEntity,WxPark wxPark,Long cUserId,Integer carVendor,String carNumber, + public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber, String payOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, Long merchantId,String merchantName,String userPhone) throws Exception{ //查询该笔订单是否已经存在 - WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(payOrderNo, tenantEntity.getTenantId()); + WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(payOrderNo, wxPark.getTenantId()); String parkOrderNo = ParkCreatePayOrder.getRealParkOrderNumber(payOrderNo,EnumCarVendor.getEnum(carVendor)); if (null == payOrder) { //此处需要加锁,防止并发设置 @@ -218,7 +211,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder = new WxCarPayOrder(); Long id = idworker.nextId(); payOrder.setId(id); - payOrder.updateTenantInfo(tenantEntity); + payOrder.updateTenantInfo(wxPark); payOrder.setCreateTime(new Date()); payOrder.setUpdateTime(new Date()); payOrder.setcUserId(cUserId); @@ -235,7 +228,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { wxCarPayOrderMapper.insert(payOrder); //通知车场支付成功 try { - parkFactory.getParkService(carVendor).notifyPaid(wxPark,new ParkNotifyPaid(tenantEntity.getTenantId(),payOrderNo,parkOrderNo,fee,paidTime)); + parkFactory.getParkService(carVendor).notifyPaid(wxPark,new ParkNotifyPaid(wxPark.getTenantId(),payOrderNo,parkOrderNo,fee,paidTime)); payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); payOrder.setUpdateTime(new Date()); wxCarPayOrderMapper.updateById(payOrder); From b8600ecbe692fc8655038f33d13fdb9c5f75e0d6 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 18:25:48 +0800 Subject: [PATCH 59/90] fix car pay --- .../main/java/com/iformall/controller/WxCarController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index cca03860c..ec79a752e 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -12,6 +12,7 @@ import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayV3; import com.iformall.service.*; import com.iformall.service.park.ParkFactory; import com.iformall.service.park.entity.ParkCreatePayOrder; @@ -511,7 +512,8 @@ public class WxCarController extends BaseController { String uniquePayOrderNo = carVendor.getMessage()+"_"+idWorker.nextId(); String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); String attach = attachSb.toString(); - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付,车场订单号"+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), + String productPre = new String("停车费支付,车场订单号".getBytes("ISO-8859-1"), "UTF-8"); + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); } catch (Exception e) { From 3a8b660cc5cc630ccb4c340bb4cb28ef27c4c38f Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 18:34:40 +0800 Subject: [PATCH 60/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index ec79a752e..0f4cdbc43 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -512,7 +512,8 @@ public class WxCarController extends BaseController { String uniquePayOrderNo = carVendor.getMessage()+"_"+idWorker.nextId(); String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); String attach = attachSb.toString(); - String productPre = new String("停车费支付,车场订单号".getBytes("ISO-8859-1"), "UTF-8"); + //String productPre = new String("停车费支付,车场订单号".getBytes("ISO-8859-1"), "UTF-8");//中文签名错误 + String productPre = "ParkOrderId"; PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); From 3fa24f63c71c747e78e9e9a8b583c53bd8f6562d Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 19:05:19 +0800 Subject: [PATCH 61/90] fix car pay --- .../main/java/com/iformall/controller/WxCarController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 0f4cdbc43..5b589b8ea 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -493,7 +493,7 @@ public class WxCarController extends BaseController { StringBuffer attachSb = new StringBuffer("{") .append("\"u\":").append(user.getUserId()) .append(",\"uh\":\"").append(user.getPhone()).append("\"") - .append(",\"car:\":\"").append(carNumber).append("\"") + .append(",\"car:\":\"").append("aaaaaa").append("\"") .append(",\"fee\":").append(payOrder.getFee()); if (rlength > 4) { attachSb.append(",\"ma\":\"").append(receiverAccount.substring(rlength-4,rlength)).append("\""); @@ -524,6 +524,10 @@ public class WxCarController extends BaseController { } } + private String handleChinese(String content) { + + } + /** * 停车费支付订单列表 * From 22d666061f56224f0ff28a376f42ac19ab2cec69 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 19:15:25 +0800 Subject: [PATCH 62/90] fix car pay --- .../java/com/iformall/controller/WxCarController.java | 10 +++------- .../src/main/java/com/iformall/pay/WxPayment.java | 7 ++++++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 5b589b8ea..9eb8be67e 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -493,7 +493,7 @@ public class WxCarController extends BaseController { StringBuffer attachSb = new StringBuffer("{") .append("\"u\":").append(user.getUserId()) .append(",\"uh\":\"").append(user.getPhone()).append("\"") - .append(",\"car:\":\"").append("aaaaaa").append("\"") + .append(",\"car:\":\"").append(carNumber).append("\"") .append(",\"fee\":").append(payOrder.getFee()); if (rlength > 4) { attachSb.append(",\"ma\":\"").append(receiverAccount.substring(rlength-4,rlength)).append("\""); @@ -512,8 +512,8 @@ public class WxCarController extends BaseController { String uniquePayOrderNo = carVendor.getMessage()+"_"+idWorker.nextId(); String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); String attach = attachSb.toString(); - //String productPre = new String("停车费支付,车场订单号".getBytes("ISO-8859-1"), "UTF-8");//中文签名错误 - String productPre = "ParkOrderId"; + String productPre = "停车费支付,车场订单号";//中文签名错误 + //String productPre = "ParkOrderId"; PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); @@ -524,10 +524,6 @@ public class WxCarController extends BaseController { } } - private String handleChinese(String content) { - - } - /** * 停车费支付订单列表 * diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java index f8931e90b..24ff79b91 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java @@ -500,7 +500,12 @@ public class WxPayment { xml.append(""); } xml.append(""); - return xml.toString(); + try { + return new String(xml.toString().getBytes("utf-8"),"IOS8859-1"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return null; + } } /** From a0e809d966a713e2f344c746c2c67383b47598a7 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 19:27:25 +0800 Subject: [PATCH 63/90] fix car pay --- .../pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index e91d9096f..e5dcb0ba9 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -279,6 +279,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null); + log.info(">>>>> payorder >>>>"+wxPayOrderP.toString() ); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); From 846e9208c37cbba34d3eea7398da88682ba9d5ae Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 17 Feb 2023 19:30:32 +0800 Subject: [PATCH 64/90] //merchant --- .../com/iformall/aop/RedisCacheAspect.java | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java b/mallinkCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java index f001c7912..1d54339c8 100644 --- a/mallinkCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java +++ b/mallinkCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java @@ -7,6 +7,7 @@ import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.base.BaseCUserEntity; import com.iformall.exception.MallinkException; +import com.iformall.interceptor.BodyReaderHttpServletRequestWrapper; import com.iformall.service.CUserTokenService; import com.iformall.utils.HashUtil; import com.iformall.utils.RedisLock; @@ -72,15 +73,33 @@ public class RedisCacheAspect { //throw new MallinkException(ErrorCode.NET_TOKEN_EMPTY.getCode(),"token为空["+token+"]"); } log.info("token>>>>>>>>>>>>>>>"+token); - String tenantId; - BaseCUserEntity cUser = null ; - if(StringUtils.isNotBlank(token)) { - cUser = cUserTokenService.getByToken(token); + + //集团版中针对某一商场的业务需要传递mallTenantId + String mallTenantId = request.getHeader("mallTenantId"); + if(StringUtils.isBlank(mallTenantId)){ + mallTenantId = request.getParameter("mallTenantId"); } - if (Objects.isNull(cUser) || cUser.getExpireTime().getTime() < System.currentTimeMillis()) { - tenantId = "0"; - } else { - tenantId = cUser.getTenantId(); + if(StringUtils.isBlank(mallTenantId)){ + try{ + String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); + mallTenantId = JSONObject.parseObject(body).getString("mallTenantId"); + }catch(Exception e){} + } + + String tenantId = null; + + if(StringUtils.isNotBlank(mallTenantId)){ + tenantId = mallTenantId; + } + if(StringUtils.isBlank(tenantId)){ + if(StringUtils.isNotBlank(token)) { + BaseCUserEntity cUser = cUserTokenService.getByToken(token); + if (Objects.isNull(cUser) || cUser.getExpireTime().getTime() < System.currentTimeMillis()) { + tenantId = "0"; + } else { + tenantId = cUser.getTenantId(); + } + } } // 请求参数 From eab2ec7dcc7f2af0d18f94408d228862e5966196 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 20:32:11 +0800 Subject: [PATCH 65/90] fix car pay --- mallinkService/src/main/java/com/iformall/pay/WxPayment.java | 2 +- .../pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java index 24ff79b91..538e5d726 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java @@ -501,7 +501,7 @@ public class WxPayment { } xml.append(""); try { - return new String(xml.toString().getBytes("utf-8"),"IOS8859-1"); + return new String(xml.toString().getBytes("utf-8"),"ISO-8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index e5dcb0ba9..e91d9096f 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -279,7 +279,6 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null); - log.info(">>>>> payorder >>>>"+wxPayOrderP.toString() ); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); From 66a7e1b3918c48785e3c87d052059d2ccc847b25 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 20:48:20 +0800 Subject: [PATCH 66/90] fix car pay --- .../src/main/java/com/iformall/pay/WxPay.java | 7 +++++++ .../main/java/com/iformall/pay/WxPayment.java | 16 ++++++++++++++-- .../appPay/WxMiniAppPayAdapterService.java | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPay.java b/mallinkService/src/main/java/com/iformall/pay/WxPay.java index d95755537..ac2f5f991 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPay.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPay.java @@ -80,6 +80,9 @@ public class WxPay { public static String pushOrder(Map params) { return doPost(UNIFIEDORDER_URL, params); } + public static String pushOrderWithChines(Map params) { + return doPostWithChinese(UNIFIEDORDER_URL, params); + } /** * 订单查询 @@ -333,6 +336,10 @@ public class WxPay { public static String doPost(String url, Map params) { return HttpUtil.payPost(url, WxPayment.toXml(params)); } + + public static String doPostWithChinese(String url, Map params) { + return HttpUtil.payPost(url, WxPayment.toXmlWhitChinese(params)); + } public static String doPostSSL(String url, Map params, String certPath, String certPass) { return HttpUtil.payPostSSL(url, WxPayment.toXml(params), certPath, certPass); diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java index 538e5d726..d7ff0f61c 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java @@ -486,7 +486,7 @@ public class WxPayment { * 参数 * @return String */ - public static String toXml(Map params) { + private static String toXmlContent(Map params,boolean containChinese) { StringBuilder xml = new StringBuilder(); xml.append(""); for (Entry entry : params.entrySet()) { @@ -501,12 +501,24 @@ public class WxPayment { } xml.append(""); try { - return new String(xml.toString().getBytes("utf-8"),"ISO-8859-1"); + if (containChinese) { + return new String(xml.toString().getBytes("utf-8"),"ISO-8859-1"); + }else { + return xml.toString(); + } } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } } + + public static String toXml(Map params) { + return toXmlContent(params,false); + } + + public static String toXmlWhitChinese(Map params) { + return toXmlContent(params,true); + } /** * 针对支付的xml,没有嵌套节点的简单处理 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index e91d9096f..69c655ac7 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -279,7 +279,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null); - String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); + String response = WxPay.pushOrderWithChines(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey,null); @@ -288,7 +288,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem public PayAdapterResult payIsv(WxPayAccount payAccount,WxAppinfo appInfo,String subMchId,String openId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,Date currentDate,boolean share) throws Exception { String apiKey = payAccount.getApiKey(); WxPayOrderSP wxPayOrderP = generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appInfo.getAppId(),subMchId,productName,attach,payOrderNo,fee,ip,notifyUrl,null,currentDate,share,apiKey); - String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); + String response = WxPay.pushOrderWithChines(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); return getOrderSPResult(returnMap,null,appInfo.getAppId(),wxPayOrderP.getNonce_str(),apiKey); From 3ad7ed96eba7e2a222affcbfecd010e86800a650 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 21:24:12 +0800 Subject: [PATCH 67/90] fix car pay --- .../src/main/java/com/iformall/pay/WxPay.java | 7 ------- .../src/main/java/com/iformall/pay/WxPayment.java | 11 +---------- .../v2/miniApp/appPay/WxMiniAppPayAdapterService.java | 5 +++-- 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPay.java b/mallinkService/src/main/java/com/iformall/pay/WxPay.java index ac2f5f991..d95755537 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPay.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPay.java @@ -80,9 +80,6 @@ public class WxPay { public static String pushOrder(Map params) { return doPost(UNIFIEDORDER_URL, params); } - public static String pushOrderWithChines(Map params) { - return doPostWithChinese(UNIFIEDORDER_URL, params); - } /** * 订单查询 @@ -336,10 +333,6 @@ public class WxPay { public static String doPost(String url, Map params) { return HttpUtil.payPost(url, WxPayment.toXml(params)); } - - public static String doPostWithChinese(String url, Map params) { - return HttpUtil.payPost(url, WxPayment.toXmlWhitChinese(params)); - } public static String doPostSSL(String url, Map params, String certPath, String certPass) { return HttpUtil.payPostSSL(url, WxPayment.toXml(params), certPath, certPass); diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java index d7ff0f61c..d6115fa9e 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java @@ -500,16 +500,7 @@ public class WxPayment { xml.append(""); } xml.append(""); - try { - if (containChinese) { - return new String(xml.toString().getBytes("utf-8"),"ISO-8859-1"); - }else { - return xml.toString(); - } - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return null; - } + return xml.toString(); } public static String toXml(Map params) { diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index 69c655ac7..783739f21 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -177,6 +177,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem wxPayOrderSP.setProfit_sharing("N"); } Map payOrderMap = BeanUtils.toStringMap(wxPayOrderSP); + log.info(">>>>> isv apikey"+apiKey+ "payOrderMap" + JSON.toJSONString(payOrderMap)); wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, apiKey)); return wxPayOrderSP; } @@ -279,7 +280,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null); - String response = WxPay.pushOrderWithChines(BeanUtils.toStringMap(wxPayOrderP)); + String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey,null); @@ -288,7 +289,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem public PayAdapterResult payIsv(WxPayAccount payAccount,WxAppinfo appInfo,String subMchId,String openId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,Date currentDate,boolean share) throws Exception { String apiKey = payAccount.getApiKey(); WxPayOrderSP wxPayOrderP = generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appInfo.getAppId(),subMchId,productName,attach,payOrderNo,fee,ip,notifyUrl,null,currentDate,share,apiKey); - String response = WxPay.pushOrderWithChines(BeanUtils.toStringMap(wxPayOrderP)); + String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); return getOrderSPResult(returnMap,null,appInfo.getAppId(),wxPayOrderP.getNonce_str(),apiKey); From f4f21fded03e2f95a657f87f4cfc32b9af992456 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 21:43:23 +0800 Subject: [PATCH 68/90] fix car pay --- .../wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index 783739f21..cd183120b 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -75,7 +75,9 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem wxPayOrderP.setGoods_tag(productName); wxPayOrderP.setNotify_url(notifyUrl); wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderP.setProduct_id(productId); + if (null != productId) { + wxPayOrderP.setProduct_id(productId); + } wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); @@ -165,7 +167,9 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem wxPayOrderSP.setGoods_tag(productName); // 券ID wxPayOrderSP.setNotify_url(notifyUrl); wxPayOrderSP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderSP.setProduct_id(productId); // + if (null != productId) { + wxPayOrderSP.setProduct_id(productId); // + } wxPayOrderSP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); @@ -177,7 +181,6 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem wxPayOrderSP.setProfit_sharing("N"); } Map payOrderMap = BeanUtils.toStringMap(wxPayOrderSP); - log.info(">>>>> isv apikey"+apiKey+ "payOrderMap" + JSON.toJSONString(payOrderMap)); wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, apiKey)); return wxPayOrderSP; } From 8a62700b2532b494649d053d4711c1403bfb8092 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 22:09:39 +0800 Subject: [PATCH 69/90] fix car pay --- .../com/iformall/controller/basic/WxMerchantController.java | 3 ++- .../main/java/com/iformall/controller/WxCarController.java | 2 ++ .../com/iformall/service/impl/WxMerchantServiceImpl.java | 6 +----- .../wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 7c7b7096e..152bd7714 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -285,7 +285,8 @@ public class WxMerchantController extends BaseController { @ApiOperation("(微信)商户手填收款账号") @PostMapping("setMerchantAccount") public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { - if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || null == wxMerchant.getIsIsv()) { + if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) + || null == wxMerchant.getIsIsv() || null == wxMerchant.getApiKey()) { return new ResultData(ResultData.ERROR,"参数缺失"); } wxMerchant.updateTenantInfo(getTenantInfo()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 9eb8be67e..7cdde826c 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -516,6 +516,8 @@ public class WxCarController extends BaseController { //String productPre = "ParkOrderId"; PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); + logger.info(">>>>> wxResult "+ JSON.toJSONString(wxResult)); + return new ResultData(wxResult); } catch (Exception e) { logger.error("park createPayOrder error",e); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 9343db555..a47638cfe 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -946,11 +946,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setPlat(EnumAppPlat.WX.getCode()); } StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); - if (EnumYesOrNo.YES.getCode() == wxMerchant.getIsIsv()) { - psb.append("}"); - }else { - psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); - } + psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); receiver.setReceiverAccount(wxMerchant.getAccount()); receiver.setReceiverParams(psb.toString()); wxProfitPaymentReceiverService.saveOrUpdate(receiver); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index cd183120b..5b8adb61a 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -112,7 +112,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem // update payOrder with prepay_id record.setPrepayId(prepay_id); record.setUpdateTime(new Date()); - record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + //record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); } String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); From 238fea5fbffd20ad25296d1d86fa62f9e0ffd03d Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 22:29:52 +0800 Subject: [PATCH 70/90] fix car pay --- .../java/com/iformall/controller/WxCarController.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 7cdde826c..a4cdc09b2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -493,8 +493,7 @@ public class WxCarController extends BaseController { StringBuffer attachSb = new StringBuffer("{") .append("\"u\":").append(user.getUserId()) .append(",\"uh\":\"").append(user.getPhone()).append("\"") - .append(",\"car:\":\"").append(carNumber).append("\"") - .append(",\"fee\":").append(payOrder.getFee()); + .append(",\"car:\":\"").append(carNumber).append("\""); if (rlength > 4) { attachSb.append(",\"ma\":\"").append(receiverAccount.substring(rlength-4,rlength)).append("\""); }else { @@ -516,9 +515,11 @@ public class WxCarController extends BaseController { //String productPre = "ParkOrderId"; PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); - logger.info(">>>>> wxResult "+ JSON.toJSONString(wxResult)); - - return new ResultData(wxResult); + if (wxResult.isSuccess()) { + return new ResultData(wxResult); + }else { + return new ResultData(Result.ERROR,wxResult.getMsg()); + } } catch (Exception e) { logger.error("park createPayOrder error",e); return new ResultData(Result.ERROR,e.getMessage()); From 393ef7388b53ae41a3be1a9618e4a9da529f8619 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 17 Feb 2023 22:42:02 +0800 Subject: [PATCH 71/90] fix car pay --- .../com/iformall/service/impl/WxMerchantServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index a47638cfe..9bb7d2e4e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -946,7 +946,11 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setPlat(EnumAppPlat.WX.getCode()); } StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); - psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); + if (EnumYesOrNo.YES.getCode().intValue()== wxMerchant.getIsIsv().intValue()) { + psb.append("}"); + }else { + psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); + } receiver.setReceiverAccount(wxMerchant.getAccount()); receiver.setReceiverParams(psb.toString()); wxProfitPaymentReceiverService.saveOrUpdate(receiver); From 24109b6325da1cd1250d872f6e607f5dbc9035a3 Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 11:59:22 +0800 Subject: [PATCH 72/90] fix car pay --- .../java/com/iformall/config/ShiroConfig.java | 1 + .../car/pay/WxCarPaidCallBackController.java | 29 ------------------- 2 files changed, 1 insertion(+), 29 deletions(-) diff --git a/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java index 789c83120..f44e37547 100644 --- a/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java +++ b/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java @@ -122,6 +122,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/cyfCarCallback/**", "anon"); filterChainDefinitionMap.put("/hkwsCarCallback/**", "anon"); filterChainDefinitionMap.put("/futeCarCallback/**", "anon"); + filterChainDefinitionMap.put("/carPaidCallback/**", "anon"); // static files filterChainDefinitionMap.put("/css/**", "anon"); diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java index fc58e5de1..b85fa4d0a 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java @@ -143,33 +143,4 @@ public class WxCarPaidCallBackController extends WxParkCallBackBaseController { return XmlUtil.getRequestXml(resultMap); } } - - - /** - * @description 车易付 车辆离场通知 - * @Params [param] - * @return java.util.Map - * @Author furunxin - * @Date 2020/7/12 上午9:00 - **/ - @PostMapping(value = "/parkOut") - public Result parkOutCallback(@RequestBody Map paramMap) { - log.info("["+getIpAddr()+"] jieshunCarCallback parkOut: " + paramMap.toString()); - return super.parkOutCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PARK_OUT, paramMap); - - } - - @PostMapping(value = "/unbind") - public Result unbindCallback(@RequestBody Map paramMap) { - log.info("["+getIpAddr()+"] jieshunCarCallback unbind: " + paramMap.toString()); - //解析车易付参数 - return super.unbindCarCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_UNBIND, paramMap); - } - - @PostMapping(value = "/paid") - public Result paidCallback(@RequestBody Map paramMap) { - log.info("["+getIpAddr()+"] jieshunCarCallback paid: " + paramMap.toString()); - //解析车易付参数 - return super.paidCallback(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PAID, paramMap); - } } From 03016cd6fd791ad21e5cc9ea839fb9b5d9858d37 Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 17:56:58 +0800 Subject: [PATCH 73/90] fix car pay --- .../callback/car/fute/WxCarFuteCallBackController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java index 562b93676..f0f7f5c7b 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java @@ -38,7 +38,7 @@ import java.util.Map; @Slf4j @RestController -@RequestMapping("/futeCarCallback") +@RequestMapping("/futeCarCallback1") public class WxCarFuteCallBackController extends WxParkCallBackBaseController { @Autowired From 6667ee9ee0793fbd8d33720f8132e237bd1b9547 Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 18:37:13 +0800 Subject: [PATCH 74/90] fix car pay bug --- .../src/main/resources/db/migration/V20230200001__car.sql | 2 +- .../callback/car/fute/WxCarFuteCallBackController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index f3ed15ddc..7e122aead 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -12,7 +12,7 @@ CREATE TABLE `wx_car_pay_order` ( `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', `park_order_no` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', - `merchant_id` int(20) NOT NULL COMMENT '商户编号', + `merchant_id` bigint(20) NOT NULL COMMENT '商户编号', `merchant_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商户名称', `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java index f0f7f5c7b..562b93676 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/fute/WxCarFuteCallBackController.java @@ -38,7 +38,7 @@ import java.util.Map; @Slf4j @RestController -@RequestMapping("/futeCarCallback1") +@RequestMapping("/futeCarCallback") public class WxCarFuteCallBackController extends WxParkCallBackBaseController { @Autowired From eb7a0bd868cd5557ea3b21da4239a7aebf3a5074 Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 22:36:50 +0800 Subject: [PATCH 75/90] fix car pay --- .../db/migration/V20230200001__car.sql | 2 - .../iformall/controller/WxCarController.java | 17 +++-- .../com/iformall/domain/po/WxCarPayOrder.java | 6 -- .../service/park/ParkAdapterService.java | 3 +- .../service/park/entity/ParkNotifyPaid.java | 2 - .../park/entity/ParkPaidNotifyResult.java | 23 ++++++ .../park/impl/bolink/BoLinkParkService.java | 4 +- .../service/park/impl/cyf/CYFParkService.java | 4 +- .../park/impl/dahua/DaHuaParkService.java | 4 +- .../park/impl/fute/FuteParkService.java | 9 ++- .../HaiKangWeiShiParkService.java | 4 +- .../park/impl/jieshun/JieShunParkService.java | 4 +- .../park/impl/shangan/ShangAnParkService.java | 4 +- .../service/park/impl/tjd/TJDParkService.java | 4 +- .../service/park/pay/WxParkPayService.java | 4 +- .../park/pay/WxParkPayServiceImpl.java | 72 ++++++++++++------- .../resources/mapper/WxCarPayOrderMapper.xml | 12 +--- 17 files changed, 112 insertions(+), 66 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/park/entity/ParkPaidNotifyResult.java diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 7e122aead..99f940011 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -12,8 +12,6 @@ CREATE TABLE `wx_car_pay_order` ( `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', `park_order_no` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', - `merchant_id` bigint(20) NOT NULL COMMENT '商户编号', - `merchant_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商户名称', `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', `notify_count` int(3) NOT NULL DEFAULT '0' COMMENT '通知次数', diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a4cdc09b2..0e136f38a 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -489,18 +489,17 @@ public class WxCarController extends BaseController { } String receiverAccount = receiver.getReceiverAccount(); int rlength = receiverAccount.length(); - //最大128 - StringBuffer attachSb = new StringBuffer("{") - .append("\"u\":").append(user.getUserId()) - .append(",\"uh\":\"").append(user.getPhone()).append("\"") - .append(",\"car:\":\"").append(carNumber).append("\""); + //最大128 cuserId,cuserPhone,carNumber,merchantId,merchantAccount,parkOrderNo + StringBuffer attachSb = new StringBuffer() + .append(user.getUserId()).append(",") + .append(user.getPhone()).append(",") + .append(carNumber).append(","); if (rlength > 4) { - attachSb.append(",\"ma\":\"").append(receiverAccount.substring(rlength-4,rlength)).append("\""); + attachSb.append(receiverAccount.substring(rlength-4,rlength)).append(","); }else { - attachSb.append(",\"ma\":\"").append(receiverAccount).append("\""); + attachSb.append(receiverAccount).append(","); } - attachSb.append(",\"mid\":").append(parkMerchant.getId()) - .append("}"); + attachSb.append(payOrder.getParkOrderNumber()); //创建微信支付订单 boolean isIsv = false; Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index c5543857d..4cd2101fa 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -63,12 +63,6 @@ public class WxCarPayOrder extends TenantEntity { @Excel(name = "商户收款账户", width = 20, orderNum = "10") @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") private String merchantAccount; - @Excel(name = "商户编号", width = 20, orderNum = "11") - @io.swagger.annotations.ApiModelProperty(value="商户编号",name="merchantId") - private Long merchantId; - @Excel(name = "商户名称", width = 20, orderNum = "12") - @io.swagger.annotations.ApiModelProperty(value="商户名称",name="merchantName") - private String merchantName; @Excel(name = "是否已通知车场", width = 20, replace = {"已通知成功_1"}, orderNum = "13") @io.swagger.annotations.ApiModelProperty(value="是否已通知车场EnumYesOrNo",name="parkNotify") private Integer parkNotify; diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java index 42f96ebf4..34fb9721f 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java @@ -9,6 +9,7 @@ import com.iformall.domain.po.WxPark; import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; /** @@ -62,7 +63,7 @@ public interface ParkAdapterService { /** * 停车订单成功通知车场 */ - void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception; + ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception; /** * 查询停车场状态, 给老的集成用 diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java index 529a73a51..5fa5bc5cf 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyPaid.java @@ -19,8 +19,6 @@ public class ParkNotifyPaid implements Serializable{ /*停车场返回的订单ID**/ private String tenantId; - /*订单编号**/ - private String payOrderNo; /*停车场订单编号**/ private String parkOrderNo; /*支付金额**/ diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkPaidNotifyResult.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkPaidNotifyResult.java new file mode 100644 index 000000000..60365bae3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkPaidNotifyResult.java @@ -0,0 +1,23 @@ +package com.iformall.service.park.entity; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class ParkPaidNotifyResult implements Serializable{ + + private static final long serialVersionUID = 6478840764729191197L; + + private boolean isSuccess; + private Object result; + private String errorMsg; +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java index a96ac72bb..60a35a35d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java @@ -18,6 +18,7 @@ import com.iformall.enums.EnumCouponUnit; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; @@ -122,8 +123,9 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java index 1d7cbf140..ed88e1099 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java @@ -25,6 +25,7 @@ import com.iformall.exception.MallinkException; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -205,7 +206,8 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java index 7baa0808c..761c5dc6d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java @@ -17,6 +17,7 @@ import com.iformall.exception.MallinkException; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; @@ -88,7 +89,8 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java index 0b5d94eac..264ce9007 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java @@ -33,6 +33,7 @@ import com.iformall.service.WxParkService; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -198,8 +199,12 @@ public class FuteParkService extends BaseParkService implements ParkAdapterServi } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { - fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + String result = fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); + if (StringUtils.isBlank(result)) { + return null; + } + return new ParkPaidNotifyResult(true, result, null); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index 05e2678cc..a0b19d69b 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -33,6 +33,7 @@ import com.iformall.service.WxParkService; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -240,7 +241,8 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java index c92c2e7a5..f8239e792 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java @@ -32,6 +32,7 @@ import com.iformall.service.WxParkService; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -349,7 +350,8 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java index ca1ae806e..89249aa68 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java @@ -21,6 +21,7 @@ import com.iformall.service.WxCouponService; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; @@ -107,6 +108,7 @@ public class ShangAnParkService extends BaseParkService implements ParkAdapterSe } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java index adeb81114..343450f12 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java @@ -32,6 +32,7 @@ import com.iformall.service.WxScoreRulesService; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; @@ -268,6 +269,7 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic } @Override - public void notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + return null; } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index f2e9ab892..d87e63f99 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -26,8 +26,8 @@ public interface WxParkPayService { public String handlePaidCallBack(String tenantId,Map paramMap); - public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String payOrderNo, - Integer fee,Date paidTime,String transcationId,String merchantAccount,Long merchantId,String merchantName,String userPhone) throws Exception; + public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String parkOrderNo, + Integer fee,Date paidTime,String transcationId,String merchantAccount,String userPhone) throws Exception; public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index cb0cb96c2..e3731f24d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -33,6 +33,7 @@ import com.iformall.service.WxPayAccountService; import com.iformall.service.park.ParkFactory; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; +import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; @@ -159,23 +160,34 @@ public class WxParkPayServiceImpl implements WxParkPayService { Integer cashFee = Integer.parseInt(cashFeeStr); if (cashFee > 0 ) { try { - String payOrderNo = paramMap.get("out_trade_no"); + //String payOrderNo = paramMap.get("out_trade_no"); String time_end = paramMap.get("time_end"); String transcationId = paramMap.get("transaction_id"); - String attach = paramMap.get("attach"); - JSONObject attachObj = JSON.parseObject(attach); + TenantEntity teq = new TenantEntity(); teq.setTenantId(tenantId); WxPark wxPark = getCurrentPark(teq); - Integer carVendor = wxPark.getVendorType(); - Long cUserId = attachObj.getLong("u"); - String carNumber = attachObj.getString("car"); - String merchantAccount = attachObj.getString("ma"); - Long merchantId = attachObj.getLong("mid"); - String userPhone = attachObj.getString("uh"); - handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,payOrderNo,Integer.parseInt(cashFeeStr), + Integer carVendor = wxPark.getVendorType(); + + String attach = paramMap.get("attach"); + Long cUserId = null; + String userPhone = null; + String carNumber = null; + String merchantAccount = null; + String parkOrderNo = null; + if (!StringUtils.isBlank(attach)) { + String[] attrs = attach.split(","); + if (attrs.length == 5) { + cUserId = Long.parseLong(attrs[0]); + userPhone = attrs[1]; + carNumber = attrs[2]; + merchantAccount = attrs[3]; + parkOrderNo = attrs[4]; + } + } + handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr), DateUtils.string2Date(time_end, DateUtils.DATE_PATTERN_ALL_NOSPACE).getTime(),transcationId, - merchantAccount,merchantId,"停车商户",userPhone); + merchantAccount,userPhone); } catch (Exception e) { logger.error("handlePaidCallBackError.",e); return notifyErrorResult(e.getMessage()); @@ -194,16 +206,16 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Override public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber, - String payOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, - Long merchantId,String merchantName,String userPhone) throws Exception{ + String parkOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, + String userPhone) throws Exception{ //查询该笔订单是否已经存在 - WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(payOrderNo, wxPark.getTenantId()); - String parkOrderNo = ParkCreatePayOrder.getRealParkOrderNumber(payOrderNo,EnumCarVendor.getEnum(carVendor)); + WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(parkOrderNo, wxPark.getTenantId()); + //String parkOrderNo = ParkCreatePayOrder.getRealParkOrderNumber(payOrderNo,EnumCarVendor.getEnum(carVendor)); if (null == payOrder) { //此处需要加锁,防止并发设置 long time = System.currentTimeMillis() + RedisLock.TIMEOUT; String timeStr = String.valueOf(time); - boolean stocksetlock = redisLock.lock("carPayOrderLock_"+payOrderNo, timeStr); + boolean stocksetlock = redisLock.lock("carPayOrderLock_"+parkOrderNo, timeStr); if (stocksetlock) { try { //创建停车支付订单记录 @@ -221,17 +233,29 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.setTransactionId(transcationId); payOrder.setParkOrderNo(parkOrderNo); payOrder.setMerchantAccount(merchantAccount); - payOrder.setMerchantId(merchantId); - payOrder.setMerchantName(merchantName); payOrder.setCarVendor(carVendor); payOrder.setcUserPhone(userPhone); wxCarPayOrderMapper.insert(payOrder); //通知车场支付成功 try { - parkFactory.getParkService(carVendor).notifyPaid(wxPark,new ParkNotifyPaid(wxPark.getTenantId(),payOrderNo,parkOrderNo,fee,paidTime)); - payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); - payOrder.setUpdateTime(new Date()); - wxCarPayOrderMapper.updateById(payOrder); + ParkPaidNotifyResult notifyResult = parkFactory.getParkService(carVendor).notifyPaid(wxPark,new ParkNotifyPaid(wxPark.getTenantId(),parkOrderNo,fee,paidTime)); + if (null != notifyResult) { + if (notifyResult.isSuccess()) { + payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); + payOrder.setUpdateTime(new Date()); + wxCarPayOrderMapper.updateById(payOrder); + }else { + payOrder.setParkNotify(EnumYesOrNo.NO.getCode()); + payOrder.setNotifyFailReason(notifyResult.getErrorMsg()); + payOrder.setUpdateTime(new Date()); + wxCarPayOrderMapper.updateById(payOrder); + } + }else { + payOrder.setParkNotify(EnumYesOrNo.NO.getCode()); + payOrder.setNotifyFailReason("车厂同步接口请求未返回结果"); + payOrder.setUpdateTime(new Date()); + wxCarPayOrderMapper.updateById(payOrder); + } }catch(Exception e) { payOrder.setParkNotify(EnumYesOrNo.NO.getCode()); payOrder.setNotifyFailReason(e.getMessage()); @@ -240,9 +264,9 @@ public class WxParkPayServiceImpl implements WxParkPayService { } }catch(Exception e) { logger.error("handlePaidSuccess fail.",e); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"支付同步失败"+payOrderNo); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"支付同步失败"+parkOrderNo); }finally { - redisLock.unlock("carPayOrderLock_"+payOrderNo, timeStr); + redisLock.unlock("carPayOrderLock_"+parkOrderNo, timeStr); } } } diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml index 2d0faf7f9..b80c694ef 100644 --- a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -15,8 +15,6 @@ - - @@ -25,7 +23,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`c_user_phone`,`car_number`,`pay_amount`, - `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`merchant_id`,`merchant_name`,`park_notify`, + `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`park_notify`, `notify_fail_reason`,`notify_count`,`car_vendor` @@ -76,14 +74,6 @@ and `merchant_account` like concat('%', #{merchantAccount},'%') - - and `merchant_id` = #{merchantId} - - - - and `merchant_name` like concat('%', #{merchantName},'%') - - and `c_user_phone` like concat('%', #{cUserPhone},'%') From 6fc0a9a1bb213a830ee75ebb0e4526bd9ffd9520 Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 22:38:29 +0800 Subject: [PATCH 76/90] fix car pay --- .../src/main/java/com/iformall/domain/po/WxCarPayOrder.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 4cd2101fa..5f5e29cda 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -82,4 +82,9 @@ public class WxCarPayOrder extends TenantEntity { private Date begin; @TableField(exist = false) private Date end; + + @TableField(exist = false) + private Long merchantId = 111111111L; + @TableField(exist = false) + private String merchantName = "停车商户"; } From 5731a3ecba9daae1f92a8acbcc9686b4c38698bc Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 22:43:21 +0800 Subject: [PATCH 77/90] fix car pay --- .../main/java/com/iformall/schedule/CarPaidNotifySchedule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java index 0c41c63a6..f0c0dabf7 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CarPaidNotifySchedule.java @@ -87,7 +87,7 @@ public class CarPaidNotifySchedule { //通知车场支付成功 try { String payOrderNo = ParkCreatePayOrder.getUniqueParkOrderNumber(_po.getParkOrderNo(), EnumCarVendor.getEnum(_po.getCarVendor())); - parkFactory.getParkService(_po.getCarVendor()).notifyPaid(wxPark,new ParkNotifyPaid(_po.getTenantId(),payOrderNo,_po.getParkOrderNo(), _po.getPayAmount(), _po.getPayTime())); + parkFactory.getParkService(_po.getCarVendor()).notifyPaid(wxPark,new ParkNotifyPaid(_po.getTenantId(),_po.getParkOrderNo(), _po.getPayAmount(), _po.getPayTime())); payOrder.setParkNotify(EnumYesOrNo.YES.getCode()); payOrder.setUpdateTime(new Date()); payOrder.setNotifyCount(payOrder.getNotifyCount()+1); From 610eb0d6cc8fcdcd2a314b8b44c46cebacde075e Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 23:22:02 +0800 Subject: [PATCH 78/90] fix car pay --- mallinkService/src/main/java/com/iformall/pay/WxPayOrderP.java | 1 + mallinkService/src/main/java/com/iformall/pay/WxPayOrderSP.java | 1 + 2 files changed, 2 insertions(+) diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayOrderP.java b/mallinkService/src/main/java/com/iformall/pay/WxPayOrderP.java index 7a64b1a8a..366950995 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayOrderP.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayOrderP.java @@ -32,6 +32,7 @@ public class WxPayOrderP { sb.append(", mch_id='").append(mch_id).append('\''); sb.append(", nonce_str='").append(nonce_str).append('\''); sb.append(", sign='").append(sign).append('\''); + sb.append(", attach='").append(attach).append('\''); sb.append(", body='").append(body).append('\''); sb.append(", out_trade_no='").append(out_trade_no).append('\''); sb.append(", total_fee=").append(total_fee); diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayOrderSP.java b/mallinkService/src/main/java/com/iformall/pay/WxPayOrderSP.java index ad057a5ad..3779fb1b9 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayOrderSP.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayOrderSP.java @@ -38,6 +38,7 @@ public class WxPayOrderSP { sb.append(", sub_mch_id='").append(sub_mch_id).append('\''); sb.append(", nonce_str='").append(nonce_str).append('\''); sb.append(", sign='").append(sign).append('\''); + sb.append(", attach='").append(attach).append('\''); sb.append(", body='").append(body).append('\''); sb.append(", out_trade_no='").append(out_trade_no).append('\''); sb.append(", total_fee=").append(total_fee); From c6b5b2b77fb90407cbba43fe8774e89232611c27 Mon Sep 17 00:00:00 2001 From: winter Date: Sat, 18 Feb 2023 23:51:16 +0800 Subject: [PATCH 79/90] fix car pay --- .../callback/car/pay/WxCarPaidCallBackController.java | 8 ++++---- .../iformall/service/park/impl/fute/FuteParkService.java | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java index b85fa4d0a..163b12fdc 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java @@ -121,22 +121,22 @@ public class WxCarPaidCallBackController extends WxParkCallBackBaseController { // response = wxRefundOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); - logger.info("refund wxpay, notify success, req : " + xml + ", resp: " + response.toString()); + logger.info("carPaid wxpay, notify success, req : " + xml + ", resp: " + response.toString()); return response; } catch (BizMessageException e) { - logger.error("refund wxpay, notify error, req: " + xml + ", e:" + e.getLocalizedMessage()); + logger.error("carPaid wxpay, notify error, req: " + xml + ", e:" + e.getLocalizedMessage()); SortedMap resultMap = new TreeMap(); resultMap.put("return_code", "FAIL"); resultMap.put("return_msg", e.getMessage()); return XmlUtil.getRequestXml(resultMap); } catch (MallinkException e) { - logger.error("refund wxpay, notify error, req: " + xml + ", e:" +e.getLocalizedMessage()); + logger.error("carPaid wxpay, notify error, req: " + xml + ", e:" +e.getLocalizedMessage()); SortedMap resultMap = new TreeMap(); resultMap.put("return_code", "FAIL"); resultMap.put("return_msg", e.getMessage()); return XmlUtil.getRequestXml(resultMap); } catch (Exception e) { - logger.error("refund wxpay, order create error, req: " + xml + ", e: " + e.getMessage()); + logger.error("carPaid wxpay, notify error, req: " + xml + ", e: " + e.getMessage()); SortedMap resultMap = new TreeMap(); resultMap.put("return_code", "FAIL"); resultMap.put("return_msg", e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java index 264ce9007..5675d24e3 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java @@ -200,6 +200,7 @@ public class FuteParkService extends BaseParkService implements ParkAdapterServi @Override public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { + logger.info(">>>>> fute notifyPaid"); String result = fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); if (StringUtils.isBlank(result)) { return null; From 6ce3248751a1c90879694ead9fb032ae5c786ef0 Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 19 Feb 2023 00:03:11 +0800 Subject: [PATCH 80/90] fix car pay --- .../java/com/iformall/service/park/pay/WxParkPayServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index e3731f24d..dc122ab89 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -150,6 +150,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Override public String handlePaidCallBack(String tenantId,Map paramMap) { + logger.info("handleCarPaidCallBack."+JSON.toJSONString(paramMap)); //支付返回消息 String returnCode = paramMap.get("return_code"); if ("SUCCESS".equals(returnCode)) { From bee06adc14310515a847b4eefd3739cdd1ede5ea Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 19 Feb 2023 00:37:10 +0800 Subject: [PATCH 81/90] fix car pay --- .../callback/car/pay/WxCarPaidCallBackController.java | 9 ++++++++- .../java/com/iformall/controller/HomeController.java | 11 +++++++++-- .../service/park/impl/fute/FuteParkService.java | 1 - 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java index 163b12fdc..17c79354f 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java @@ -26,6 +26,7 @@ import com.iformall.pay.WxPayment; import com.iformall.service.*; import com.iformall.service.park.impl.cyf.CYFUtil; import com.iformall.service.park.impl.tjd.TJDUtil; +import com.iformall.service.park.pay.WxParkPayService; import com.iformall.utils.XmlUtil; import lombok.extern.slf4j.Slf4j; @@ -87,6 +88,9 @@ public class WxCarPaidCallBackController extends WxParkCallBackBaseController { @Autowired private MqBaseProducer mqBaseProducer; + + @Autowired + private WxParkPayService wxParkPayService; /** * @description 停车费支付成功通知 @@ -119,8 +123,11 @@ public class WxCarPaidCallBackController extends WxParkCallBackBaseController { refundSuccessMsg.setJsonMsg(jsonMsg); // response = wxRefundOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); - mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + //mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + Map _paramMap = JSON.parseObject(jsonMsg, Map.class); + wxParkPayService.handlePaidCallBack(tenantId,_paramMap); + logger.info("carPaid wxpay, notify success, req : " + xml + ", resp: " + response.toString()); return response; } catch (BizMessageException e) { diff --git a/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java b/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java index 4d19df045..1563e7a7d 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java @@ -7,6 +7,7 @@ import com.iformall.enums.EnumPayWay; import com.iformall.pay.WxPayment; import com.iformall.service.WxCashOutService; import com.iformall.service.WxRefundOrderService; +import com.iformall.service.park.pay.WxParkPayService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -35,6 +36,9 @@ public class HomeController { @Autowired private WxRefundOrderService wxRefundOrderService; + + @Autowired + private WxParkPayService wxParkPayService; @ApiOperation("获取后端版本号") @GetMapping("/version") @@ -45,8 +49,11 @@ public class HomeController { // @ApiOperation("获取后端版本号") // @GetMapping("/ttt") // public ResultData ttttttt() { -// String json = "SUCCESS"; -// wxRefundOrderService.notify(WxPayment.xmlToMap(json), EnumPayWay.getEnum(EnumPayWay.PAY_WAY_WECHAT.getCode())); +// //String json = "SUCCESS"; +// //wxRefundOrderService.notify(WxPayment.xmlToMap(json), EnumPayWay.getEnum(EnumPayWay.PAY_WAY_WECHAT.getCode())); +// String msg = "{\"transaction_id\":\"4200001795202302181470250683\",\"nonce_str\":\"2f835b728d9d4e9291160aa96559d483\",\"bank_type\":\"CMB_DEBIT\",\"openid\":\"o8iB81ZYqbeokbn5hARt7eTj7xg4\",\"sign\":\"D59A853D7852442C68DE3DE2CEF7895091386E34E70BC3AD377F0A0C21E3EA27\",\"sub_is_subscribe\":\"N\",\"fee_type\":\"CNY\",\"mch_id\":\"1511925291\",\"sub_appid\":\"wx649b3be73c1afe47\",\"sub_mch_id\":\"1602801645\",\"cash_fee\":\"3000\",\"sub_openid\":\"opvcM5IEkl0U5pNiHcN49Ens40jU\",\"out_trade_no\":\"FUTE_786953095252336640\",\"appid\":\"wxed2f44705544b892\",\"total_fee\":\"3000\",\"tenantId\":\"789\",\"trade_type\":\"JSAPI\",\"result_code\":\"SUCCESS\",\"attach\":\"441397811441729536,18600671341,湘HFS270,1645,be9aacaa-9ecf-4056-a431-70ec50de1937\",\"time_end\":\"20230218235734\",\"is_subscribe\":\"Y\",\"return_code\":\"SUCCESS\"}"; +// Map paramMap = JSON.parseObject(msg, Map.class); +// wxParkPayService.handlePaidCallBack("789",paramMap); // return new ResultData(version); // } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java index 5675d24e3..264ce9007 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java @@ -200,7 +200,6 @@ public class FuteParkService extends BaseParkService implements ParkAdapterServi @Override public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { - logger.info(">>>>> fute notifyPaid"); String result = fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); if (StringUtils.isBlank(result)) { return null; From c99e7376f465d893b001af5d0102f9cb3ed0b4aa Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 19 Feb 2023 00:38:47 +0800 Subject: [PATCH 82/90] fix car pay --- .../callback/car/pay/WxCarPaidCallBackController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java index 17c79354f..adc8a7f64 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java @@ -123,10 +123,10 @@ public class WxCarPaidCallBackController extends WxParkCallBackBaseController { refundSuccessMsg.setJsonMsg(jsonMsg); // response = wxRefundOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); - //mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); - Map _paramMap = JSON.parseObject(jsonMsg, Map.class); - wxParkPayService.handlePaidCallBack(tenantId,_paramMap); +// Map _paramMap = JSON.parseObject(jsonMsg, Map.class); +// wxParkPayService.handlePaidCallBack(tenantId,_paramMap); logger.info("carPaid wxpay, notify success, req : " + xml + ", resp: " + response.toString()); return response; From 1d736e3fd24017036cf1f8eea13051bb83f751e4 Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 19 Feb 2023 00:59:41 +0800 Subject: [PATCH 83/90] fix car pay --- .../callback/car/pay/WxCarPaidCallBackController.java | 3 --- .../com/iformall/service/park/impl/fute/FuteUtil.java | 8 ++++---- .../iformall/service/park/pay/WxParkPayServiceImpl.java | 2 ++ 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java index adc8a7f64..afb19b7ef 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/pay/WxCarPaidCallBackController.java @@ -125,9 +125,6 @@ public class WxCarPaidCallBackController extends WxParkCallBackBaseController { // response = wxRefundOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); mqBaseProducer.sendMessage(refundSuccessMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); -// Map _paramMap = JSON.parseObject(jsonMsg, Map.class); -// wxParkPayService.handlePaidCallBack(tenantId,_paramMap); - logger.info("carPaid wxpay, notify success, req : " + xml + ", resp: " + response.toString()); return response; } catch (BizMessageException e) { diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java index 7b3653fdd..826515be1 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteUtil.java @@ -137,7 +137,6 @@ public class FuteUtil { param.put("total_amount", feestr);//优惠券编号 param.put("pay_channel", 1);//优惠券编号 param.put("pay_status", 1);//优惠券编号 - log.info("fute notifyOrderResult :" + JSON.toJSONString(param)); return ProcBussiness(NOTIFY_PAID, param,vp.getString("signkey")); } @@ -163,10 +162,11 @@ public class FuteUtil { httpPost.setEntity(new StringEntity(JSON.toJSONString(param),"UTF-8")); } + StringBuffer logsb = new StringBuffer(); if (null != param) { - log.info("fute httpRequest:[url]"+url+"[params]"+JSON.toJSONString(param)); + logsb.append("fute httpRequest:[url]").append(url).append("[params]").append(JSON.toJSONString(param)); }else { - log.info("fute httpRequest:[url]"+url); + logsb.append("fute httpRequest:[url]").append(url); } HttpResponse response = null; try { @@ -183,7 +183,7 @@ public class FuteUtil { //获取实体 HttpEntity httpEntity= response.getEntity(); result = EntityUtils.toString(httpEntity, "UTF-8"); - log.debug(result); + log.info(logsb.append("[result]").append(result).toString()); } catch (Exception e) { log.error(e.getLocalizedMessage(),e); } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index dc122ab89..9d07af73c 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -270,6 +270,8 @@ public class WxParkPayServiceImpl implements WxParkPayService { redisLock.unlock("carPayOrderLock_"+parkOrderNo, timeStr); } } + }else { + } } From f2f0dade89e5bd690a6f645e747370792f1758e0 Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 19 Feb 2023 01:08:49 +0800 Subject: [PATCH 84/90] fix car pay --- .../service/park/impl/fute/FuteParkService.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java index 264ce9007..bfd664c0b 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/fute/FuteParkService.java @@ -195,15 +195,20 @@ public class FuteParkService extends BaseParkService implements ParkAdapterServi } String price = result.getString("price"); Integer fee = new BigDecimal(price).multiply(new BigDecimal(100)).intValue(); - return new ParkCreatePayOrder(result.getString("parking_order_id"), fee); + return new ParkCreatePayOrder(result.getString("order_id"), fee); } @Override public ParkPaidNotifyResult notifyPaid(WxPark park,ParkNotifyPaid notifyPaid) throws Exception { - String result = fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); - if (StringUtils.isBlank(result)) { - return null; - } + String retCode = fute.notifyPaid(park, notifyPaid.getParkOrderNo(), notifyPaid.getFee()); + if (StringUtils.isBlank(retCode)) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "fute notifyPaid error. has no result"); + } + JSONObject result = JSON.parseObject(retCode); + if (result.getInteger("state") != 1 ) { + String message = result.getString("errmsg"); + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "fute notifyPaid error."+message); + } return new ParkPaidNotifyResult(true, result, null); } From d4a3546a3754466f4024ff9c4c8df74402842ce9 Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 19 Feb 2023 01:17:33 +0800 Subject: [PATCH 85/90] fix car pay --- .../com/iformall/service/park/pay/WxParkPayServiceImpl.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index 9d07af73c..dc122ab89 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -270,8 +270,6 @@ public class WxParkPayServiceImpl implements WxParkPayService { redisLock.unlock("carPayOrderLock_"+parkOrderNo, timeStr); } } - }else { - } } From 4be5886caa59b73b90982edf468f0c274e762494 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 20 Feb 2023 11:34:58 +0800 Subject: [PATCH 86/90] fix car pay --- .../iformall/controller/WxCarController.java | 47 ++++++++++++------- .../iformall/enums/EnumCarPayAmountType.java | 33 +++++++++++++ .../service/park/pay/WxParkPayService.java | 4 +- .../park/pay/WxParkPayServiceImpl.java | 12 +---- 4 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 0e136f38a..a26235f6c 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -475,19 +475,40 @@ public class WxCarController extends BaseController { return new ResultData(Result.ERROR,"未设置停车商户."); } + String receiverAccount = null; + boolean isIsv = false; + String apiKey = null; + WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); + if(cAppInfo == null){ + throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); + } + WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); + if(payAccount == null){ + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(),"未查询到payAccount."); + } + WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(park, parkMerchant.getId(), EnumAppPlat.WX); if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { + //查找小程序收款账户 + receiverAccount = payAccount.getSubMchId(); + isIsv = true; //查询商官商户 - WxMerchant adminMerchant = wxMerchantService.findAdmin(park); - if (null == adminMerchant) { - return new ResultData(Result.ERROR,"未找到商管商户."); - } - receiver = wxProfitPaymentReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX); - if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { - return new ResultData(Result.ERROR,"商管商户未设置收款账号."); - } +// WxMerchant adminMerchant = wxMerchantService.findAdmin(park); +// if (null == adminMerchant) { +// return new ResultData(Result.ERROR,"未找到商管商户."); +// } +// receiver = wxProfitPaymentReceiverService.findReceiver(park, adminMerchant.getId(), EnumAppPlat.WX); +// if (null == receiver || StringUtils.isBlank(receiver.getReceiverAccount())) { +// return new ResultData(Result.ERROR,"商管商户未设置收款账号."); +// } + }else { + receiverAccount = receiver.getReceiverAccount(); + Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); + if (EnumYesOrNo.YES.getCode() == isvModel) { + isIsv = true; + } + apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); } - String receiverAccount = receiver.getReceiverAccount(); int rlength = receiverAccount.length(); //最大128 cuserId,cuserPhone,carNumber,merchantId,merchantAccount,parkOrderNo StringBuffer attachSb = new StringBuffer() @@ -501,18 +522,12 @@ public class WxCarController extends BaseController { } attachSb.append(payOrder.getParkOrderNumber()); //创建微信支付订单 - boolean isIsv = false; - Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); - if (EnumYesOrNo.YES.getCode() == isvModel) { - isIsv = true; - } final IdWorker idWorker = IdWorker.get(); String uniquePayOrderNo = carVendor.getMessage()+"_"+idWorker.nextId(); - String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); String attach = attachSb.toString(); String productPre = "停车费支付,车场订单号";//中文签名错误 //String productPre = "ParkOrderId"; - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(payAccount,cAppInfo,isIsv,false,user.getOpenId(), receiverAccount, productPre+payOrder.getParkOrderNumber(), attach, uniquePayOrderNo, payOrder.getFee(), "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); if (wxResult.isSuccess()) { return new ResultData(wxResult); diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java new file mode 100644 index 000000000..4436f53f9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java @@ -0,0 +1,33 @@ +package com.iformall.enums; + +public enum EnumCarPayAmountType { + + CAR_MERCHANT(1, "停车商户"), + ADMIN_MERCHNAT(2, "商管商户"), + ; + + public static EnumCarPayAmountType getEnum(Integer code) { + for (EnumCarPayAmountType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCarPayAmountType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index d87e63f99..23711c040 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -7,8 +7,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxPark; +import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.enums.EnumCarVendor; @@ -21,7 +23,7 @@ public interface WxParkPayService { public void exportData(WxCarPayOrder record, HttpServletRequest request, HttpServletResponse response); //share:是否分账,服务商模式下生效 - public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + public PayAdapterResult createWxPayOrder(WxPayAccount payAccount,WxAppinfo cAppInfo,boolean isIsvModel,boolean share,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; public String handlePaidCallBack(String tenantId,Map paramMap); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index dc122ab89..db9156400 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -111,19 +111,11 @@ public class WxParkPayServiceImpl implements WxParkPayService { } @Override - public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + public PayAdapterResult createWxPayOrder(WxPayAccount payAccount,WxAppinfo cAppInfo,boolean isIsvModel,boolean share,String openId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { if (!isIsvModel) { - return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + return wxMiniAppPayAdapterService.pay(openId, cAppInfo.getAppId(),mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); }else { - WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); - if(cAppInfo == null){ - throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); - } - WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); - if(payAccount == null){ - throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(),"未查询到payAccount."); - } return wxMiniAppPayAdapterService.payIsv(payAccount, cAppInfo, mchId, openId, productName, attach, payOrderNo, fee, ip, notifyUrl, currentDate, share); } } From f04ffb8b08c1eca7fbc64a9821572441a58d10b9 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 20 Feb 2023 12:13:22 +0800 Subject: [PATCH 87/90] fix car pay --- .../basic/WxMerchantController.java | 4 --- .../db/migration/V20230200001__car.sql | 1 + .../iformall/controller/WxCarController.java | 10 ++++++-- .../com/iformall/domain/po/WxCarPayOrder.java | 9 ++++--- .../iformall/enums/EnumCarPayAmountType.java | 5 ++-- .../WxProfitPaymentReceiverService.java | 1 + .../service/impl/WxMerchantServiceImpl.java | 25 ++++++++++++++----- .../WxProfitPaymentReceiverServiceImpl.java | 6 +++++ .../park/pay/WxParkPayServiceImpl.java | 8 +++--- 9 files changed, 49 insertions(+), 20 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 152bd7714..47ad8bf3c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -285,10 +285,6 @@ public class WxMerchantController extends BaseController { @ApiOperation("(微信)商户手填收款账号") @PostMapping("setMerchantAccount") public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { - if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) - || null == wxMerchant.getIsIsv() || null == wxMerchant.getApiKey()) { - return new ResultData(ResultData.ERROR,"参数缺失"); - } wxMerchant.updateTenantInfo(getTenantInfo()); return wxMerchantService.setWxMerchantAccount(wxMerchant); } diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 99f940011..766f374de 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -11,6 +11,7 @@ CREATE TABLE `wx_car_pay_order` ( `pay_time` datetime NOT NULL COMMENT '支付时间', `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', `park_order_no` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', + `merchant_account_type` int(1) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户收款账户类型EnumCarPayAmountType', `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a26235f6c..01e0fb672 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -478,6 +478,7 @@ public class WxCarController extends BaseController { String receiverAccount = null; boolean isIsv = false; String apiKey = null; + EnumCarPayAmountType amountType = null; WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); if(cAppInfo == null){ throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); @@ -492,6 +493,7 @@ public class WxCarController extends BaseController { //查找小程序收款账户 receiverAccount = payAccount.getSubMchId(); isIsv = true; + amountType = EnumCarPayAmountType.PAY_ACCOUNT; //查询商官商户 // WxMerchant adminMerchant = wxMerchantService.findAdmin(park); // if (null == adminMerchant) { @@ -506,15 +508,19 @@ public class WxCarController extends BaseController { Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); if (EnumYesOrNo.YES.getCode() == isvModel) { isIsv = true; + amountType = EnumCarPayAmountType.CAR_ISV_MERCHANT; + }else { + amountType = EnumCarPayAmountType.CAR_OWN_MERCHANT; } apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); } int rlength = receiverAccount.length(); - //最大128 cuserId,cuserPhone,carNumber,merchantId,merchantAccount,parkOrderNo + //最大128 cuserId,cuserPhone,carNumber,amountType,merchantAccount,parkOrderNo StringBuffer attachSb = new StringBuffer() .append(user.getUserId()).append(",") .append(user.getPhone()).append(",") - .append(carNumber).append(","); + .append(carNumber).append(",") + .append(amountType.getCode()); if (rlength > 4) { attachSb.append(receiverAccount.substring(rlength-4,rlength)).append(","); }else { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 5f5e29cda..205af9eec 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -60,13 +60,16 @@ public class WxCarPayOrder extends TenantEntity { @Excel(name = "车场订单号", width = 20, orderNum = "9") @io.swagger.annotations.ApiModelProperty(value="车场订单号",name="parkOrderNo") private String parkOrderNo; - @Excel(name = "商户收款账户", width = 20, orderNum = "10") + @Excel(name = "商户收款账号类型", width = 20,replace = {"特约停车商户_1,自有停车商户_2,小程序收款账户_3"}, orderNum = "10") + @io.swagger.annotations.ApiModelProperty(value="商户收款账号类型EnumCarPayAmountType",name="merchantAccountType") + private Integer merchantAccountType; + @Excel(name = "商户收款账户(后4位)", width = 20, orderNum = "11") @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") private String merchantAccount; - @Excel(name = "是否已通知车场", width = 20, replace = {"已通知成功_1"}, orderNum = "13") + @Excel(name = "是否已通知车场", width = 20, replace = {"已通知成功_1"}, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="是否已通知车场EnumYesOrNo",name="parkNotify") private Integer parkNotify; - @Excel(name = "通知失败原因", width = 20, orderNum = "14") + @Excel(name = "通知失败原因", width = 20, orderNum = "13") @io.swagger.annotations.ApiModelProperty(value="通知失败原因",name="notifyFailReason") private String notifyFailReason; @io.swagger.annotations.ApiModelProperty(value="通知重试次数",name="notifyCount") diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java index 4436f53f9..e665e6e24 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java @@ -2,8 +2,9 @@ package com.iformall.enums; public enum EnumCarPayAmountType { - CAR_MERCHANT(1, "停车商户"), - ADMIN_MERCHNAT(2, "商管商户"), + CAR_ISV_MERCHANT(1, "特约停车商户"), + CAR_OWN_MERCHANT(2, "自有停车商户"), + PAY_ACCOUNT(3,"小程序收款账户") ; public static EnumCarPayAmountType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java index 613a18505..c80250e3c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java @@ -53,6 +53,7 @@ public interface WxProfitPaymentReceiverService { */ WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat); + ResultData deleteReceiver(TenantEntity tenantEntity,Long id); ResultData updateReceiver(WxProfitPaymentReceiver receiver); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 9bb7d2e4e..4f4f40f0e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -938,12 +938,25 @@ public class WxMerchantServiceImpl implements WxMerchantService { try { WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(wxMerchant, wxMerchant.getId(),EnumAppPlat.WX); if (null == receiver ) { - receiver = new WxProfitPaymentReceiver(); - receiver.setMerchantId(wxMerchant.getId()); - receiver.setReceiverType(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode()); - receiver.setReceiverComments("手动设置收款账号"); - receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - receiver.setPlat(EnumAppPlat.WX.getCode()); + //置空 + if (!StringUtils.isBlank(wxMerchant.getAccount())){ + if (null == wxMerchant.getIsIsv() || null == wxMerchant.getApiKey()) { + return new ResultData(ResultData.ERROR,"参数缺失"); + } + receiver = new WxProfitPaymentReceiver(); + receiver.setMerchantId(wxMerchant.getId()); + receiver.setReceiverType(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode()); + receiver.setReceiverComments("手动设置收款账号"); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + receiver.setPlat(EnumAppPlat.WX.getCode()); + }else { + return new ResultData(); + } + }else { + //置空,删除此收款账号 + if (StringUtils.isBlank(wxMerchant.getAccount())){ + return wxProfitPaymentReceiverService.deleteReceiver(receiver, receiver.getId()); + } } StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); if (EnumYesOrNo.YES.getCode().intValue()== wxMerchant.getIsIsv().intValue()) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java index b9706818a..847bede27 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java @@ -353,4 +353,10 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv RedisCacheUtils.removeCache(paymentReceicerRedisTemplate, key); } } + + @Override + public ResultData deleteReceiver(TenantEntity tenantEntity, Long id) { + wxProfitPaymentReceiverMapper.deleteById(id); + return new ResultData(); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index db9156400..cb41664b3 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -166,16 +166,18 @@ public class WxParkPayServiceImpl implements WxParkPayService { Long cUserId = null; String userPhone = null; String carNumber = null; + Integer accountType = null; String merchantAccount = null; String parkOrderNo = null; if (!StringUtils.isBlank(attach)) { String[] attrs = attach.split(","); - if (attrs.length == 5) { + if (attrs.length == 6) { cUserId = Long.parseLong(attrs[0]); userPhone = attrs[1]; carNumber = attrs[2]; - merchantAccount = attrs[3]; - parkOrderNo = attrs[4]; + accountType = Integer.parseInt(attrs[3]); + merchantAccount = attrs[4]; + parkOrderNo = attrs[5]; } } handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr), From 6dfce4b9bda75082d6ffa542f87eeaafe1465adc Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 20 Feb 2023 12:37:47 +0800 Subject: [PATCH 88/90] fix car pay --- .../java/com/iformall/domain/po/WxCarPayOrder.java | 13 ++++++++++++- .../iformall/service/park/pay/WxParkPayService.java | 2 +- .../service/park/pay/WxParkPayServiceImpl.java | 5 +++-- .../main/resources/mapper/WxCarPayOrderMapper.xml | 7 ++++++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 205af9eec..4b3ebd583 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -3,6 +3,7 @@ package com.iformall.domain.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumCarPayAmountType; import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; @@ -89,5 +90,15 @@ public class WxCarPayOrder extends TenantEntity { @TableField(exist = false) private Long merchantId = 111111111L; @TableField(exist = false) - private String merchantName = "停车商户"; + private String merchantName; + + public String getMerchantName() { + if (null != merchantAccountType) { + EnumCarPayAmountType at = EnumCarPayAmountType.getEnum(merchantAccountType); + if (null != at) { + return at.getMessage(); + } + } + return null; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 23711c040..350b0da3c 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -29,7 +29,7 @@ public interface WxParkPayService { public String handlePaidCallBack(String tenantId,Map paramMap); public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber,String parkOrderNo, - Integer fee,Date paidTime,String transcationId,String merchantAccount,String userPhone) throws Exception; + Integer fee,Date paidTime,String transcationId,Integer merchantAccountType,String merchantAccount,String userPhone) throws Exception; public WxCarPayOrder detailWxCarPayOrder(Long id,String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index cb41664b3..6aad05355 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -182,7 +182,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { } handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr), DateUtils.string2Date(time_end, DateUtils.DATE_PATTERN_ALL_NOSPACE).getTime(),transcationId, - merchantAccount,userPhone); + accountType,merchantAccount,userPhone); } catch (Exception e) { logger.error("handlePaidCallBackError.",e); return notifyErrorResult(e.getMessage()); @@ -201,7 +201,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Override public void handlePaidSuccess(WxPark wxPark,Long cUserId,Integer carVendor,String carNumber, - String parkOrderNo,Integer fee,Date paidTime,String transcationId,String merchantAccount, + String parkOrderNo,Integer fee,Date paidTime,String transcationId,Integer merchantAccountType,String merchantAccount, String userPhone) throws Exception{ //查询该笔订单是否已经存在 WxCarPayOrder payOrder = wxCarPayOrderMapper.findOneByParkOderNo(parkOrderNo, wxPark.getTenantId()); @@ -227,6 +227,7 @@ public class WxParkPayServiceImpl implements WxParkPayService { payOrder.setPayTime(paidTime); payOrder.setTransactionId(transcationId); payOrder.setParkOrderNo(parkOrderNo); + payOrder.setMerchantAccountType(merchantAccountType); payOrder.setMerchantAccount(merchantAccount); payOrder.setCarVendor(carVendor); payOrder.setcUserPhone(userPhone); diff --git a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml index b80c694ef..10fd54fc4 100644 --- a/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCarPayOrderMapper.xml @@ -14,6 +14,7 @@ + @@ -23,7 +24,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`c_user_phone`,`car_number`,`pay_amount`, - `pay_time`,`transaction_id`,`park_order_no`,`merchant_account`,`park_notify`, + `pay_time`,`transaction_id`,`park_order_no`,`merchant_account_type`,`merchant_account`,`park_notify`, `notify_fail_reason`,`notify_count`,`car_vendor` @@ -69,6 +70,10 @@ and `park_order_no` = #{parkOrderNo} + + + and `merchant_account_type` = #{merchantAccountType} + and `merchant_account` like concat('%', #{merchantAccount},'%') From 2a528794a45847c8378685ebcf0de13ff4c519ca Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 20 Feb 2023 13:22:05 +0800 Subject: [PATCH 89/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 01e0fb672..a37d216d2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -520,7 +520,7 @@ public class WxCarController extends BaseController { .append(user.getUserId()).append(",") .append(user.getPhone()).append(",") .append(carNumber).append(",") - .append(amountType.getCode()); + .append(amountType.getCode()).append(","); if (rlength > 4) { attachSb.append(receiverAccount.substring(rlength-4,rlength)).append(","); }else { From ee6989f29789fa0b09f6b89e8ee149a6ff3a8d4e Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 20 Feb 2023 18:51:09 +0800 Subject: [PATCH 90/90] fix car pay --- .../src/main/java/com/iformall/controller/WxCarController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a37d216d2..e030ee37a 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -562,7 +562,7 @@ public class WxCarController extends BaseController { WxCarPayOrder carPayOrder = new WxCarPayOrder(); carPayOrder.updateTenantInfo(getTenantInfo()); carPayOrder.setcUserId(getMemberId()); - carPayOrder.setSortColumn(SortField.CreateTime_DESC.getValue()); + carPayOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC); return new ResultData(wxParkPayService.listPayOrderAsPage(carPayOrder, pageNum, pageSize)); }