Просмотр исходного кода

wx third order

release_toaliyun_real
xhxu 5 лет назад
Родитель
Сommit
4d3ef2b051
26 измененных файлов: 957 добавлений и 129 удалений
  1. +47
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxBusinessCircleOrderController.java
  2. +4
    -0
      mallinkAdmin/src/main/resources/db/migration/V202104230001__add_flow_config.sql
  3. +3
    -2
      mallinkCallback/src/main/java/com/iformall/controller/callback/WxBusinessOrderController.java
  4. +10
    -2
      mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java
  5. +2
    -4
      mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java
  6. +2
    -0
      mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java
  7. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java
  8. +116
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyOrders.java
  9. +35
    -0
      mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCircleOrderMsg.java
  10. +2
    -2
      mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideThirdPartyOrdersMsg.java
  11. +2
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java
  12. +2
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumUserType.java
  13. +11
    -11
      mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java
  14. +43
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java
  15. +4
    -0
      mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java
  16. +7
    -7
      mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java
  17. +50
    -0
      mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java
  18. +58
    -57
      mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java
  19. +15
    -6
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java
  20. +1
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java
  21. +154
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java
  22. +54
    -29
      mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideBusinessCircleMsgServiceImpl.java
  23. +145
    -0
      mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideThirdPartyOrderMsgServiceImpl.java
  24. +0
    -3
      mallinkService/src/main/java/com/iformall/utils/MaUtil.java
  25. +4
    -4
      mallinkService/src/main/resources/mapper/WxBusinessCircleOrderMapper.xml
  26. +183
    -0
      mallinkService/src/main/resources/mapper/WxThirdPartyOrdersMapper.xml

+ 47
- 0
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<WxBusinessCircleOrder> page = wxBusinessCircleOrderService.listAsPage(circleOrder, pageNum, pageSize);
return new ResultData(page);
}


}

+ 4
- 0
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 = '营销审批';

+ 3
- 2
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());



