diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index e1c929336..3faec81f1 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -88,6 +88,9 @@ public class MqBaseConsumer { @Autowired private CreateCouponPasswordMsgServiceImpl createCouponPasswordMsgServiceImpl; + + @Autowired + private FmInsideCreateOrderMsgServiceImpl fmInsideCreateOrderMsgServiceImpl; public void doMessage(String message) { log.info("received message: {}", message); @@ -251,6 +254,11 @@ public class MqBaseConsumer { FmInsideCreateCouponPasswordMsg msg = (FmInsideCreateCouponPasswordMsg) JsonUtil.readValue(message,FmInsideCreateCouponPasswordMsg.class); createCouponPasswordMsgServiceImpl.send(msg); } + + else if (EnumMsgRecordType.CREATE_ORDER.getCode().equals(baseMsg.getMsgType())) { + FmInsideCreateOrderMsg msg = (FmInsideCreateOrderMsg) JsonUtil.readValue(message,FmInsideCreateOrderMsg.class); + fmInsideCreateOrderMsgServiceImpl.send(msg); + } }catch (Throwable e){ log.error("consum received error: ", e); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/AiOrderSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/AiOrderSchedule.java new file mode 100644 index 000000000..2a65013a0 --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/AiOrderSchedule.java @@ -0,0 +1,205 @@ +package com.iformall.schedule; + +import com.iformall.domain.po.*; +import com.iformall.enums.EnumCashOutStatus; +import com.iformall.enums.EnumCouponOrderStatus; +import com.iformall.enums.EnumPayWay; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.mapper.WxBrandMapper; +import com.iformall.mapper.WxCUserBasicInfoMapper; +import com.iformall.mapper.WxCashOutMapper; +import com.iformall.mapper.WxCouponMapper; +import com.iformall.mapper.WxCouponOrderMapper; +import com.iformall.mapper.WxMallMapper; +import com.iformall.mapper.WxMerchantBUserMapper; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.service.AiOrderService; +import com.iformall.service.WxAppinfoService; +import com.iformall.service.WxBrandService; +import com.iformall.service.WxBusinessService; +import com.iformall.service.WxPayAccountService; +import com.iformall.service.pay.PayServiceFactory; +import com.iformall.service.pay.service.cashout.entity.CashOutAdapterResult; +import com.iformall.utils.DateUtils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Component +public class AiOrderSchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxMallMapper wxMallMapper; + @Autowired + AiOrderService aiOrderService; + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxCouponMapper wxCouponMapper; + @Autowired + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + @Autowired + WxMerchantBUserMapper wxMerchantBUserMapper; + @Autowired + WxMerchantMapper wxMerchantMapper; + @Autowired + WxBrandService wxBrandService; + @Autowired + WxBusinessService wxBusinessService; + + + private List getMalls() { + WxMall wxMall = new WxMall(); + return wxMallMapper.findList(wxMall); + } + + //查询新创建的订单,增量同步wxCouponOrder.因为中间有些订单有付了款,有没付款 + @Async + @Scheduled(cron = "0 50 0 * * ?") // 每天凌晨00:50 + public void updateWxCouponOrderSchedule() { + List malls = getMalls(); + for (WxMall mall : malls) { + + AiOrder ao = new AiOrder(); + ao.updateTenantInfo(mall); + //没有couponOrder的同步 + ao.setNoCouponOrder(EnumYesOrNo.YES.getCode()); + ao.setNoCouponOrderStatus(EnumYesOrNo.YES.getCode()); + ao.setLastCreateDate(DateUtils.getDayBegin(new Date())); + + List aiOrderList = aiOrderService.list(ao); + if (null != aiOrderList && aiOrderList.size() > 0 ) { + for (AiOrder _ao : aiOrderList) { + try { + WxCouponOrder co = new WxCouponOrder(); + co.updateTenantInfo(_ao); + co.setOrderId(_ao.getOrderId()); + List colist = wxCouponOrderMapper.findList(co); + if (null != colist && colist.size() > 0) { + WxCouponOrder wco = colist.get(0); + _ao.setCouponOrderId(wco.getId()); + _ao.setCouponId(wco.getCouponId()); + _ao.setCouponType(wco.getCouponType()); + WxCoupon coupon = wxCouponMapper.selectById(wco.getCouponId(), _ao.getTenantId()); + if (null != coupon) { + _ao.setCouponTitle(coupon.getTitle()); + _ao.setCouponPrice(coupon.getPrice()); + } + _ao.setCouponSalePrice(wco.getCouponPrice()); + _ao.setCouponSubsidy(wco.getSubsidy()); + _ao.setExpiredTime(wco.getExpiredTime()); + + _ao.setOwnerId(wco.getOwnerId()); + WxCUserBasicInfo cui = wxCUserBasicInfoMapper.selectById(wco.getOwnerId(), _ao.getTenantId()); + if (null != cui) { + _ao.setOwnerPhone(cui.getPhone()); + _ao.setOwnerNickName(cui.getNickName()); + } + _ao.setCouponOrderStatus(wco.getCouponOrderStatus()); + aiOrderService.saveOrUpdate(_ao); + }else { + //因为昨天未支付的订单现在肯定是已作废状态了 + _ao.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); + aiOrderService.saveOrUpdate(_ao); + } + }catch(Exception e) { + logger.error("aiOrder updateWxCouponOrderSchedule error:"+_ao.getId(),e); + } + } + } + } + } + + //更新coupon_order_status==0或者为空的订单, 因为订单可能被核销等操作会变更一些数据 + @Async + @Scheduled(cron = "0 0 0/2 * * ?") // 每2个小时执行一次 + public void updateOrderSchedule() { + List malls = getMalls(); + for (WxMall mall : malls) { + try { + + AiOrder ao = new AiOrder(); + ao.updateTenantInfo(mall); + ao.setHasCouponOrder(EnumYesOrNo.YES.getCode()); + ao.setNeedUpdateCouponOrderStatus(EnumYesOrNo.YES.getCode()); + List aiOrderList = aiOrderService.list(ao); + if (null != aiOrderList && aiOrderList.size() > 0 ) { + Map brandMap = wxBrandService.getAllMap(mall); + Map businessMap = wxBusinessService.findAllMap(mall); + + + for (AiOrder _ao : aiOrderList) { + try { + WxCouponOrder co = new WxCouponOrder(); + co.updateTenantInfo(_ao); + co.setOrderId(_ao.getOrderId()); + List colist = wxCouponOrderMapper.findList(co); + if (null != colist && colist.size() > 0) { + WxCouponOrder wco = colist.get(0); + if (null != wco.getBUserId()) { + _ao.setBUserId(wco.getBUserId()); + WxMerchantBUser mbu = wxMerchantBUserMapper.selectById(wco.getBUserId()); + if (null != mbu) { + _ao.setBUserPhone(mbu.getPhone()); + } + _ao.setBMerchantId(wco.getBMerchantId()); + WxMerchant merchant = wxMerchantMapper.selectById(wco.getBMerchantId()); + if (null != merchant) { + _ao.setBMerchantName(merchant.getName()); + _ao.setBrandId(merchant.getBrand()); + if (null != merchant.getBrand() && null != brandMap) { + WxBrand brand = brandMap.get(merchant.getBrand()); + if (null != brand) { + _ao.setBrandName(brand.getName()); + } + } + + _ao.setBussiness(merchant.getBusinessId()); + if (null != merchant.getBusinessId() && null != businessMap) { + WxBusiness business = businessMap.get(merchant.getBusinessId()); + if (null != business) { + _ao.setBussinessName(business.getTitle()); + } + } + //_ao.setShopNumber(); + } + } + _ao.setSendMerchantId(wco.getSendMerchantId()); + if (null != wco.getSendMerchantId()) { + WxMerchant smerchant = wxMerchantMapper.selectById(wco.getSendMerchantId()); + if (null != smerchant) { + _ao.setSendMerchantName(smerchant.getName()); + } + } + if (wco.getCouponOrderStatus().intValue() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode().intValue()) { + _ao.setVerifyTime(wco.getUpdateDate()); + } + _ao.setCouponOrderStatus(wco.getCouponOrderStatus()); + aiOrderService.saveOrUpdate(_ao); + } + }catch(Exception e) { + logger.error("aiOrder updateOrderSchedule error.mall:"+mall.getTenantId(),e); + } + } + } + }catch(Exception e) { + logger.error("aiOrder updateOrderSchedule error.mall:"+mall.getTenantId(),e); + } + } + } + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/AiOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/AiOrder.java index b93232b36..3c1709180 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/AiOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/AiOrder.java @@ -59,7 +59,7 @@ public class AiOrder extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "品牌名称", name = "brandName") private String brandName; @io.swagger.annotations.ApiModelProperty(value = "业态", name = "bussiness") - private Long bussiness; + private Integer bussiness; @io.swagger.annotations.ApiModelProperty(value = "品牌名称", name = "bussinessName") private String bussinessName; @io.swagger.annotations.ApiModelProperty(value = "店铺号", name = "shopNumber") @@ -84,6 +84,18 @@ public class AiOrder extends TenantEntity { private String ownerNickName; @io.swagger.annotations.ApiModelProperty(value = "EnumCouponOrderStatus", name = "couponOrderStatus") private Integer couponOrderStatus; + @TableField(exist = false) private List couponOrderStatusList; + @TableField(exist = false) + private Integer noCouponOrder; + @TableField(exist = false) + private Integer hasCouponOrder; + @TableField(exist = false) + private Integer noCouponOrderStatus; + @TableField(exist = false) + private Integer needUpdateCouponOrderStatus; + @TableField(exist = false) + private Date lastCreateDate; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCreateOrderMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCreateOrderMsg.java new file mode 100644 index 000000000..c270159e2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCreateOrderMsg.java @@ -0,0 +1,20 @@ +package com.iformall.domain.po.msg; + +import java.util.List; + +import com.iformall.domain.po.WxOrder; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class FmInsideCreateOrderMsg extends BaseMsg{ + + private static final long serialVersionUID = -1136114221897577385L; + @io.swagger.annotations.ApiModelProperty(value = "", name = "") + private List orderList; + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index 6bc978dad..760293ff3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -43,6 +43,8 @@ public enum EnumMsgRecordType { BILL_PAID(115,"账单支付回调"), CREATE_COUPASSWORD(116,"账单支付回调"), + + CREATE_ORDER(117,"创建订单后"), INSIDE_ORDER_PUSH_DELIVERY(200, "2.0核销同步"), ; diff --git a/mallinkService/src/main/java/com/iformall/service/AiOrderService.java b/mallinkService/src/main/java/com/iformall/service/AiOrderService.java index 3fdd20257..e2d4e6c1f 100644 --- a/mallinkService/src/main/java/com/iformall/service/AiOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/AiOrderService.java @@ -17,6 +17,8 @@ public interface AiOrderService { */ PageInfo listAsPage(AiOrder record, Integer pageIndex, Integer pageSize); + List list(AiOrder record); + /** * 根据Id获得实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/impl/AiOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/AiOrderServiceImpl.java index c55c313ae..a04738d3a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/AiOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/AiOrderServiceImpl.java @@ -7,6 +7,8 @@ import com.iformall.domain.po.AiOrder; import com.iformall.mapper.AiOrderMapper; import com.iformall.service.AiOrderService; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +26,11 @@ public class AiOrderServiceImpl implements AiOrderService { public PageInfo listAsPage(AiOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> aiOrderMapper.findList(record)); } + + @Override + public List list(AiOrder record) { + return aiOrderMapper.findList(record); + } @Override public AiOrder getById(Long id,String tenantId) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 8fb02c3ec..4730b4d5b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -3089,6 +3089,7 @@ public class WxOrderServiceImpl implements WxOrderService { WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(tenantEntity,user, orderSave, payWay,payVersion); Date orderDate = new Date(); WxOrder lastOrder = null; + List orderList = new ArrayList(); for (int i = 0 ; i < orderSave.size(); i ++) { OrderComposeSaveDto orderdto = orderSave.get(i); @@ -3096,21 +3097,25 @@ public class WxOrderServiceImpl implements WxOrderService { boolean isOneNumberOneOrder = orderAdapterService.isOneNumberOneOrder(); if (isOneNumberOneOrder) { for (int j = 0; j < orderdto.getCount(); j++) { - lastOrder = proxy.handleSaveOrderForCouponSingle(orderDate,allowUnPayOrder,composeOrder, user, orderdto.getWxCoupon(), 1, + WxOrder _order = proxy.handleSaveOrderForCouponSingle(orderDate,allowUnPayOrder,composeOrder, user, orderdto.getWxCoupon(), 1, orderdto.getSignleOrder().isPressOrder(),orderdto.getSignleOrder().getOrderGroupId(),orderdto.getSignleOrder().getFormId(), orderdto.getShippingType(),orderdto.getAddress(),orderdto.getExtParam(),orderdto.getWxCouponChannel(), payWay,payVersion); + lastOrder = _order; + orderList.add(_order); } }else { lastOrder = proxy.handleSaveOrderForCouponSingle(orderDate,allowUnPayOrder,composeOrder, user, orderdto.getWxCoupon(), orderdto.getCount(), orderdto.getSignleOrder().isPressOrder(),orderdto.getSignleOrder().getOrderGroupId(),orderdto.getSignleOrder().getFormId(), orderdto.getShippingType(),orderdto.getAddress(),orderdto.getExtParam(),orderdto.getWxCouponChannel(), payWay,payVersion); + orderList.add(lastOrder); } } //如果没有orderId,则用lastOrder的信息 if (EnumComposeOrder.isSingle(composeOrderType.getCode())) { composeOrder.setSingleOrder(lastOrder); } - return composeOrder; + composeOrder.setOrderList(orderList); + return composeOrder; } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @@ -3700,6 +3705,10 @@ public class WxOrderServiceImpl implements WxOrderService { WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); try { WxComposeOrder order = proxy.saveOrderForCoupon(tenantEntity,allowUnPayOrder,composeOrderType,wxCUserBasicInfo, composeOrderSaveDto, payWay,payVersion); + //aiOrder + if (null != order && null != order.getOrderList() && order.getOrderList().size() > 0 ) { + sendInsideCreateOrderMsg(tenantEntity,order.getOrderList()); + } return new ResultData(order); } catch (MallinkException e) { logger.error("saveOrderForCoupon error.",e); @@ -3718,6 +3727,20 @@ public class WxOrderServiceImpl implements WxOrderService { } + private void sendInsideCreateOrderMsg(TenantEntity tenantEntity,List orderList) { + try{ + FmInsideCreateOrderMsg orderPush = new FmInsideCreateOrderMsg(); + orderPush.setDelayTimeLevel(5); + orderPush.setMsgType(EnumMsgRecordType.CREATE_ORDER.getCode()); + orderPush.updateTenantInfo(tenantEntity); + orderPush.setOrderList(orderList); + logger.info(">>>>>>>>>>>send sendInsideCreateOrderMsg :"+orderPush); + mqBaseProducer.sendMessage(orderPush, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + }catch(Exception e){ + logger.error(">>>>>>>>>>>send sendInsideCreateOrderMsg : error"+e.getMessage()); + } + } + @Override public void sendInsideOrderPushMsg(TenantEntity tenantEntity,Long composeOrderId,Integer thirdType) { try{ diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCreateOrderMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCreateOrderMsgServiceImpl.java new file mode 100644 index 000000000..7400c67b0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCreateOrderMsgServiceImpl.java @@ -0,0 +1,45 @@ +package com.iformall.service.msg.impl; + +import com.iformall.domain.po.AiOrder; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.FmInsideCreateOrderMsg; +import com.iformall.service.AiOrderService; +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.util.List; + +/** + * + */ +@Service +public class FmInsideCreateOrderMsgServiceImpl implements MsgSendService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private AiOrderService aiOrderService; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + FmInsideCreateOrderMsg createOrderMsg = (FmInsideCreateOrderMsg)baseMsg; + List orderList = createOrderMsg.getOrderList(); + if (null != orderList && orderList.size() > 0 ) { + for (int i = 0 ; i < orderList.size(); i++) { + WxOrder o = orderList.get(i); + AiOrder ao = new AiOrder(); + ao.updateTenantInfo(createOrderMsg.getTenantInfo()); + ao.setOrderId(o.getId()); + ao.setCreateDate(o.getCreateDate()); + ao.setUpdateDate(o.getUpdateDate()); + aiOrderService.saveOrUpdate(ao); + } + } + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java index fa39638aa..50c01757c 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java @@ -34,4 +34,6 @@ public class WxComposeOrder extends TenantEntity{ private List> extParam;//处理其他返回参数 + private List orderList;//创建的订单列表 + } diff --git a/mallinkService/src/main/resources/mapper/AiOrderMapper.xml b/mallinkService/src/main/resources/mapper/AiOrderMapper.xml index 3e7b470ff..d34223a62 100644 --- a/mallinkService/src/main/resources/mapper/AiOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/AiOrderMapper.xml @@ -19,7 +19,7 @@ - + @@ -82,6 +82,22 @@ and `send_merchant_id` = #{sendMerchantId} + + and `coupon_order_id` is null + + + and `coupon_order_id` is not null + + + and `coupon_order_status` is null + + + and ( `coupon_order_status` is null or coupon_order_status = 0 ) + + + and create_date < #{lastCreateDate} + + and coupon_order_status in