| @@ -199,3 +199,6 @@ UPDATE wx_coupon_order_96 co, wx_merchant_b_user bu SET co.`b_merchant_id` = | |||
| UPDATE wx_coupon_order_97 co, wx_merchant_b_user bu SET co.`b_merchant_id` = bu.`merchant_id` WHERE co.`b_user_id` = bu.`id`; | |||
| UPDATE wx_coupon_order_98 co, wx_merchant_b_user bu SET co.`b_merchant_id` = bu.`merchant_id` WHERE co.`b_user_id` = bu.`id`; | |||
| UPDATE wx_coupon_order_99 co, wx_merchant_b_user bu SET co.`b_merchant_id` = bu.`merchant_id` WHERE co.`b_user_id` = bu.`id`; | |||
| @@ -237,72 +237,6 @@ public class BaseController { | |||
| return null; | |||
| } | |||
| public Long saveToBasicInfoByCUser(String userPhone,String userName,String avatarUrl,Integer sex,Long userId) { | |||
| TenantEntity tenantEntity = getTenantInfo(); | |||
| if (StringUtils.isBlank(userPhone)) | |||
| return null; | |||
| WxCUserBasicInfo byId = null; | |||
| if (null != userId) { | |||
| byId = wxCUserBasicInfoService.getById(userId,getFinalTenantId()); | |||
| } | |||
| WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(tenantEntity, userPhone); | |||
| if (basicInfo != null) { | |||
| if (byId != null) { | |||
| if (!byId.getId().equals(basicInfo.getId())) { | |||
| //数据库存在此手机号的会员,并且当前微信存在另一手机号会员 | |||
| logger.error("会员" + userId + "更换手机号时,当前手机号会员表已存在:" + userPhone); | |||
| return Long.valueOf(-1); | |||
| } | |||
| } | |||
| if (!basicInfo.getTenantId().contains("," + tenantEntity.getTenantId() + ",")) { | |||
| basicInfo.setTenantId(basicInfo.getTenantId() + tenantEntity.getTenantId() + ","); | |||
| } | |||
| basicInfo.setNickName(userName); | |||
| basicInfo.setAvatarUrl(avatarUrl); | |||
| basicInfo.setSex(sex); | |||
| wxCUserBasicInfoService.update(basicInfo); | |||
| removeCacheMember(basicInfo.getId()); | |||
| return basicInfo.getId(); | |||
| } else { | |||
| if (byId != null) { | |||
| if (!byId.getTenantId().contains("," + tenantEntity.getTenantId() + ",")) { | |||
| byId.setTenantId(byId.getTenantId() + tenantEntity.getTenantId() + ","); | |||
| } | |||
| byId.setPhone(userPhone); | |||
| byId.setNickName(userName); | |||
| byId.setAvatarUrl(avatarUrl); | |||
| byId.setSex(sex); | |||
| wxCUserBasicInfoService.update(byId); | |||
| removeCacheMember(byId.getId()); | |||
| return byId.getId(); | |||
| } else { | |||
| basicInfo = new WxCUserBasicInfo(); | |||
| basicInfo.setTenantId("," + tenantEntity.getTenantId() + ","); | |||
| basicInfo.setFinalTenantId(tenantEntity.getFinalTenantId()); | |||
| basicInfo.setPhone(userPhone); | |||
| basicInfo.setNickName(userName); | |||
| basicInfo.setAvatarUrl(avatarUrl); | |||
| basicInfo.setSex(sex); | |||
| wxCUserBasicInfoService.save(basicInfo); | |||
| removeCacheMember(basicInfo.getId()); | |||
| // 首次授权, 增加成长值及积分 | |||
| // 成长值 | |||
| wxScoreRulesService.addScore(tenantEntity, EnumScoreType.WECHAT_PHONE, basicInfo); | |||
| // 增加积分 | |||
| wxCUserBasicInfoService.addCredit(basicInfo.getId(),tenantEntity,EnumScoreType.WECHAT_PHONE); | |||
| // 外部注券 | |||
| memCouponFromDspService.couponOrderFromDsp(tenantEntity, userPhone); | |||
| return basicInfo.getId(); | |||
| } | |||
| } | |||
| } | |||
| public String getIpAddr() { | |||
| HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); | |||
| String ipaddress = IPUtil.getIpAddr(request); | |||
| @@ -197,7 +197,10 @@ public class WxPayOrderController extends BaseController { | |||
| WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(payOrder.getComposeOrder()).getComposeOrder(payOrder.getOrderId(), payOrder.getTenantId()); | |||
| //查询微信订单状态并更新 | |||
| check(composeOrder,payOrder); | |||
| boolean hasCompleted = hasCompleted(composeOrder,payOrder); | |||
| if (hasCompleted) { | |||
| return new ResultData(Result.SUCCESS, "支付状态更新成功", composeOrder); | |||
| } | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfo(payOrder, EnumPayWay.getEnum(payOrder.getPayVendor()).getPlat()); | |||
| //WxCUser user = getUser(); | |||
| @@ -231,7 +234,7 @@ public class WxPayOrderController extends BaseController { | |||
| } | |||
| } | |||
| private boolean check(WxComposeOrder composeOrder,WxPayOrder payOrder) { | |||
| private boolean hasCompleted(WxComposeOrder composeOrder,WxPayOrder payOrder) { | |||
| if (EnumComposeOrder.isSingle(composeOrder.getComposeOrderType())) { | |||
| WxOrder order = composeOrder.getSingleOrder(); | |||
| if (null == order) { | |||
| @@ -191,14 +191,6 @@ public interface WxOrderService { | |||
| void updateOrderGroupStatusByCouponChannelId(Long id, TenantEntity tenantEntity, Integer code); | |||
| /** | |||
| * 下订单 | |||
| * @param user | |||
| * @param coupon | |||
| * @return | |||
| */ | |||
| WxComposeOrder saveOrderForCoupon(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,WxCUserBasicInfo user, List<OrderComposeSaveDto> orderSave,EnumPayWay payWay); | |||
| void sendOrderSuccessActionMsg(WxOrder updateOrder); | |||
| /** | |||
| @@ -2188,8 +2188,7 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| RedisTemplate<String, WxCUserBasicInfo> cUserBasicInfoRedisTemplate; | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| @Override | |||
| public WxComposeOrder saveOrderForCoupon(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay) { | |||
| public WxComposeOrder saveOrderForCoupon(TenantEntity tenantEntity,boolean allowUnPayOrder,EnumComposeOrder composeOrderType,WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay) { | |||
| WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); | |||
| // 防止同一用户重复下单,1秒内 | |||
| String key = new StringBuilder().append("saveComposeOrder:").append(user.getId()).toString(); | |||
| @@ -2202,7 +2201,7 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrderType.getCode()); | |||
| WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(user, orderSave, payWay); | |||
| WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(tenantEntity,user, orderSave, payWay); | |||
| WxOrder lastOrder = null; | |||
| for (int i = 0 ; i < orderSave.size(); i ++) { | |||
| OrderComposeSaveDto orderdto = orderSave.get(i); | |||
| @@ -2314,6 +2313,9 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| } | |||
| record.setCouponNumber(couponNumber); | |||
| try { | |||
| if(EnumComposeOrder.isSingle(composeOrder.getComposeOrderType())) { | |||
| record.setId(composeOrder.getMainOrderId()); | |||
| } | |||
| proxy.saveFreeOrder(record, user, coupon); | |||
| } catch (Exception e) { | |||
| logger.error("下订单错误:" + e.getMessage(),e); | |||
| @@ -2469,12 +2471,12 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| logger.error("body:" + e.getMessage()); | |||
| bodyStr = "券" + '-' + EnumCouponType.getEnum(coupon.getType()); | |||
| } | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| Long orderNumber = idWorker.nextId(); | |||
| record.setId(orderNumber); | |||
| if (null == record.getId()) { | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| } | |||
| record.updateTenantInfo(coupon); | |||
| record.setOrderNumber(orderNumber); | |||
| record.setOrderNumber(record.getId()); | |||
| record.setProductId(coupon.getId()); | |||
| record.setCUserId(user.getId()); | |||
| record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); | |||
| @@ -2696,7 +2698,7 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| } | |||
| WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); | |||
| try { | |||
| WxComposeOrder order = proxy.saveOrderForCoupon(allowUnPayOrder,composeOrderType,wxCUserBasicInfo, composeOrderSaveDto, payWay); | |||
| WxComposeOrder order = proxy.saveOrderForCoupon(tenantEntity,allowUnPayOrder,composeOrderType,wxCUserBasicInfo, composeOrderSaveDto, payWay); | |||
| return new ResultData(order); | |||
| } catch (MallinkException e) { | |||
| logger.error("saveOrderForCoupon error.",e); | |||
| @@ -2718,6 +2720,7 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| @Override | |||
| public PageInfo<WxOrderCouponVo> listGoodsCAsPage(WxOrder record, Integer pageIndex, Integer pageSize) { | |||
| //TODO 待优化111111111111111111111111.此处有问题,数据不全,逻辑得跟listCUserVoAsPage一样 | |||
| PageInfo<WxOrderCouponVo> page = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.listGoodsCAsPage(record)); | |||
| page.getList().stream().forEach(oc->{ | |||
| if(oc.getLevel().equals(1)){ | |||
| @@ -4,6 +4,7 @@ import java.util.List; | |||
| import com.iformall.domain.dto.OrderComposeSaveDto; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.EnumPayWay; | |||
| import com.iformall.service.order.entity.WxComposeChildOrderPrice; | |||
| import com.iformall.service.order.entity.WxComposeOrder; | |||
| @@ -14,7 +15,7 @@ public interface OrderAdapterService { | |||
| * 数据库创建组合主订单,不是wxOrder.单个的模式不用创建 | |||
| * @return | |||
| */ | |||
| WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay); | |||
| WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay); | |||
| /** | |||
| * 获取支付时商品名称,供服务商API使用 | |||
| @@ -1,5 +1,6 @@ | |||
| package com.iformall.service.order.entity; | |||
| import com.iformall.domain.po.WxBatchOrder; | |||
| import com.iformall.domain.po.WxOrder; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| @@ -24,6 +25,6 @@ public class WxComposeOrder extends TenantEntity{ | |||
| private WxOrder singleOrder;//单个模式时不用重复查询 | |||
| private Object mainOrder;//真正的主订单对象,批量下单时才有 | |||
| private WxBatchOrder mainOrder;//真正的主订单对象,批量下单时才有 | |||
| } | |||
| @@ -1,21 +1,28 @@ | |||
| package com.iformall.service.order.impl; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Propagation; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.dto.OrderComposeSaveDto; | |||
| import com.iformall.enums.EnumComposeOrder; | |||
| import com.iformall.enums.EnumOrderShopingType; | |||
| import com.iformall.enums.EnumPayWay; | |||
| import com.iformall.mapper.WxBatchOrderMapper; | |||
| import com.iformall.mapper.WxOrderMapper; | |||
| import com.iformall.service.order.OrderAdapterService; | |||
| import com.iformall.service.order.entity.WxComposeChildOrderPrice; | |||
| import com.iformall.service.order.entity.WxComposeOrder; | |||
| import com.iformall.service.order.impl.batch.BaseBatchOrderAdapterService; | |||
| import com.iformall.service.order.util.OrderHelper; | |||
| /** | |||
| @@ -24,15 +31,17 @@ import com.iformall.service.order.util.OrderHelper; | |||
| * | |||
| */ | |||
| @Service | |||
| public class SingleOrderAdapterService implements OrderAdapterService { | |||
| public class SingleOrderAdapterService extends BaseBatchOrderAdapterService { | |||
| @Autowired | |||
| WxOrderMapper wxOrderMapper; | |||
| @Autowired | |||
| WxBatchOrderMapper wxBatchOrderMapper; | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| @Override | |||
| public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay) { | |||
| return new WxComposeOrder(0L, EnumComposeOrder.SINGLE.getCode(),0); | |||
| public WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay) { | |||
| return super.createDBMainOrder(tenantEntity,user, orderSave, payWay, EnumComposeOrder.SINGLE); | |||
| } | |||
| @Override | |||
| @@ -43,26 +52,13 @@ public class SingleOrderAdapterService implements OrderAdapterService { | |||
| @Override | |||
| public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { | |||
| //mainOrderId(WxBatchOrder的id) 和 wxOrder的id一致 | |||
| WxComposeOrder corder = super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.SINGLE); | |||
| WxOrder wxOrder = wxOrderMapper.selectById(mainOrderId, tenantId); | |||
| WxComposeOrder corder = new WxComposeOrder(wxOrder.getId(),EnumComposeOrder.SINGLE.getCode(),wxOrder.getPayment()); | |||
| corder.updateTenantInfo(wxOrder); | |||
| corder.setSingleOrder(wxOrder); | |||
| return corder; | |||
| } | |||
| @Override | |||
| public WxComposeChildOrderPrice getChildCouponOrderPrice(OrderComposeSaveDto orderdto,WxCoupon coupon, boolean isPress, Long orderGroupId, | |||
| Integer couponNumber) { | |||
| Integer perPrice = OrderHelper.getCouponPerPayment(coupon, isPress, orderGroupId); | |||
| Integer freightPrice = 0; | |||
| //在线配送加上运费 | |||
| if (EnumOrderShopingType.DISTRIBUTION.getCode().equals(orderdto.getShippingType())) { | |||
| freightPrice = coupon.getFreightPrice(); | |||
| } | |||
| return new WxComposeChildOrderPrice(perPrice, couponNumber,freightPrice, coupon.getId()); | |||
| } | |||
| @Override | |||
| public List<WxOrder> getChildOrders(WxComposeOrder composeOrder, String tenantId) { | |||
| List<WxOrder> childOrders = new ArrayList<WxOrder>(); | |||
| @@ -70,14 +66,6 @@ public class SingleOrderAdapterService implements OrderAdapterService { | |||
| return childOrders; | |||
| } | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| @Override | |||
| public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List<WxOrder> orderList, Long cUserId) { | |||
| WxOrder order = composeOrder.getSingleOrder(); | |||
| order.setCUserId(cUserId); | |||
| wxOrderMapper.updateCUserId(order); | |||
| } | |||
| @Override | |||
| public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { | |||
| return coupon.getSubsidyNum(); | |||
| @@ -60,11 +60,12 @@ public abstract class BaseBatchOrderAdapterService implements OrderAdapterServic | |||
| } | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| protected WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay,EnumComposeOrder composeOrderType) { | |||
| protected WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay,EnumComposeOrder composeOrderType) { | |||
| WxBatchOrder order =new WxBatchOrder(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| order.setId(idWorker.nextId()); | |||
| order.setCUserId(user.getId()); | |||
| order.updateTenantInfo(tenantEntity); | |||
| int payment = 0; | |||
| for (OrderComposeSaveDto ocsd : orderSave) { | |||
| boolean isPress = ocsd.getSignleOrder().isPressOrder(); | |||
| @@ -98,7 +99,7 @@ public abstract class BaseBatchOrderAdapterService implements OrderAdapterServic | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List<WxOrder> orderList, Long cUserId) { | |||
| if (null != cUserId) { | |||
| WxBatchOrder order = (WxBatchOrder) composeOrder.getMainOrder(); | |||
| WxBatchOrder order = composeOrder.getMainOrder(); | |||
| order.setCUserId(cUserId); | |||
| wxBatchOrderMapper.updateCUserId(order); | |||
| @@ -6,6 +6,7 @@ import java.util.List; | |||
| import com.aliyun.openservices.shade.com.alibaba.fastjson.JSON; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| @@ -29,8 +30,8 @@ public class CouponPackageOrderAdapterService extends BaseBatchOrderAdapterServi | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| @Override | |||
| public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay) { | |||
| return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.PACKAGECOUPON); | |||
| public WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user,List<OrderComposeSaveDto> orderSave,EnumPayWay payWay) { | |||
| return super.createDBMainOrder(tenantEntity,user, orderSave, payWay, EnumComposeOrder.PACKAGECOUPON); | |||
| } | |||
| @Override | |||
| @@ -4,6 +4,8 @@ package com.iformall.service.order.impl.batch; | |||
| import java.util.List; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import org.springframework.stereotype.Service; | |||
| import com.iformall.domain.dto.OrderComposeSaveDto; | |||
| @@ -25,9 +27,9 @@ public class MulityNumberOneOrderBatchOrderAdapterService extends BaseBatchOrder | |||
| } | |||
| @Override | |||
| public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user, List<OrderComposeSaveDto> orderSave, | |||
| public WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user, List<OrderComposeSaveDto> orderSave, | |||
| EnumPayWay payWay) { | |||
| return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); | |||
| return super.createDBMainOrder(tenantEntity,user, orderSave, payWay, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); | |||
| } | |||
| @Override | |||
| @@ -3,6 +3,8 @@ package com.iformall.service.order.impl.batch; | |||
| import java.util.List; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import org.springframework.stereotype.Service; | |||
| import com.iformall.domain.dto.OrderComposeSaveDto; | |||
| @@ -24,9 +26,9 @@ public class OneNumberOneOrderBatchOrderAdapterService extends BaseBatchOrderAda | |||
| } | |||
| @Override | |||
| public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user, List<OrderComposeSaveDto> orderSave, | |||
| public WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user, List<OrderComposeSaveDto> orderSave, | |||
| EnumPayWay payWay) { | |||
| return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); | |||
| return super.createDBMainOrder(tenantEntity,user, orderSave, payWay, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); | |||
| } | |||
| @Override | |||