+ 10
- 2
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);
/**


+ 2
- 4
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);


+ 2
- 0
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);


+ 3
- 0
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<WxLevelConfig> lecelList;

@Excel(name="积分",width = 20, orderNum = "12")
@io.swagger.annotations.ApiModelProperty(value="积分",name="credit")
private Integer credit;


+ 116
- 0
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;
}

+ 35
- 0
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;


}

mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideBusinessCircleMsg.java → 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")

+ 2
- 1
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) {


+ 2
- 1
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) {


+ 11
- 11
mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java Просмотреть файл

@@ -9,38 +9,38 @@ public interface WxBusinessCircleOrderMapper extends CommonMapper<WxBusinessCirc
List<WxBusinessCircleOrder> 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);


}

+ 43
- 0
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<WxThirdPartyOrders, Long> {
List<WxThirdPartyOrders> 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);


}

+ 4
- 0
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";



+ 7
- 7
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);


}

+ 50
- 0
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<WxThirdPartyOrders> 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);


}

+ 58
- 57
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);
}




+ 15
- 6
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<WxLevelConfig> 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);


+ 1
- 0
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')," +


+ 154
- 0
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<WxThirdPartyOrders> 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);
}


}

+ 54
- 29
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);



+ 145
- 0
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);

}

}


}

+ 0
- 3
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());


+ 4
- 4
mallinkService/src/main/resources/mapper/WxBusinessCircleOrderMapper.xml Просмотреть файл

@@ -199,13 +199,13 @@
<update id="updateAddPoints" parameterType="com.iformall.domain.po.WxBusinessCircleOrder">
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>

<update id="updateIsPointsNotify" parameterType="com.iformall.domain.po.WxBusinessCircleOrder">
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}
</update>

@@ -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>

<update id="updateRefundPoints" parameterType="com.iformall.domain.po.WxBusinessCircleOrder">
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}
</update>



+ 183
- 0
mallinkService/src/main/resources/mapper/WxThirdPartyOrdersMapper.xml Просмотреть файл

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxThirdPartyOrdersMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxThirdPartyOrders">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" />
<result column="source_app_id" jdbcType="VARCHAR" property="sourceAppId"/>
<result column="shop_name" jdbcType="VARCHAR" property="shopName" />
<result column="shop_number" jdbcType="VARCHAR" property="shopNumber" />
<result column="user_phone" jdbcType="VARCHAR" property="userPhone" />
<result column="user_number" jdbcType="VARCHAR" property="userNumber" />
<result column="time_end" jdbcType="TIMESTAMP" property="timeEnd"/>
<result column="amount" jdbcType="INTEGER" property="amount"/>
<result column="transaction_id" jdbcType="VARCHAR" property="transactionId" />
<result column="summary" jdbcType="VARCHAR" property="summary" />

<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="merchant_id" jdbcType="BIGINT" property="merchantId"/>
<result column="c_user_id" jdbcType="BIGINT" property="cUserId"/>

<result column="earn_points" jdbcType="TINYINT" property="earnPoints"/>
<result column="increased_points" jdbcType="INTEGER" property="increasedPoints"/>
<result column="points_update_time" jdbcType="TIMESTAMP" property="pointsUpdateTime"/>

<result column="is_refund" jdbcType="TINYINT" property="isRefund"/>
<result column="refund_summary" jdbcType="VARCHAR" property="refundSummary" />
<result column="refund_time" jdbcType="TIMESTAMP" property="refundTime"/>
<result column="refund_amount" jdbcType="INTEGER" property="refundAmount"/>
<result column="refund_id" jdbcType="VARCHAR" property="refundId" />

<result column="is_refund_points" jdbcType="TINYINT" property="isRefundPoints"/>
<result column="refund_points_time" jdbcType="TIMESTAMP" property="refundPointsTime"/>

</resultMap>


<sql id="allColumns">
`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`
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1

<if test=" null != id ">
and `id` = #{id}
</if>

<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != sourceAppId and '' != sourceAppId">
and `source_app_id` = #{sourceAppId}
</if>

<if test=" null != shopName ">
and `shop_name` like concat('%', #{shopName},'%')
</if>

<if test=" null != shopNumber and '' != shopNumber">
and `shop_number` = #{shopNumber}
</if>

<if test=" null != userPhone and '' != userPhone">
and `user_phone` = #{userPhone}
</if>

<if test=" null != userNumber and '' != userNumber">
and `user_number` = #{userNumber}
</if>

<if test=" null != startTime ">
and `time_end` &gt;= #{startTime}
</if>
<if test=" null != endTime">
and `time_end` &lt; #{endTime}
</if>

<if test=" null != transactionId and '' != transactionId">
and `transaction_id` = #{transactionId}
</if>

<if test=" null != merchantId ">
and `merchant_id` = #{merchantId}
</if>

<if test=" null != cUserId ">
and `c_user_id` = #{cUserId}
</if>

<if test=" null != earnPoints ">
and `earn_points` = #{earnPoints}
</if>

<if test=" null != isRefund ">
and `is_refund` = #{isRefund}
</if>

<if test=" null != refundId and '' != refundId">
and `refund_id` = #{refundId}
</if>

<if test=" null != isRefundPoints">
and `is_refund_points` = #{isRefundPoints}
</if>

<if test=" null != ids ">
and `id` in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns">order by ${sortColumns}</if>
</sql>

<select id="findList" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_third_party_orders
<include refid="dynamicWhereConditions"/>
</select>

<select id="getById" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_third_party_orders
where `id` = #{id}
and tenant_id=#{tenantId}
</select>

<select id="getByTransactionId" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_third_party_orders
where `transaction_id` = #{transactionId}
and tenant_id=#{tenantId}
</select>

<insert id="insertNoticeOrder" parameterType="com.iformall.domain.po.WxThirdPartyOrders" >
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
);
</insert>

<update id="updateAddPoints" parameterType="com.iformall.domain.po.WxThirdPartyOrders">
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>

<update id="updateRefundNoticeOrder" parameterType="com.iformall.domain.po.WxThirdPartyOrders">
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>

<update id="updateRefundPoints" parameterType="com.iformall.domain.po.WxThirdPartyOrders">
update wx_business_circle_order set
`is_refund_points` = 1, `refund_points_time` = #{refundPointsTime}, `update_time` = #{updateTime}
where `id` = #{id} and `tenant_id` = #{tenantId}
</update>

</mapper>

Загрузка…
Отмена
Сохранить