From 4d3ef2b0515b877d377acd51f927e06fb05ccc50 Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 23 Apr 2021 19:27:43 +0800 Subject: [PATCH] wx third order --- .../WxBusinessCircleOrderController.java | 47 +++++ .../V202104230001__add_flow_config.sql | 4 + .../callback/WxBusinessOrderController.java | 5 +- .../java/com/iformall/mq/MqBaseConsumer.java | 12 +- .../controller/UserBasicInfoController.java | 6 +- .../interceptor/AuthorizationInterceptor.java | 2 + .../iformall/domain/po/WxCUserBasicInfo.java | 3 + .../domain/po/WxThirdPartyOrders.java | 116 +++++++++++ .../domain/po/msg/FmInsideCircleOrderMsg.java | 35 ++++ ....java => FmInsideThirdPartyOrdersMsg.java} | 4 +- .../com/iformall/enums/EnumMsgRecordType.java | 3 +- .../java/com/iformall/enums/EnumUserType.java | 3 +- .../mapper/WxBusinessCircleOrderMapper.java | 22 +-- .../mapper/WxThirdPartyOrdersMapper.java | 43 ++++ .../java/com/iformall/pay/WxPayConstant.java | 4 + .../service/WxBusinessCircleOrderService.java | 14 +- .../service/WxThirdPartyOrdersService.java | 50 +++++ .../WxBusinessCircleOrderServiceImpl.java | 115 +++++------ .../impl/WxCUserBasicInfoServiceImpl.java | 21 +- .../service/impl/WxFlowServiceImpl.java | 1 + .../impl/WxThirdPartyOrdersServiceImpl.java | 154 +++++++++++++++ .../FmInsideBusinessCircleMsgServiceImpl.java | 83 +++++--- ...FmInsideThirdPartyOrderMsgServiceImpl.java | 145 ++++++++++++++ .../main/java/com/iformall/utils/MaUtil.java | 3 - .../mapper/WxBusinessCircleOrderMapper.xml | 8 +- .../mapper/WxThirdPartyOrdersMapper.xml | 183 ++++++++++++++++++ 26 files changed, 957 insertions(+), 129 deletions(-) create mode 100644 mallinkAdmin/src/main/java/com/iformall/controller/market/WxBusinessCircleOrderController.java create mode 100644 mallinkAdmin/src/main/resources/db/migration/V202104230001__add_flow_config.sql create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyOrders.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCircleOrderMsg.java rename mallinkService/src/main/java/com/iformall/domain/po/msg/{FmInsideBusinessCircleMsg.java => FmInsideThirdPartyOrdersMsg.java} (85%) create mode 100644 mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java create mode 100644 mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideThirdPartyOrderMsgServiceImpl.java create mode 100644 mallinkService/src/main/resources/mapper/WxThirdPartyOrdersMapper.xml diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxBusinessCircleOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxBusinessCircleOrderController.java new file mode 100644 index 000000000..80330d8c2 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxBusinessCircleOrderController.java @@ -0,0 +1,47 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +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.service.*; +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("businessCircle") +@Api(description = "订单相关接口") +public class WxBusinessCircleOrderController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxBusinessCircleOrderService wxBusinessCircleOrderService; + + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + @SystemControllerLog(description = "-列表") + public ResultData list(@ModelAttribute WxBusinessCircleOrder circleOrder, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxOrderController::list"); + if (null == circleOrder) { + circleOrder = new WxBusinessCircleOrder(); + } + circleOrder.updateTenantInfo(getTenantInfo()); + circleOrder.setSortColumns(BaseEntity.SortField.CreateDate_DESC,BaseEntity.SortField.Id_DESC); + final PageInfo page = wxBusinessCircleOrderService.listAsPage(circleOrder, pageNum, pageSize); + return new ResultData(page); + } + + +} diff --git a/mallinkAdmin/src/main/resources/db/migration/V202104230001__add_flow_config.sql b/mallinkAdmin/src/main/resources/db/migration/V202104230001__add_flow_config.sql new file mode 100644 index 000000000..450c80b66 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V202104230001__add_flow_config.sql @@ -0,0 +1,4 @@ + +INSERT INTO `wx_flow_config`(`id`, `parent_id`, `tenant_id`, `parent_tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) +select CEILING(RAND()*90000000000+10000000000) ,id,tenant_id,parent_tenant_id, '商户提现审批',23,0,'2021-04-23 13:42:18', '2021-04-23 13:42:18', 6 +from wx_flow_config where parent_id = 0 and type = 0 and name = '营销审批'; diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxBusinessOrderController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxBusinessOrderController.java index 4dfc4f8f4..bd169373a 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxBusinessOrderController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxBusinessOrderController.java @@ -11,6 +11,7 @@ import com.iformall.domain.po.WxBusinessCircleOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumThirdPartyConfigType; import com.iformall.interceptor.BodyReaderHttpServletRequestWrapper; +import com.iformall.pay.WxPayConstant; import com.iformall.service.WxBusinessCircleOrderService; import com.iformall.service.WxMallService; import com.iformall.service.WxPayAccountService; @@ -83,7 +84,7 @@ public class WxBusinessOrderController extends BaseController { wxBusinessCircleOrder.setSourceType(EnumThirdPartyConfigType.WEIXIN.getCode()); //解密 - if(MaUtil.noticeEventType.equals(notifyData.getEventType())){ + if(WxPayConstant.NOTICE_EVENT_TYPE.equals(notifyData.getEventType())){ PaidResult result = wxPayService.getBusinessCircleService().decryptPaidNotifyDataResource(notifyData); logger.info("微信商圈支付成功通知---解密结果{}"+notifyData.toString()); @@ -108,7 +109,7 @@ public class WxBusinessOrderController extends BaseController { resultMap.put("code","SUCCESS"); return resultMap; - }else if(MaUtil.refundEventType.equals(notifyData.getEventType())){ + }else if(WxPayConstant.REFUND_EVENT_TYPE.equals(notifyData.getEventType())){ RefundResult result = wxPayService.getBusinessCircleService().decryptRefundNotifyDataResource(notifyData); logger.info("微信商圈退款成功通知---解密结果{}"+result.toString()); diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index 80a511322..18c0a0c46 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -51,6 +51,9 @@ public class MqBaseConsumer { @Autowired private FmInsideBusinessCircleMsgServiceImpl fmInsideBusinessCircleMsgService; + + @Autowired + private FmInsideThirdPartyOrderMsgServiceImpl fmInsideThirdPartyOrderMsgService; @@ -121,10 +124,15 @@ public class MqBaseConsumer { //baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); //wxMsgRecordMapper.updateByBaseMsg(baseMsg); else if(EnumMsgRecordType.BUSINESS_CIRCLE_NOTICE.getCode().equals(baseMsg.getMsgType())) { - // 商圈通知 - FmInsideBusinessCircleMsg msg = (FmInsideBusinessCircleMsg)JsonUtil.readValue(message, FmInsideBusinessCircleMsg.class); + // 微信商圈内部通知 + FmInsideCircleOrderMsg msg = (FmInsideCircleOrderMsg)JsonUtil.readValue(message, FmInsideCircleOrderMsg.class); fmInsideBusinessCircleMsgService.send(msg); } + else if(EnumMsgRecordType.THIRD_PARTY_NOTICE.getCode().equals(baseMsg.getMsgType())) { + // 第三方订单内部通知 + FmInsideCircleOrderMsg msg = (FmInsideCircleOrderMsg)JsonUtil.readValue(message, FmInsideCircleOrderMsg.class); + fmInsideThirdPartyOrderMsgService.send(msg); + } }catch (Throwable e){ log.error("consum received error: ", e); /** diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index e53f999d7..216968e5a 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -48,9 +48,9 @@ public class UserBasicInfoController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"手机号格式不正确"); } TenantEntity tenantEntity = new TenantEntity(); - WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.registerByPhone(tenantEntity, phone); + WxCUserBasicInfo userBasicInfo = wxCUserBasicInfoService.registerByPhone(tenantEntity, phone); - return new ResultData(wxCUserBasicInfo); + return new ResultData(userBasicInfo); } @@ -75,8 +75,6 @@ public class UserBasicInfoController extends BaseController { System.out.println("timeStamp="+timeStamp); paramMap.put("timeStamp",timeStamp);//当前时间戳 paramMap.put("phone","17600000000"); - paramMap.put("userName","昵称"); - paramMap.put("userSex","1"); String sign = SignUtils.getSign(signKey, paramMap, "MD5"); System.out.println("sign="+sign); diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index 72afcf784..77c4af044 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -56,6 +56,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { if(apiConfig == null){ throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"非法请求"); } + request.setAttribute(Constant.TENANT_ID, apiConfig.getTenantId()); + request.setAttribute(Constant.PARENT_TENANT_ID, apiConfig.getParentTenantId()); String signature = request.getHeader("sign"); logger.info("sign={}"+signature); 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 4e136566d..8a391e36d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -114,6 +114,9 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { @io.swagger.annotations.ApiModelProperty(value="会员等级",name="level") private String level; + @TableField(exist = false) + private List lecelList; + @Excel(name="积分",width = 20, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="积分",name="credit") private Integer credit; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyOrders.java b/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyOrders.java new file mode 100644 index 000000000..4b416f66a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyOrders.java @@ -0,0 +1,116 @@ +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; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +@TableName(value = "wx_third_party_orders") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxThirdPartyOrders extends TenantEntity { + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="来源(wx_third_party_api)",name="sourceAppId") + private String sourceAppId; + + @io.swagger.annotations.ApiModelProperty(value="门店名称",name="shopName") + private String shopName; + + @io.swagger.annotations.ApiModelProperty(value="门店编号",name="shopNumber") + private String shopNumber; + + @io.swagger.annotations.ApiModelProperty(value="顾客手机号",name="userPhone") + private String userPhone; + + @io.swagger.annotations.ApiModelProperty(value="顾客编号",name="userNumber") + private String userNumber; + + @io.swagger.annotations.ApiModelProperty(value="交易完成时间",name="timeEnd") + private Date timeEnd; + + @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(分)",name="amount") + private Integer amount; + + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(元)",name="amount") + private String amountStr; + + public String getAmountStr() { + return amount != null ? new BigDecimal(amount).divide(new BigDecimal(100)).toPlainString(): amountStr; + } + + @io.swagger.annotations.ApiModelProperty(value="支付订单号",name="transactionId") + private String transactionId; + + @io.swagger.annotations.ApiModelProperty(value="订单摘要",name="summary") + private String summary; + + @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,与shop_number对齐",name="merchantId") + private Long merchantId; + + @io.swagger.annotations.ApiModelProperty(value="c端会员id,与user_number对齐",name="cUserId") + private Long cUserId; + + @io.swagger.annotations.ApiModelProperty(value="是否获得积分(1:是,0:否)",name="earnPoints") + private Integer earnPoints; + + @io.swagger.annotations.ApiModelProperty(value="订单新增积分值",name="increasedPoints") + private Integer increasedPoints; + + @io.swagger.annotations.ApiModelProperty(value="积分更新时间(新增)",name="increasedPoints") + private Date pointsUpdateTime; + + + @io.swagger.annotations.ApiModelProperty(value="是否退款(1:是,0:否)",name="isRefund") + private Integer isRefund; + + @io.swagger.annotations.ApiModelProperty(value="退款摘要",name="refundSummary") + private String refundSummary; + + @io.swagger.annotations.ApiModelProperty(value="退款完成时间",name="refundTime") + private Date refundTime; + + @io.swagger.annotations.ApiModelProperty(value="用户退款金额,单位(分)",name="refundSummary") + private Integer refundAmount; + + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="用户退款金额,单位(元)",name="amount") + private String refundAmountStr; + + public String getRefundAmountStr() { + return refundAmount != null ? new BigDecimal(refundAmount).divide(new BigDecimal(100)).toPlainString(): refundAmountStr; + } + + @io.swagger.annotations.ApiModelProperty(value="退款单号",name="refundId") + private String refundId; + + @io.swagger.annotations.ApiModelProperty(value="用户是否退积分(1:是,0:否)",name="isRefundPoints") + private Integer isRefundPoints; + + @io.swagger.annotations.ApiModelProperty(value="用户退积分时间",name="refundPointsTime") + private Date refundPointsTime; + + + + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="查询-开始时间",name="startdate") + private Date startTime; + + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="enddate") + private Date endTime; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCircleOrderMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCircleOrderMsg.java new file mode 100644 index 000000000..57a177ce4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCircleOrderMsg.java @@ -0,0 +1,35 @@ +package com.iformall.domain.po.msg; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class FmInsideCircleOrderMsg extends BaseMsg{ + private static final long serialVersionUID = 1L; + + @io.swagger.annotations.ApiModelProperty(value="是否退款",name="isRefund") + private Integer isRefund; + + @io.swagger.annotations.ApiModelProperty(value="第三方订单对应己方Id",name="circleOrderId") + private Long circleOrderId; + + @io.swagger.annotations.ApiModelProperty(value="门店Id",name="merchantId") + private Long merchantId; + + @io.swagger.annotations.ApiModelProperty(value="c端会员id",name="cUserId") + private Long cUserId; + + @io.swagger.annotations.ApiModelProperty(value="门店名称",name="shopName") + private String shopName; + + @io.swagger.annotations.ApiModelProperty(value="顾客手机号",name="userPhone") + private String userPhone; + + @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(分)",name="amount") + private Integer amount; + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideBusinessCircleMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideThirdPartyOrdersMsg.java similarity index 85% rename from mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideBusinessCircleMsg.java rename to mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideThirdPartyOrdersMsg.java index 876df46d7..8cd7b858e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideBusinessCircleMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideThirdPartyOrdersMsg.java @@ -7,10 +7,10 @@ import lombok.ToString; @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) -public class FmInsideBusinessCircleMsg extends BaseMsg{ +public class FmInsideThirdPartyOrdersMsg extends BaseMsg{ private static final long serialVersionUID = 1L; - @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知类型",name="eventType") + @io.swagger.annotations.ApiModelProperty(value="第三方交易状态",name="eventType") private String eventType; @io.swagger.annotations.ApiModelProperty(value="商圈订单Id",name="businessCircleOrderId") diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index c078edcec..dde06e32d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -20,7 +20,8 @@ public enum EnumMsgRecordType { INSIDE_NOTIFY_REFUND_SUCCESS(104, "微信退款回调"), COUPON_STOCK(105, "券库存更新"), CASH_OUT(106,"商户提现"), - BUSINESS_CIRCLE_NOTICE(107, "商圈支付通知"),//内部消息,加积分+积分同步 + BUSINESS_CIRCLE_NOTICE(1000, "商圈订单通知"),//内部消息,加减积分+积分同步 + THIRD_PARTY_NOTICE(1001, "第三方订单通知"),//内部消息,加减积分+积分同步 ; public static EnumMsgRecordType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java b/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java index c46fd67c5..8b7ad5f35 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java @@ -7,7 +7,8 @@ public enum EnumUserType { BUSER(3, "B端用户"), MALLUSER(4, "A端用户"), - BUSINESS_CIRCLE(5, "微信商圈") + BUSINESS_CIRCLE(100, "微信商圈"), + THIRD_CIRCLE(101, "第三方") ; public static EnumUserType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java index 38939fe0b..8f600a9ad 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java @@ -9,38 +9,38 @@ public interface WxBusinessCircleOrderMapper extends CommonMapper findList(WxBusinessCircleOrder record); - WxBusinessCircleOrder getById(WxBusinessCircleOrder wxBusinessCircleOrder); + WxBusinessCircleOrder getById(WxBusinessCircleOrder record); - WxBusinessCircleOrder getByTransactionId(WxBusinessCircleOrder wxBusinessCircleOrder); + WxBusinessCircleOrder getByTransactionId(WxBusinessCircleOrder record); /** * 成功通知新建 - * @param wxBusinessCircleOrder + * @param record */ - void insertNoticeOrder(WxBusinessCircleOrder wxBusinessCircleOrder); + void insertNoticeOrder(WxBusinessCircleOrder record); /** * 加积分 - * @param wxBusinessCircleOrder + * @param record */ - void updateAddPoints(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateAddPoints(WxBusinessCircleOrder record); /** * 积分同步状态修改 */ - void updateIsPointsNotify(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateIsPointsNotify(WxBusinessCircleOrder record); /** * 退款 - * @param wxBusinessCircleOrder + * @param record */ - void updateRefundNoticeOrder(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateRefundNoticeOrder(WxBusinessCircleOrder record); /** * 退积分 - * @param wxBusinessCircleOrder + * @param record */ - void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateRefundPoints(WxBusinessCircleOrder record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java new file mode 100644 index 000000000..df97e0450 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java @@ -0,0 +1,43 @@ +package com.iformall.mapper; + + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxThirdPartyOrders; + +import java.util.List; + + +public interface WxThirdPartyOrdersMapper extends CommonMapper { + + List findList(WxThirdPartyOrders record); + + WxThirdPartyOrders getById(WxThirdPartyOrders record); + + WxThirdPartyOrders getByTransactionId(WxThirdPartyOrders record); + + /** + * 成功通知新建 + * @param record + */ + void insertNoticeOrder(WxThirdPartyOrders record); + + /** + * 加积分 + * @param record + */ + void updateAddPoints(WxThirdPartyOrders record); + + /** + * 退款 + * @param record + */ + void updateRefundNoticeOrder(WxThirdPartyOrders record); + + /** + * 退积分 + * @param record + */ + void updateRefundPoints(WxThirdPartyOrders record); + + +} diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java b/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java index ff0fb12d0..02a4af249 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java @@ -1,6 +1,10 @@ package com.iformall.pay; public class WxPayConstant { + + public static final String NOTICE_EVENT_TYPE = "MALL_TRANSACTION.SUCCESS"; + public static final String REFUND_EVENT_TYPE = "MALL_REFUND.SUCCESS"; + public final static String REQ_KEY = "reqKey"; public final static String RES_KEY = "resKey"; diff --git a/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java index cb8ef8d8f..d6bce9644 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java @@ -30,26 +30,26 @@ public interface WxBusinessCircleOrderService { */ WxBusinessCircleOrder getByTransactionId(String transactionId, String tenantId); - void createOrder(WxBusinessCircleOrder wxBusinessCircleOrder); + void createOrder(WxBusinessCircleOrder record); - void updateRefundOrder(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateRefundOrder(WxBusinessCircleOrder record); /** * 加积分 - * @param wxBusinessCircleOrder + * @param record */ - void updateAddPoints(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateAddPoints(WxBusinessCircleOrder record); /** * 积分同步状态修改 */ - void updateIsPointsNotify(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateIsPointsNotify(WxBusinessCircleOrder record); /** * 退积分 - * @param wxBusinessCircleOrder + * @param record */ - void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder); + void updateRefundPoints(WxBusinessCircleOrder record); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java b/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java new file mode 100644 index 000000000..5683ed324 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java @@ -0,0 +1,50 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxThirdPartyOrders; + +public interface WxThirdPartyOrdersService { + + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxThirdPartyOrders record, Integer pageIndex, Integer pageSize); + + /** + * id+tenantId + * @param + * @return + */ + WxThirdPartyOrders getById(Long id, String tenantId); + + /** + * transactionId+tenantId + * @param + * @return + */ + WxThirdPartyOrders getByTransactionId(String transactionId, String tenantId); + + void createOrder(WxThirdPartyOrders record); + + void updateRefundOrder(WxThirdPartyOrders record); + + /** + * 加积分 + * @param record + */ + void updateAddPoints(WxThirdPartyOrders record); + + /** + * 退积分 + * @param record + */ + void updateRefundPoints(WxThirdPartyOrders record); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java index b8a5edd13..c675720ae 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java @@ -6,10 +6,8 @@ import com.iformall.common.IdWorker; import com.iformall.domain.po.WxBusinessCircleOrder; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.msg.FmInsideBusinessCircleMsg; -import com.iformall.enums.EnumMsgMqKey; -import com.iformall.enums.EnumMsgMqTag; -import com.iformall.enums.EnumMsgMqTopic; +import com.iformall.domain.po.msg.FmInsideCircleOrderMsg; +import com.iformall.enums.*; import com.iformall.mapper.WxBusinessCircleOrderMapper; import com.iformall.mq.MqBaseProducer; import com.iformall.service.WxBusinessCircleOrderService; @@ -46,104 +44,107 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe @Override public WxBusinessCircleOrder getById(Long id, String tenantId) { - WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); - wxBusinessCircleOrder.setId(id); - wxBusinessCircleOrder.setTenantId(tenantId); - return wxBusinessCircleOrderMapper.getById(wxBusinessCircleOrder); + WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); + recordQ.setId(id); + recordQ.setTenantId(tenantId); + return wxBusinessCircleOrderMapper.getById(recordQ); } @Override public WxBusinessCircleOrder getByTransactionId(String transactionId, String tenantId) { - WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); - wxBusinessCircleOrder.setTransactionId(transactionId); - wxBusinessCircleOrder.setTenantId(tenantId); - return wxBusinessCircleOrderMapper.getByTransactionId(wxBusinessCircleOrder); + WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); + recordQ.setTransactionId(transactionId); + recordQ.setTenantId(tenantId); + return wxBusinessCircleOrderMapper.getByTransactionId(recordQ); } @Override - public void createOrder(WxBusinessCircleOrder wxBusinessCircleOrder) { - WxBusinessCircleOrder byTransactionId = wxBusinessCircleOrderMapper.getByTransactionId(wxBusinessCircleOrder); + public void createOrder(WxBusinessCircleOrder record) { + WxBusinessCircleOrder byTransactionId = wxBusinessCircleOrderMapper.getByTransactionId(record); if(byTransactionId != null){ - logger.error("--商圈付款--通知消息已存在--"); + logger.error("--商圈付款--通知消息已存在---byTransactionId="+byTransactionId.getTransactionId()); }else{ Date now = new Date(); final IdWorker idWorker = IdWorker.get(); - wxBusinessCircleOrder.setId(idWorker.nextId()); - wxBusinessCircleOrder.setCreateTime(now); - wxBusinessCircleOrder.setUpdateTime(now); - WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(wxBusinessCircleOrder.getWxShopNumber())); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); + + //TODO 第三方获取门店(标识可能发生变化) + WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getWxShopNumber())); if(wxMerchant != null){ - wxBusinessCircleOrder.setMerchantId(wxMerchant.getId()); + record.setMerchantId(wxMerchant.getId()); }else{ - logger.error("--商圈付款通知消息未找到门店--"); + logger.error("--商圈付款通知消息未找到门店--shopName="+record.getWxShopName()+"&shopNumber="+record.getWxShopNumber()); } WxCUser userQ = new WxCUser(); - userQ.updateTenantInfo(wxBusinessCircleOrder); - userQ.setOpenId(wxBusinessCircleOrder.getOpenid()); - userQ.setAppId(wxBusinessCircleOrder.getAppid()); + userQ.updateTenantInfo(record); + userQ.setOpenId(record.getOpenid()); + userQ.setAppId(record.getAppid()); WxCUser user = wxCUserService.getByOpenId(userQ); if(user != null && user.getUserId() != null){ - wxBusinessCircleOrder.setCUserId(user.getUserId()); + record.setCUserId(user.getUserId()); }else{ - logger.error("--商圈付款通知消息未找到会员--"); + logger.error("--商圈付款通知消息未找到会员--openid="+record.getOpenid()); } - wxBusinessCircleOrderMapper.insertNoticeOrder(wxBusinessCircleOrder); + wxBusinessCircleOrderMapper.insertNoticeOrder(record); - // TODO: 2021/4/21 mq 新增积分 积分同步 - this.sendMessage(wxBusinessCircleOrder,wxBusinessCircleOrder.getNoticeEventType()); + this.sendMessage(record,EnumYesOrNo.NO.getCode()); } } /** * - * @param wxBusinessCircleOrder - * @param eventType + * @param record + * @param isRefund 是否退款 */ - private void sendMessage(WxBusinessCircleOrder wxBusinessCircleOrder,String eventType){ - FmInsideBusinessCircleMsg msg = new FmInsideBusinessCircleMsg(); - msg.updateTenantInfo(wxBusinessCircleOrder); - msg.setEventType(eventType); - msg.setBusinessCircleOrderId(wxBusinessCircleOrder.getId()); - msg.setMerchantId(wxBusinessCircleOrder.getMerchantId()); - msg.setCUserId(wxBusinessCircleOrder.getCUserId()); - msg.setWxShopName(wxBusinessCircleOrder.getWxShopName()); - msg.setAmount(wxBusinessCircleOrder.getAmount()); + private void sendMessage(WxBusinessCircleOrder record,Integer isRefund){ + FmInsideCircleOrderMsg msg = new FmInsideCircleOrderMsg(); + msg.setMsgType(EnumMsgRecordType.BUSINESS_CIRCLE_NOTICE.getCode()); + msg.updateTenantInfo(record); + msg.setIsRefund(isRefund); + msg.setCircleOrderId(record.getId()); + msg.setMerchantId(record.getMerchantId()); + msg.setCUserId(record.getCUserId()); + msg.setShopName(record.getWxShopName()); + msg.setAmount(record.getAmount()); mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } @Override - public void updateRefundOrder(WxBusinessCircleOrder wxBusinessCircleOrder) { - WxBusinessCircleOrder byTransactionId = this.getByTransactionId(wxBusinessCircleOrder.getTransactionId(),wxBusinessCircleOrder.getTenantId()); + public void updateRefundOrder(WxBusinessCircleOrder record) { + WxBusinessCircleOrder byTransactionId = this.getByTransactionId(record.getTransactionId(),record.getTenantId()); if(byTransactionId == null){ - logger.error("--商圈退款--付款消息未找到--"); + logger.error("--商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); + }else if(byTransactionId.getIsRefund().equals(EnumYesOrNo.YES.getCode())){ + logger.error("--商圈退款--已是退款状态--transactionId="+record.getTransactionId()); }else{ Date now = new Date(); - wxBusinessCircleOrder.setId(byTransactionId.getId()); - wxBusinessCircleOrder.setUpdateTime(now); - wxBusinessCircleOrderMapper.updateRefundNoticeOrder(wxBusinessCircleOrder); + record.setId(byTransactionId.getId()); + record.setUpdateTime(now); + wxBusinessCircleOrderMapper.updateRefundNoticeOrder(record); - // TODO: 2021/4/21 mq 退积分 - this.sendMessage(wxBusinessCircleOrder,wxBusinessCircleOrder.getRefundEventType()); + this.sendMessage(record,EnumYesOrNo.YES.getCode()); } } @Override - public void updateAddPoints(WxBusinessCircleOrder wxBusinessCircleOrder) { - wxBusinessCircleOrder.setUpdateTime(new Date()); - wxBusinessCircleOrderMapper.updateAddPoints(wxBusinessCircleOrder); + public void updateAddPoints(WxBusinessCircleOrder record) { + record.setUpdateTime(new Date()); + wxBusinessCircleOrderMapper.updateAddPoints(record); } @Override - public void updateIsPointsNotify(WxBusinessCircleOrder wxBusinessCircleOrder) { - wxBusinessCircleOrder.setUpdateTime(new Date()); - wxBusinessCircleOrderMapper.updateIsPointsNotify(wxBusinessCircleOrder); + public void updateIsPointsNotify(WxBusinessCircleOrder record) { + record.setUpdateTime(new Date()); + wxBusinessCircleOrderMapper.updateIsPointsNotify(record); } @Override - public void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder) { - wxBusinessCircleOrder.setUpdateTime(new Date()); - wxBusinessCircleOrderMapper.updateRefundPoints(wxBusinessCircleOrder); + public void updateRefundPoints(WxBusinessCircleOrder record) { + record.setUpdateTime(new Date()); + wxBusinessCircleOrderMapper.updateRefundPoints(record); } 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 78d3f8450..684c839f5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -10,7 +10,6 @@ import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; import com.iformall.domain.po.*; -import com.iformall.domain.po.base.BaseTenantEntity; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.*; import com.iformall.enums.*; @@ -644,19 +643,29 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc return null; WxCUserBasicInfo basicInfo = this.findInfoByPhone(tenantEntity, phone); - if(basicInfo != null){ - return basicInfo; - }else{ + if(basicInfo == null){ basicInfo = new WxCUserBasicInfo(); basicInfo.setTenantId("," + tenantEntity.getTenantId() + ","); + basicInfo.setFinalTenantId(tenantEntity.getFinalTenantId()); basicInfo.setPhone(phone); this.save(basicInfo); - return basicInfo; } - // TODO: 2021/4/21 重新组装数据结构 + List levelList = wxLevelConfigService.getByTenantInfo(tenantEntity); + basicInfo.setLecelList(levelList); + basicInfo.setLevel(WxLevelConfigService.DEFAULT_LEVEL); + if(basicInfo.getPoins() != null && basicInfo.getPoins() > 0){ + for (WxLevelConfig levelConfig : levelList) { + if (basicInfo.getPoins() >= levelConfig.getPoints()) { + basicInfo.setLevel(levelConfig.getLevel()); + } + } + } + + return basicInfo; } + @Override public WxCUserBasicInfo getById(Long id,String finalTenantId) { return wxCUserBasicInfoMapper.selectById(id,finalTenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java index 03971a517..7c3a7b94f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java @@ -119,6 +119,7 @@ public class WxFlowServiceImpl implements WxFlowService { " ( '" + idWorker.nextId() + "', '" + id1 + "', '" + tenantId + "', '卡审批', '10', '0', '" + nowTimestr + "', '" + nowTimestr + "', '2')," + " ( '" + idWorker.nextId() + "', '" + id1 + "', '" + tenantId + "', '砍价审批', '12', '0', '" + nowTimestr + "', '" + nowTimestr + "', '4')," + " ( '" + idWorker.nextId() + "', '" + id1 + "', '" + tenantId + "', 'B端创建券', '22', '0', '" + nowTimestr + "', '" + nowTimestr + "', '5')," + + " ( '" + idWorker.nextId() + "', '" + id1 + "', '" + tenantId + "', '商户提现审批', '23', '0', '" + nowTimestr + "', '" + nowTimestr + "', '6')," + " ( '" + idWorker.nextId() + "', '" + id2 + "', '" + tenantId + "', '多经点位租金+物业合同签约', '19', '0', '" + nowTimestr + "', '" + nowTimestr + "', '11')," + " ( '" + idWorker.nextId() + "', '" + id2 + "', '" + tenantId + "', '商铺租金+物业合同终止', '18', '0', '" + nowTimestr + "', '" + nowTimestr + "', '10')," + " ( '" + idWorker.nextId() + "', '" + id2 + "', '" + tenantId + "', '商铺物业合同签约', '13', '0', '" + nowTimestr + "', '" + nowTimestr + "', '5')," + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java new file mode 100644 index 000000000..f72a1b71f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java @@ -0,0 +1,154 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxThirdPartyOrders; +import com.iformall.domain.po.msg.FmInsideCircleOrderMsg; +import com.iformall.enums.*; +import com.iformall.mapper.WxThirdPartyOrdersMapper; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCUserService; +import com.iformall.service.WxMerchantService; +import com.iformall.service.WxThirdPartyOrdersService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxThirdPartyOrdersMapper wxThirdPartyOrdersMapper; + + @Autowired + WxMerchantService wxMerchantService; + + @Autowired + WxCUserService wxCUserService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + MqBaseProducer mqBaseProducer; + + + @Override + public PageInfo listAsPage(WxThirdPartyOrders record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxThirdPartyOrdersMapper.findList(record)); + } + + @Override + public WxThirdPartyOrders getById(Long id, String tenantId) { + WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); + recordQ.setId(id); + recordQ.setTenantId(tenantId); + return wxThirdPartyOrdersMapper.getById(recordQ); + } + + @Override + public WxThirdPartyOrders getByTransactionId(String transactionId, String tenantId) { + WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); + recordQ.setTransactionId(transactionId); + recordQ.setTenantId(tenantId); + return wxThirdPartyOrdersMapper.getByTransactionId(recordQ); + } + + @Override + public void createOrder(WxThirdPartyOrders record) { + WxThirdPartyOrders byTransactionId = wxThirdPartyOrdersMapper.getByTransactionId(record); + if(byTransactionId != null){ + logger.error("--第三方付款--通知消息已存在---byTransactionId="+byTransactionId.getTransactionId()); + }else{ + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); + + //TODO 第三方获取门店(标识可能发生变化) + WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getShopNumber())); + if(wxMerchant != null){ + record.setMerchantId(wxMerchant.getId()); + }else{ + logger.error("--第三方付款通知消息未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); + } + + WxCUserBasicInfo basicInfo = null; + try{ + basicInfo = wxCUserBasicInfoService.getById(Long.parseLong(record.getUserNumber()), record.getFinalTenantId()); + if(basicInfo == null){ + basicInfo = wxCUserBasicInfoService.registerByPhone(record, record.getUserPhone()); + } + }catch(Exception e){} + + if(basicInfo != null){ + record.setCUserId(basicInfo.getId()); + }else{ + logger.error("--第三方付款通知消息未找到会员--userPhone="+record.getUserPhone()+"$userNumer="+record.getId()); + } + wxThirdPartyOrdersMapper.insertNoticeOrder(record); + + this.sendMessage(record,EnumYesOrNo.NO.getCode()); + + } + } + + /** + * + * @param record + * @param isRefund 是否退款 + */ + private void sendMessage(WxThirdPartyOrders record,Integer isRefund){ + FmInsideCircleOrderMsg msg = new FmInsideCircleOrderMsg(); + msg.setMsgType(EnumMsgRecordType.THIRD_PARTY_NOTICE.getCode()); + msg.updateTenantInfo(record); + msg.setIsRefund(isRefund); + msg.setCircleOrderId(record.getId()); + msg.setMerchantId(record.getMerchantId()); + msg.setCUserId(record.getCUserId()); + msg.setShopName(record.getShopName()); + msg.setUserPhone(record.getUserPhone()); + msg.setAmount(record.getAmount()); + mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } + + @Override + public void updateRefundOrder(WxThirdPartyOrders record) { + WxThirdPartyOrders byTransactionId = this.getByTransactionId(record.getTransactionId(),record.getTenantId()); + if(byTransactionId == null){ + logger.error("--第三方退款--付款消息未找到--transactionId="+record.getTransactionId()); + }else if(byTransactionId.getIsRefund().equals(EnumYesOrNo.YES.getCode())){ + logger.error("--第三方退款--已是退款状态--transactionId="+record.getTransactionId()); + }else{ + Date now = new Date(); + record.setId(byTransactionId.getId()); + record.setUpdateTime(now); + wxThirdPartyOrdersMapper.updateRefundNoticeOrder(record); + + this.sendMessage(record,EnumYesOrNo.YES.getCode()); + } + } + + @Override + public void updateAddPoints(WxThirdPartyOrders record) { + record.setUpdateTime(new Date()); + wxThirdPartyOrdersMapper.updateAddPoints(record); + } + + @Override + public void updateRefundPoints(WxThirdPartyOrders record) { + record.setUpdateTime(new Date()); + wxThirdPartyOrdersMapper.updateRefundPoints(record); + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideBusinessCircleMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideBusinessCircleMsgServiceImpl.java index c33d36d1c..112aafcbf 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideBusinessCircleMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideBusinessCircleMsgServiceImpl.java @@ -7,13 +7,13 @@ import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCreditHistory; import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.msg.BaseMsg; -import com.iformall.domain.po.msg.FmInsideBusinessCircleMsg; +import com.iformall.domain.po.msg.FmInsideCircleOrderMsg; import com.iformall.enums.EnumBusiness; import com.iformall.enums.EnumScoreType; import com.iformall.enums.EnumUserType; +import com.iformall.enums.EnumYesOrNo; import com.iformall.service.*; import com.iformall.service.msg.MsgSendService; -import com.iformall.utils.MaUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +44,7 @@ public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { @Autowired WxCUserBasicInfoService cUserBasicInfoService; + @Autowired WxBusinessCircleOrderService businessCircleOrderService; @Autowired @@ -51,8 +52,8 @@ public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { @Override public void send(BaseMsg baseMsg) throws Exception { - FmInsideBusinessCircleMsg msg = (FmInsideBusinessCircleMsg)baseMsg; - + FmInsideCircleOrderMsg msg = (FmInsideCircleOrderMsg)baseMsg; + logger.info("FmInsideBusinessCircleMsgServiceImpl---{}"+msg.toString()); if(msg.getCUserId() == null){ return; } @@ -61,35 +62,50 @@ public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { return; } - WxBusinessCircleOrder wxBusinessCircleOrder = businessCircleOrderService.getById(msg.getBusinessCircleOrderId(),msg.getTenantId()); + WxBusinessCircleOrder wxBusinessCircleOrder = businessCircleOrderService.getById(msg.getCircleOrderId(),msg.getTenantId()); if(wxBusinessCircleOrder == null){ return; } - if(msg.getMerchantId() == null){ - return; - } Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); - WxMerchant wxMerchant = wxMerchantService.getById(msg.getMerchantId()); - if(wxMerchant != null){ - businessId = wxMerchant.getBusinessId(); + + if(msg.getMerchantId() != null){ + //TODO 第三方获取门店(标识可能发生变化) + WxMerchant wxMerchant = wxMerchantService.getById(msg.getMerchantId()); + if(wxMerchant != null){ + businessId = wxMerchant.getBusinessId(); + } } + WxCreditHistory creditHistory = new WxCreditHistory(); creditHistory.setTenantId(msg.getFinalTenantId()); creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); creditHistory.setOperatorId(msg.getCUserId()); creditHistory.setCUserId(msg.getCUserId()); creditHistory.setCreateDate(new Date()); - creditHistory.setCouponId(msg.getBusinessCircleOrderId()); + creditHistory.setCouponId(msg.getCircleOrderId()); creditHistory.setBusinessId(businessId); creditHistory.setMerchantId(msg.getMerchantId()); - if(MaUtil.noticeEventType.equals(msg.getEventType())){ + if(EnumYesOrNo.YES.getCode().equals(msg.getIsRefund())){ - creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); - creditHistory.setSpend(msg.getAmount()); - creditHistory.setChangePurpose("商圈消费:消费商户["+msg.getWxShopName()+"] ("+creditHistory.getSpendStr()+"元) "); + if(wxBusinessCircleOrder.getIsRefundPoints() == null){ + logger.error("积分数据异常------"+ wxBusinessCircleOrder.getId()); + return; + } + + if(wxBusinessCircleOrder.getIsRefundPoints().equals(EnumYesOrNo.YES.getCode())){ + logger.error("积分已退------"+ wxBusinessCircleOrder.getId()); + return; + } + + creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); + creditHistory.setCreditNum(wxBusinessCircleOrder.getIncreasedPoints()); + + creditHistory.setSpend(0-msg.getAmount()); + + creditHistory.setChangePurpose("商圈消费退款:商户["+msg.getShopName()+"] ("+creditHistory.getSpendStr()+"元) ");// creditHistory = creditHistoryService.saveOrUpdate(creditHistory,msg.getTenantId()); Integer creditNum = 0; if (creditHistory.getCreditNum() != null) { @@ -99,20 +115,19 @@ public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { return; } - wxBusinessCircleOrder.setIncreasedPoints(creditNum); - wxBusinessCircleOrder.setPointsUpdateTime(creditHistory.getCreateDate()); - businessCircleOrderService.updateAddPoints(wxBusinessCircleOrder); - - this.notifyPoints(wxBusinessCircleOrder); - - }else if(MaUtil.refundEventType.equals(msg.getEventType())){ + wxBusinessCircleOrder.setRefundPointsTime(creditHistory.getCreateDate()); + businessCircleOrderService.updateRefundPoints(wxBusinessCircleOrder); - creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); - creditHistory.setCreditNum(wxBusinessCircleOrder.getIncreasedPoints()); + }else if(EnumYesOrNo.NO.getCode().equals(msg.getIsRefund())){ - creditHistory.setSpend(0-msg.getAmount()); + if(wxBusinessCircleOrder.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ + logger.error("已加过积分------"+ wxBusinessCircleOrder.getId()); + return; + } - creditHistory.setChangePurpose("商圈消费退款:消费商户["+msg.getWxShopName()+"] ("+creditHistory.getSpendStr()+"元) ");// + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setSpend(msg.getAmount()); + creditHistory.setChangePurpose("商圈消费:消费商户["+msg.getShopName()+"] ("+creditHistory.getSpendStr()+"元) "); creditHistory = creditHistoryService.saveOrUpdate(creditHistory,msg.getTenantId()); Integer creditNum = 0; if (creditHistory.getCreditNum() != null) { @@ -122,12 +137,21 @@ public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { return; } - wxBusinessCircleOrder.setRefundPointsTime(creditHistory.getCreateDate()); - businessCircleOrderService.updateRefundPoints(wxBusinessCircleOrder); + wxBusinessCircleOrder.setIncreasedPoints(creditNum); + wxBusinessCircleOrder.setPointsUpdateTime(creditHistory.getCreateDate()); + businessCircleOrderService.updateAddPoints(wxBusinessCircleOrder); + + this.notifyPoints(wxBusinessCircleOrder); } + } private void notifyPoints(WxBusinessCircleOrder wxBusinessCircleOrder) throws Exception{ + + if(wxBusinessCircleOrder.getIsPointsNotify().equals(EnumYesOrNo.YES.getCode())){ + logger.error("积分已同步------"+ wxBusinessCircleOrder.getId()); + return; + } //添加积分成功,做积分同步 WxPayService wxPayService = wxPayAccountService.getWxPayService(wxBusinessCircleOrder.getTenantId()); @@ -138,6 +162,7 @@ public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { request.setEarnPoints(true); request.setIncreasedPoints(wxBusinessCircleOrder.getIncreasedPoints()); request.setPointsUpdateTime(sdf.format(new Date())); + String result = wxPayService.getBusinessCircleService().notifyPoints(request); logger.info("微信商圈同步积分请求结果----"+result); diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideThirdPartyOrderMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideThirdPartyOrderMsgServiceImpl.java new file mode 100644 index 000000000..d299c01dd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideThirdPartyOrderMsgServiceImpl.java @@ -0,0 +1,145 @@ +package com.iformall.service.msg.impl; + +import com.github.binarywang.wxpay.bean.businesscircle.PointsNotifyRequest; +import com.github.binarywang.wxpay.service.WxPayService; +import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.FmInsideCircleOrderMsg; +import com.iformall.enums.EnumBusiness; +import com.iformall.enums.EnumScoreType; +import com.iformall.enums.EnumUserType; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.service.*; +import com.iformall.service.msg.MsgSendService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +/** + * + * + */ +@Service +public class FmInsideThirdPartyOrderMsgServiceImpl implements MsgSendService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'+'mm:ss", Locale.CHINA); + + + @Autowired + WxMerchantService wxMerchantService; + + @Autowired + WxCreditHistoryService creditHistoryService; + + @Autowired + WxCUserBasicInfoService cUserBasicInfoService; + + @Autowired + WxThirdPartyOrdersService thirdPartyOrdersService; + + @Autowired + WxPayAccountService wxPayAccountService; + + @Override + public void send(BaseMsg baseMsg) throws Exception { + FmInsideCircleOrderMsg msg = (FmInsideCircleOrderMsg)baseMsg; + logger.info("FmInsideThirdPartyOrderMsgServiceImpl---{}"+msg.toString()); + if(msg.getCUserId() == null){ + return; + } + WxCUserBasicInfo user = cUserBasicInfoService.getById(msg.getCUserId(), msg.getFinalTenantId()); + if(user == null){ + return; + } + + WxThirdPartyOrders wxThirdPartyOrders = thirdPartyOrdersService.getById(msg.getCircleOrderId(),msg.getTenantId()); + if(wxThirdPartyOrders == null){ + return; + } + + Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); + + if(msg.getMerchantId() != null){ + //TODO 第三方获取门店(标识可能发生变化) + WxMerchant wxMerchant = wxMerchantService.getById(msg.getMerchantId()); + if(wxMerchant != null){ + businessId = wxMerchant.getBusinessId(); + } + } + + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setTenantId(msg.getFinalTenantId()); + creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); + creditHistory.setOperatorId(msg.getCUserId()); + creditHistory.setCUserId(msg.getCUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setCouponId(msg.getCircleOrderId()); + creditHistory.setBusinessId(businessId); + creditHistory.setMerchantId(msg.getMerchantId()); + + if(EnumYesOrNo.YES.getCode().equals(msg.getIsRefund())){ + + if(wxThirdPartyOrders.getIsRefundPoints() == null){ + logger.error("积分数据异常------"+ wxThirdPartyOrders.getId()); + return; + } + + if(wxThirdPartyOrders.getIsRefundPoints().equals(EnumYesOrNo.YES.getCode())){ + logger.error("积分已退------"+ wxThirdPartyOrders.getId()); + return; + } + + creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); + creditHistory.setCreditNum(wxThirdPartyOrders.getIncreasedPoints()); + + creditHistory.setSpend(0-msg.getAmount()); + + creditHistory.setChangePurpose("第三方消费退款:商户["+msg.getShopName()+"] ("+creditHistory.getSpendStr()+"元) ");// + creditHistory = creditHistoryService.saveOrUpdate(creditHistory,msg.getTenantId()); + Integer creditNum = 0; + if (creditHistory.getCreditNum() != null) { + creditNum = creditHistory.getCreditNum(); + } + if(creditNum == 0){ + return; + } + + wxThirdPartyOrders.setRefundPointsTime(creditHistory.getCreateDate()); + thirdPartyOrdersService.updateRefundPoints(wxThirdPartyOrders); + + }else if(EnumYesOrNo.NO.getCode().equals(msg.getIsRefund())){ + + if(wxThirdPartyOrders.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ + logger.error("已加过积分------"+ wxThirdPartyOrders.getId()); + return; + } + + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setSpend(msg.getAmount()); + creditHistory.setChangePurpose("第三方消费:消费商户["+msg.getShopName()+"] ("+creditHistory.getSpendStr()+"元) "); + creditHistory = creditHistoryService.saveOrUpdate(creditHistory,msg.getTenantId()); + Integer creditNum = 0; + if (creditHistory.getCreditNum() != null) { + creditNum = creditHistory.getCreditNum(); + } + if(creditNum == 0){ + return; + } + + wxThirdPartyOrders.setIncreasedPoints(creditNum); + wxThirdPartyOrders.setPointsUpdateTime(creditHistory.getCreateDate()); + thirdPartyOrdersService.updateAddPoints(wxThirdPartyOrders); + + } + + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/utils/MaUtil.java b/mallinkService/src/main/java/com/iformall/utils/MaUtil.java index c5c06cea3..a15d671a9 100644 --- a/mallinkService/src/main/java/com/iformall/utils/MaUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/MaUtil.java @@ -13,9 +13,6 @@ import org.apache.commons.lang3.StringUtils; public class MaUtil { - public static final String noticeEventType = "MALL_TRANSACTION.SUCCESS"; - public static final String refundEventType = "MALL_REFUND.SUCCESS"; - static public WxMaService getWeappService(WxAppinfo appinfo) { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(appinfo.getAppId()); diff --git a/mallinkService/src/main/resources/mapper/WxBusinessCircleOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxBusinessCircleOrderMapper.xml index e7f1d6ddf..817c8e93c 100644 --- a/mallinkService/src/main/resources/mapper/WxBusinessCircleOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBusinessCircleOrderMapper.xml @@ -199,13 +199,13 @@ update wx_business_circle_order set `earn_points` = 1, `increased_points` = #{increasedPoints}, `points_update_time` = #{pointsUpdateTime}, - `is_refund_points` = 0, #{updateTime} + `is_refund_points` = 0, `update_time` = #{updateTime} where `id` = #{id} and `tenant_id` = #{tenantId} update wx_business_circle_order set - `is_points_notify` = 1, #{updateTime} + `is_points_notify` = 1, `update_time` = #{updateTime} where `id` = #{id} and `tenant_id` = #{tenantId} @@ -214,13 +214,13 @@ update wx_business_circle_order set `is_refund` = 1, `refund_notice_id` = #{refundNoticeId}, `refund_create_time` = #{refundCreateTime}, `refund_event_type` = #{refundEventType}, `refund_resource_type` = #{refundResourceType}, `refund_summary` = #{refundSummary}, - `refund_time` = #{refundTime}, `refund_amount` = #{refundAmount}, `refund_id` = #{refundId}, #{updateTime} + `refund_time` = #{refundTime}, `refund_amount` = #{refundAmount}, `refund_id` = #{refundId},`update_time` = #{updateTime} where `id` = #{id} and `tenant_id` = #{tenantId} update wx_business_circle_order set - `is_refund_points` = 1, `refund_points_time` = #{refundPointsTime}, #{updateTime} + `is_refund_points` = 1, `refund_points_time` = #{refundPointsTime}, `update_time` = #{updateTime} where `id` = #{id} and `tenant_id` = #{tenantId} diff --git a/mallinkService/src/main/resources/mapper/WxThirdPartyOrdersMapper.xml b/mallinkService/src/main/resources/mapper/WxThirdPartyOrdersMapper.xml new file mode 100644 index 000000000..509a66a76 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxThirdPartyOrdersMapper.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `id`, `tenant_id`, `parent_tenant_id`, `source_app_id`, `shop_name`, `shop_number`, + `user_phone`, `user_number`, `time_end`, `amount`, `transaction_id`, `summary`, + `create_time`, `update_time`, `merchant_id`, `c_user_id`, + `earn_points`, `increased_points`, `points_update_time`, + `is_refund`, `refund_summary`, `refund_time`, `refund_amount`, `refund_id`, + `is_refund_points`, `refund_points_time` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `source_app_id` = #{sourceAppId} + + + + and `shop_name` like concat('%', #{shopName},'%') + + + + and `shop_number` = #{shopNumber} + + + + and `user_phone` = #{userPhone} + + + + and `user_number` = #{userNumber} + + + + and `time_end` >= #{startTime} + + + and `time_end` < #{endTime} + + + + and `transaction_id` = #{transactionId} + + + + and `merchant_id` = #{merchantId} + + + + and `c_user_id` = #{cUserId} + + + + and `earn_points` = #{earnPoints} + + + + and `is_refund` = #{isRefund} + + + + and `refund_id` = #{refundId} + + + + and `is_refund_points` = #{isRefundPoints} + + + + and `id` in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + INSERT INTO wx_business_circle_order ( + `id`, `tenant_id`, `parent_tenant_id`, `source_app_id`,`shop_name`, `shop_number`, + `user_phone`, `user_number`, `time_end`, `amount`, `transaction_id`, `summary`, + `create_time`, `update_time`, `merchant_id`, `c_user_id`, `earn_points`, `is_refund` + ) + VALUES( + #{id},#{tenantId},#{parentTenantId},#{sourceAppId},#{shopName},#{shopNumber}, + #{userPhone},#{userNumber},#{timeEnd},#{amount},#{transactionId},#{summary}, + #{createTime},#{updateTime}, #{merchantId},#{cUserId},0,0 + ); + + + + update wx_business_circle_order set + `earn_points` = 1, `increased_points` = #{increasedPoints}, `points_update_time` = #{pointsUpdateTime}, + `is_refund_points` = 0, `update_time` = #{updateTime} + where `id` = #{id} and `tenant_id` = #{tenantId} + + + + update wx_business_circle_order set + `is_refund` = 1, `refund_summary` = #{refundSummary}, + `refund_time` = #{refundTime}, `refund_amount` = #{refundAmount}, `refund_id` = #{refundId}, + `update_time` = #{updateTime} + where `id` = #{id} and `tenant_id` = #{tenantId} + + + + update wx_business_circle_order set + `is_refund_points` = 1, `refund_points_time` = #{refundPointsTime}, `update_time` = #{updateTime} + where `id` = #{id} and `tenant_id` = #{tenantId} + + +