| @@ -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); | |||
| @@ -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<WxMall> getMalls() { | |||
| WxMall wxMall = new WxMall(); | |||
| return wxMallMapper.findList(wxMall); | |||
| } | |||
| //查询新创建的订单,增量同步wxCouponOrder.因为中间有些订单有付了款,有没付款 | |||
| @Async | |||
| @Scheduled(cron = "0 50 0 * * ?") // 每天凌晨00:50 | |||
| public void updateWxCouponOrderSchedule() { | |||
| List<WxMall> 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<AiOrder> 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<WxCouponOrder> 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<WxMall> 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<AiOrder> aiOrderList = aiOrderService.list(ao); | |||
| if (null != aiOrderList && aiOrderList.size() > 0 ) { | |||
| Map<Long, WxBrand> brandMap = wxBrandService.getAllMap(mall); | |||
| Map<Integer, WxBusiness> businessMap = wxBusinessService.findAllMap(mall); | |||
| for (AiOrder _ao : aiOrderList) { | |||
| try { | |||
| WxCouponOrder co = new WxCouponOrder(); | |||
| co.updateTenantInfo(_ao); | |||
| co.setOrderId(_ao.getOrderId()); | |||
| List<WxCouponOrder> 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); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -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<Integer> 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; | |||
| } | |||
| @@ -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<WxOrder> orderList; | |||
| } | |||
| @@ -43,6 +43,8 @@ public enum EnumMsgRecordType { | |||
| BILL_PAID(115,"账单支付回调"), | |||
| CREATE_COUPASSWORD(116,"账单支付回调"), | |||
| CREATE_ORDER(117,"创建订单后"), | |||
| INSIDE_ORDER_PUSH_DELIVERY(200, "2.0核销同步"), | |||
| ; | |||
| @@ -17,6 +17,8 @@ public interface AiOrderService { | |||
| */ | |||
| PageInfo<AiOrder> listAsPage(AiOrder record, Integer pageIndex, Integer pageSize); | |||
| List<AiOrder> list(AiOrder record); | |||
| /** | |||
| * 根据Id获得实体 | |||
| * | |||
| @@ -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<AiOrder> listAsPage(AiOrder record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> aiOrderMapper.findList(record)); | |||
| } | |||
| @Override | |||
| public List<AiOrder> list(AiOrder record) { | |||
| return aiOrderMapper.findList(record); | |||
| } | |||
| @Override | |||
| public AiOrder getById(Long id,String tenantId) { | |||
| @@ -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<WxOrder> orderList = new ArrayList<WxOrder>(); | |||
| 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<WxOrder> 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{ | |||
| @@ -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<WxOrder> 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); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -34,4 +34,6 @@ public class WxComposeOrder extends TenantEntity{ | |||
| private List<Map<String,String>> extParam;//处理其他返回参数 | |||
| private List<WxOrder> orderList;//创建的订单列表 | |||
| } | |||
| @@ -19,7 +19,7 @@ | |||
| <result column="b_merchant_name" jdbcType="VARCHAR" property="bMerchantName" /> | |||
| <result column="brand_id" jdbcType="BIGINT" property="brandId" /> | |||
| <result column="brand_name" jdbcType="VARCHAR" property="brandName" /> | |||
| <result column="bussiness" jdbcType="BIGINT" property="bussiness" /> | |||
| <result column="bussiness" jdbcType="INTEGER" property="bussiness" /> | |||
| <result column="bussiness_name" jdbcType="VARCHAR" property="bussinessName" /> | |||
| <result column="shop_number" jdbcType="VARCHAR" property="shopNumber" /> | |||
| <result column="send_merchant_id" jdbcType="INTEGER" property="sendMerchantId" /> | |||
| @@ -82,6 +82,22 @@ | |||
| and `send_merchant_id` = #{sendMerchantId} | |||
| </if> | |||
| <if test=" null != noCouponOrder "> | |||
| and `coupon_order_id` is null | |||
| </if> | |||
| <if test=" null != hasCouponOrder "> | |||
| and `coupon_order_id` is not null | |||
| </if> | |||
| <if test=" null != noCouponOrderStatus "> | |||
| and `coupon_order_status` is null | |||
| </if> | |||
| <if test=" null != needUpdateCouponOrderStatus "> | |||
| and ( `coupon_order_status` is null or coupon_order_status = 0 ) | |||
| </if> | |||
| <if test=" null != lastCreateDate "> | |||
| and create_date < #{lastCreateDate} | |||
| </if> | |||
| <if test=" null != couponOrderStatusList "> | |||
| and coupon_order_status in | |||
| <foreach collection="couponOrderStatusList" index="index" item="cosidItem" open="(" separator="," close=")"> | |||