diff --git a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java index 7b2e271ea..3fa1a472a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java +++ b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java @@ -7,7 +7,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableAsync; + import springfox.documentation.swagger2.annotations.EnableSwagger2; /** @@ -20,6 +22,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableEncryptableProperties @EnableAsync @EnableRocketMQ +@EnableAspectJAutoProxy(exposeProxy = true) public class UserApplication { @Value("${fm.exception}") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java index fe4003535..951a101ec 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java @@ -10,6 +10,7 @@ import com.iformall.domain.po.WxMerchant; import com.iformall.enums.EnumPayWay; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxCouponMapper; import com.iformall.mapper.WxMerchantMapper; import com.iformall.service.QrCodeService; import com.iformall.utils.Constant; @@ -41,6 +42,9 @@ public class WxAppinfoController extends BaseController { @Autowired private WxCouponChannelMapper wxCouponChannelMapper; + + @Autowired + WxCouponMapper wxCouponMapper; ExecutorService fixedThreadPool = Executors.newFixedThreadPool(150); @@ -135,8 +139,5 @@ public class WxAppinfoController extends BaseController { } } - - - } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java index d9bc3a260..3dbcf3d59 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java @@ -62,7 +62,7 @@ public class WxCouponController extends BaseController { @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 WxCoupon wxCoupon, Integer pageNum, Integer pageSize,Integer dataType) { + public ResultData list(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize,Integer dataType,Boolean isList) { logger.debug("[" + getIpAddr() + "] WxCouponController::list"); if (wxCoupon == null) wxCoupon = new WxCoupon(); if(null != dataType && dataType == 1){ @@ -87,7 +87,16 @@ public class WxCouponController extends BaseController { EnumCouponType.COUPON_MULTIMCH.getCode()}; wxCoupon.setTypes(Arrays.asList(typeArray)); + + } + + if(!(isList == null?false:isList) && wxCoupon.getSendType() == null){ + Integer[] sendTypeArray = { + EnumCouponSendType.ACTIVE.getCode(), + EnumCouponSendType.PASSIVE.getCode(),}; + wxCoupon.setSendTypes(Arrays.asList(sendTypeArray)); } + return wxCouponService.list(wxCoupon,wxCoupon, pageNum, pageSize); //全列表 } @@ -112,6 +121,13 @@ public class WxCouponController extends BaseController { EnumCouponType.COUPON_PREORDER.getCode()}; wxCoupon.setTypes(Arrays.asList(typeArray)); + + Integer[] sendTypeArray = { + EnumCouponSendType.ACTIVE.getCode(), + EnumCouponSendType.PASSIVE.getCode(),}; + + wxCoupon.setSendTypes(Arrays.asList(sendTypeArray)); + if(StringUtils.isNotBlank(wxCoupon.getSortColumn())){ String coryColumn = "c."+wxCoupon.getSortColumns(); wxCoupon.setSortColumns(coryColumn); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java index b5bbe516c..43980a21c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java @@ -113,10 +113,10 @@ public class WxCouponOrderController extends BaseController { wxRefundOrderService.createRefundOrder(appinfo, couponOrderId, EnumPayType.PAY_ADMIN_REFUND, null); return new ResultData(); } catch (MallinkException e) { - logger.error(e.getMessage()); + logger.error(e.getMessage(),e); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { - logger.error(e.getMessage()); + logger.error(e.getMessage(),e); return new ResultData(ErrorCode.REFUND_ORDER_ERROR); } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java index 2f3e2bf10..2822316d3 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java @@ -15,16 +15,15 @@ import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.vo.WxMerchantSubsidyVo; import com.iformall.domain.vo.WxOrderQueryVo; -import com.iformall.enums.EnumCouponChannelStatus; -import com.iformall.enums.EnumCouponChannelType; -import com.iformall.enums.EnumPayWay; -import com.iformall.enums.EnumUserType; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserService; import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxCouponService; import com.iformall.service.WxOrderService; +import com.iformall.service.order.OrderFactory; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -62,7 +61,7 @@ public class WxOrderController extends BaseController { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; - + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -184,17 +183,19 @@ public class WxOrderController extends BaseController { if (coupon == null) { return new ResultData(ErrorCode.COUPON_IS_EMPTY); } - if (!wxOrderService.checkCouponIsFree(coupon)) { + if (!wxOrderService.checkCouponIsFree(coupon,null)) { return new ResultData(ErrorCode.COUPON_IS_NOT_FREE); } // 免费券 - order = wxOrderService.saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null,EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT); + order = wxOrderService.saveFreeOrderForCoupon(false,null,user, coupon, 1, + orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null,EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT, + EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { - logger.error(e.getMessage()); + logger.error(e.getMessage(),e); return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/UserBasicInfoAddressController.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/UserBasicInfoAddressController.java new file mode 100644 index 000000000..eea61baaf --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/UserBasicInfoAddressController.java @@ -0,0 +1,111 @@ +package com.iformall.controller.mem; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.*; +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("userBasicInfoAddress") +@Api(description = "会员地址相关接口") +public class UserBasicInfoAddressController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private UserBasicInfoAddressService userBasicInfoAddressService; + + @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 UserBasicInfoAddress userBasicInfoAddress, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] UserBasicInfoAddressController::list"); + if (null == userBasicInfoAddress) { + userBasicInfoAddress = new UserBasicInfoAddress(); + } + if(userBasicInfoAddress.getUserId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "用户ID为空"); + } + userBasicInfoAddress.undateFinalTenantId(ifParentUpdateTenantInfo()); + PageInfo page = userBasicInfoAddressService.listAsPage(userBasicInfoAddress, pageNum, pageSize); + return new ResultData(page); + } + + @PostMapping("saveOrUpdate") + @SystemControllerLog(description = "会员地址-保存更新") + public ResultData saveOrUpdate(@RequestBody UserBasicInfoAddress userBasicInfoAddress) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::saveOrUpdate"); + if(userBasicInfoAddress == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if(userBasicInfoAddress.getUserId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + } + userBasicInfoAddress.undateFinalTenantId(ifParentUpdateTenantInfo()); + userBasicInfoAddressService.saveOrUpdate(userBasicInfoAddress); + return new ResultData(); + } + + @PostMapping("setUpDefault") + @SystemControllerLog(description = "会员地址-默认") + public ResultData setUpDefault(@RequestBody UserBasicInfoAddress userBasicInfoAddress) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::setUpDefault"); + if(userBasicInfoAddress == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if(userBasicInfoAddress.getId() == null || userBasicInfoAddress.getUserId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "用户ID或者Id为空"); + } + userBasicInfoAddress.undateFinalTenantId(ifParentUpdateTenantInfo()); + userBasicInfoAddressService.updateDefault(userBasicInfoAddress); + return new ResultData(); + } + + @ApiOperation("消息模板-删除") + @GetMapping("/del") + @ApiImplicitParam(name = "id", value = "id", dataType = "String", paramType = "query", required = true) + @SystemControllerLog(description = "消息验证模板-删除") + public ResultData delete(Long id) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::delete"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "Id为空"); + } + UserBasicInfoAddress userBasicInfoAddress = new UserBasicInfoAddress(); + userBasicInfoAddress.setId(id); + userBasicInfoAddress.undateFinalTenantId(ifParentUpdateTenantInfo()); + userBasicInfoAddressService.deleteById(userBasicInfoAddress); + return new ResultData(Result.SUCCESS, "删除成功", null); + } + + @ApiOperation("消息模板-查询") + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "String", paramType = "query", required = true) + @SystemControllerLog(description = "消息验证模板-查询") + public ResultData findById(Long id) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::findById"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "Id为空"); + } + UserBasicInfoAddress userBasicInfoAddress = new UserBasicInfoAddress(); + userBasicInfoAddress.setId(id); + userBasicInfoAddress.undateFinalTenantId(ifParentUpdateTenantInfo()); + userBasicInfoAddressService.findById(userBasicInfoAddress); + return new ResultData(Result.SUCCESS, "查询成功", null); + } + +} \ No newline at end of file diff --git a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java index 485e66bd5..e281affe5 100644 --- a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -40,6 +40,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_score_rules", "wx_level_config", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_credit_history", @@ -79,6 +80,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_weapp_code_status", "wx_weapp_release_status", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "mem_coupon_from_dsp", diff --git a/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql b/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql new file mode 100644 index 000000000..911ed7672 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql @@ -0,0 +1,1226 @@ +CREATE TABLE `wx_batch_order` ( + `id` bigint(20) NOT NULL, + `tenant_id` varchar(5) NOT NULL, + `parent_tenant_id` varchar(5) DEFAULT NULL, + `c_user_id` bigint(20) DEFAULT NULL, + `payment` int(11) DEFAULT NULL COMMENT '支付金额:允许有负数,退款时为负值。', + `create_date` datetime DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + + +ALTER TABLE wx_order_0 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_1 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_2 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_3 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_4 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_5 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_6 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_7 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_8 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_9 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_10 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_11 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_12 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_13 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_14 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_15 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_16 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_17 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_18 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_19 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_20 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_21 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_22 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_23 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_24 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_25 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_26 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_27 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_28 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_29 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_30 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_31 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_32 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_33 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_34 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_35 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_36 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_37 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_38 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_39 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_40 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_41 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_42 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_43 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_44 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_45 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_46 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_47 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_48 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_49 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_50 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_51 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_52 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_53 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_54 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_55 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_56 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_57 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_58 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_59 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_60 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_61 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_62 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_63 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_64 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_65 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_66 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_67 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_68 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_69 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_70 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_71 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_72 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_73 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_74 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_75 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_76 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_77 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_78 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_79 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_80 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_81 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_82 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_83 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_84 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_85 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_86 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_87 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_88 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_89 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_90 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_91 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_92 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_93 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_94 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_95 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_96 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_97 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_98 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_order_99 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; + +ALTER TABLE wx_order_0 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_1 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_2 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_3 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_4 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_5 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_6 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_7 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_8 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_9 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_10 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_11 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_12 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_13 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_14 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_15 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_16 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_17 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_18 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_19 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_20 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_21 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_22 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_23 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_24 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_25 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_26 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_27 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_28 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_29 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_30 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_31 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_32 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_33 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_34 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_35 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_36 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_37 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_38 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_39 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_40 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_41 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_42 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_43 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_44 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_45 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_46 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_47 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_48 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_49 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_50 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_51 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_52 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_53 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_54 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_55 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_56 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_57 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_58 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_59 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_60 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_61 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_62 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_63 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_64 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_65 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_66 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_67 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_68 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_69 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_70 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_71 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_72 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_73 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_74 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_75 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_76 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_77 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_78 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_79 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_80 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_81 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_82 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_83 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_84 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_85 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_86 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_87 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_88 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_89 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_90 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_91 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_92 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_93 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_94 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_95 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_96 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_97 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_98 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_order_99 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; + +ALTER TABLE wx_pay_order_0 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_1 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_2 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_3 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_4 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_5 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_6 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_7 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_8 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_9 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_10 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_11 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_12 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_13 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_14 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_15 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_16 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_17 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_18 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_19 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_20 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_21 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_22 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_23 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_24 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_25 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_26 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_27 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_28 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_29 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_30 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_31 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_32 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_33 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_34 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_35 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_36 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_37 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_38 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_39 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_40 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_41 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_42 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_43 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_44 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_45 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_46 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_47 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_48 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_49 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_50 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_51 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_52 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_53 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_54 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_55 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_56 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_57 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_58 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_59 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_60 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_61 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_62 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_63 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_64 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_65 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_66 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_67 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_68 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_69 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_70 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_71 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_72 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_73 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_74 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_75 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_76 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_77 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_78 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_79 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_80 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_81 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_82 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_83 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_84 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_85 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_86 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_87 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_88 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_89 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_90 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_91 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_92 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_93 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_94 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_95 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_96 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_97 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_98 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; +ALTER TABLE wx_pay_order_99 ADD COLUMN `compose_order` int(1) COMMENT '组合订单类型'; + +CREATE TABLE wx_batch_order_0 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_1 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_2 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_3 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_4 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_5 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_6 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_7 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_8 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_9 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_10 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_11 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_12 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_13 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_14 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_15 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_16 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_17 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_18 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_19 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_20 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_21 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_22 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_23 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_24 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_25 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_26 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_27 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_28 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_29 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_30 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_31 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_32 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_33 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_34 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_35 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_36 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_37 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_38 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_39 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_40 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_41 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_42 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_43 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_44 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_45 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_46 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_47 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_48 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_49 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_50 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_51 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_52 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_53 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_54 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_55 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_56 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_57 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_58 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_59 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_60 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_61 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_62 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_63 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_64 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_65 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_66 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_67 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_68 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_69 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_70 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_71 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_72 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_73 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_74 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_75 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_76 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_77 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_78 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_79 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_80 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_81 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_82 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_83 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_84 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_85 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_86 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_87 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_88 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_89 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_90 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_91 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_92 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_93 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_94 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_95 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_96 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_97 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_98 LIKE wx_batch_order; +CREATE TABLE wx_batch_order_99 LIKE wx_batch_order; + +drop table wx_batch_order; + +ALTER TABLE wx_coupon_order_0 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_1 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_2 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_3 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_4 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_5 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_6 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_7 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_8 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_9 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_10 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_11 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_12 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_13 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_14 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_15 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_16 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_17 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_18 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_19 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_20 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_21 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_22 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_23 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_24 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_25 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_26 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_27 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_28 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_29 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_30 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_31 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_32 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_33 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_34 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_35 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_36 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_37 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_38 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_39 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_40 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_41 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_42 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_43 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_44 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_45 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_46 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_47 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_48 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_49 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_50 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_51 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_52 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_53 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_54 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_55 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_56 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_57 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_58 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_59 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_60 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_61 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_62 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_63 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_64 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_65 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_66 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_67 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_68 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_69 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_70 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_71 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_72 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_73 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_74 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_75 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_76 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_77 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_78 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_79 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_80 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_81 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_82 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_83 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_84 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_85 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_86 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_87 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_88 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_89 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_90 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_91 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_92 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_93 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_94 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_95 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_96 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_97 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_98 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_coupon_order_99 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; + +ALTER TABLE wx_order_0 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_1 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_2 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_3 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_4 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_5 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_6 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_7 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_8 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_9 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_10 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_11 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_12 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_13 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_14 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_15 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_16 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_17 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_18 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_19 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_20 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_21 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_22 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_23 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_24 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_25 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_26 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_27 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_28 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_29 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_30 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_31 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_32 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_33 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_34 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_35 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_36 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_37 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_38 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_39 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_40 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_41 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_42 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_43 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_44 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_45 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_46 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_47 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_48 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_49 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_50 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_51 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_52 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_53 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_54 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_55 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_56 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_57 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_58 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_59 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_60 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_61 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_62 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_63 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_64 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_65 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_66 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_67 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_68 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_69 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_70 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_71 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_72 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_73 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_74 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_75 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_76 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_77 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_78 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_79 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_80 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_81 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_82 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_83 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_84 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_85 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_86 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_87 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_88 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_89 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_90 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_91 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_92 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_93 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_94 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_95 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_96 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_97 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_98 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; +ALTER TABLE wx_order_99 ADD COLUMN `compose_order_type` int(1) not null default 0 COMMENT '组合订单类型'; + +ALTER TABLE wx_coupon_order_0 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_1 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_2 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_3 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_4 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_5 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_6 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_7 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_8 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_9 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_10 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_11 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_12 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_13 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_14 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_15 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_16 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_17 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_18 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_19 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_20 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_21 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_22 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_23 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_24 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_25 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_26 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_27 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_28 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_29 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_30 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_31 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_32 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_33 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_34 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_35 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_36 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_37 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_38 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_39 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_40 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_41 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_42 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_43 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_44 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_45 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_46 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_47 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_48 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_49 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_50 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_51 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_52 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_53 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_54 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_55 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_56 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_57 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_58 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_59 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_60 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_61 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_62 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_63 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_64 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_65 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_66 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_67 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_68 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_69 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_70 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_71 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_72 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_73 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_74 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_75 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_76 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_77 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_78 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_79 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_80 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_81 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_82 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_83 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_84 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_85 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_86 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_87 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_88 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_89 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_90 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_91 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_92 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_93 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_94 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_95 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_96 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_97 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_98 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; +ALTER TABLE wx_coupon_order_99 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; + +ALTER TABLE wx_pay_order_0 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_1 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_2 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_3 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_4 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_5 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_6 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_7 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_8 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_9 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_10 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_11 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_12 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_13 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_14 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_15 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_16 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_17 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_18 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_19 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_20 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_21 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_22 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_23 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_24 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_25 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_26 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_27 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_28 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_29 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_30 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_31 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_32 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_33 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_34 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_35 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_36 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_37 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_38 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_39 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_40 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_41 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_42 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_43 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_44 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_45 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_46 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_47 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_48 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_49 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_50 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_51 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_52 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_53 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_54 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_55 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_56 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_57 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_58 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_59 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_60 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_61 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_62 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_63 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_64 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_65 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_66 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_67 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_68 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_69 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_70 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_71 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_72 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_73 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_74 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_75 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_76 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_77 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_78 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_79 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_80 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_81 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_82 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_83 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_84 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_85 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_86 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_87 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_88 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_89 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_90 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_91 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_92 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_93 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_94 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_95 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_96 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_97 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_98 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_99 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; + +update wx_order_0 set compose_order_id = 0 ,coupon_number=1; +update wx_order_1 set compose_order_id = 0 ,coupon_number=1; +update wx_order_2 set compose_order_id = 0 ,coupon_number=1; +update wx_order_3 set compose_order_id = 0 ,coupon_number=1; +update wx_order_4 set compose_order_id = 0 ,coupon_number=1; +update wx_order_5 set compose_order_id = 0 ,coupon_number=1; +update wx_order_6 set compose_order_id = 0 ,coupon_number=1; +update wx_order_7 set compose_order_id = 0 ,coupon_number=1; +update wx_order_8 set compose_order_id = 0 ,coupon_number=1; +update wx_order_9 set compose_order_id = 0 ,coupon_number=1; +update wx_order_10 set compose_order_id = 0 ,coupon_number=1; +update wx_order_11 set compose_order_id = 0 ,coupon_number=1; +update wx_order_12 set compose_order_id = 0 ,coupon_number=1; +update wx_order_13 set compose_order_id = 0 ,coupon_number=1; +update wx_order_14 set compose_order_id = 0 ,coupon_number=1; +update wx_order_15 set compose_order_id = 0 ,coupon_number=1; +update wx_order_16 set compose_order_id = 0 ,coupon_number=1; +update wx_order_17 set compose_order_id = 0 ,coupon_number=1; +update wx_order_18 set compose_order_id = 0 ,coupon_number=1; +update wx_order_19 set compose_order_id = 0 ,coupon_number=1; +update wx_order_20 set compose_order_id = 0 ,coupon_number=1; +update wx_order_21 set compose_order_id = 0 ,coupon_number=1; +update wx_order_22 set compose_order_id = 0 ,coupon_number=1; +update wx_order_23 set compose_order_id = 0 ,coupon_number=1; +update wx_order_24 set compose_order_id = 0 ,coupon_number=1; +update wx_order_25 set compose_order_id = 0 ,coupon_number=1; +update wx_order_26 set compose_order_id = 0 ,coupon_number=1; +update wx_order_27 set compose_order_id = 0 ,coupon_number=1; +update wx_order_28 set compose_order_id = 0 ,coupon_number=1; +update wx_order_29 set compose_order_id = 0 ,coupon_number=1; +update wx_order_30 set compose_order_id = 0 ,coupon_number=1; +update wx_order_31 set compose_order_id = 0 ,coupon_number=1; +update wx_order_32 set compose_order_id = 0 ,coupon_number=1; +update wx_order_33 set compose_order_id = 0 ,coupon_number=1; +update wx_order_34 set compose_order_id = 0 ,coupon_number=1; +update wx_order_35 set compose_order_id = 0 ,coupon_number=1; +update wx_order_36 set compose_order_id = 0 ,coupon_number=1; +update wx_order_37 set compose_order_id = 0 ,coupon_number=1; +update wx_order_38 set compose_order_id = 0 ,coupon_number=1; +update wx_order_39 set compose_order_id = 0 ,coupon_number=1; +update wx_order_40 set compose_order_id = 0 ,coupon_number=1; +update wx_order_41 set compose_order_id = 0 ,coupon_number=1; +update wx_order_42 set compose_order_id = 0 ,coupon_number=1; +update wx_order_43 set compose_order_id = 0 ,coupon_number=1; +update wx_order_44 set compose_order_id = 0 ,coupon_number=1; +update wx_order_45 set compose_order_id = 0 ,coupon_number=1; +update wx_order_46 set compose_order_id = 0 ,coupon_number=1; +update wx_order_47 set compose_order_id = 0 ,coupon_number=1; +update wx_order_48 set compose_order_id = 0 ,coupon_number=1; +update wx_order_49 set compose_order_id = 0 ,coupon_number=1; +update wx_order_50 set compose_order_id = 0 ,coupon_number=1; +update wx_order_51 set compose_order_id = 0 ,coupon_number=1; +update wx_order_52 set compose_order_id = 0 ,coupon_number=1; +update wx_order_53 set compose_order_id = 0 ,coupon_number=1; +update wx_order_54 set compose_order_id = 0 ,coupon_number=1; +update wx_order_55 set compose_order_id = 0 ,coupon_number=1; +update wx_order_56 set compose_order_id = 0 ,coupon_number=1; +update wx_order_57 set compose_order_id = 0 ,coupon_number=1; +update wx_order_58 set compose_order_id = 0 ,coupon_number=1; +update wx_order_59 set compose_order_id = 0 ,coupon_number=1; +update wx_order_60 set compose_order_id = 0 ,coupon_number=1; +update wx_order_61 set compose_order_id = 0 ,coupon_number=1; +update wx_order_62 set compose_order_id = 0 ,coupon_number=1; +update wx_order_63 set compose_order_id = 0 ,coupon_number=1; +update wx_order_64 set compose_order_id = 0 ,coupon_number=1; +update wx_order_65 set compose_order_id = 0 ,coupon_number=1; +update wx_order_66 set compose_order_id = 0 ,coupon_number=1; +update wx_order_67 set compose_order_id = 0 ,coupon_number=1; +update wx_order_68 set compose_order_id = 0 ,coupon_number=1; +update wx_order_69 set compose_order_id = 0 ,coupon_number=1; +update wx_order_70 set compose_order_id = 0 ,coupon_number=1; +update wx_order_71 set compose_order_id = 0 ,coupon_number=1; +update wx_order_72 set compose_order_id = 0 ,coupon_number=1; +update wx_order_73 set compose_order_id = 0 ,coupon_number=1; +update wx_order_74 set compose_order_id = 0 ,coupon_number=1; +update wx_order_75 set compose_order_id = 0 ,coupon_number=1; +update wx_order_76 set compose_order_id = 0 ,coupon_number=1; +update wx_order_77 set compose_order_id = 0 ,coupon_number=1; +update wx_order_78 set compose_order_id = 0 ,coupon_number=1; +update wx_order_79 set compose_order_id = 0 ,coupon_number=1; +update wx_order_80 set compose_order_id = 0 ,coupon_number=1; +update wx_order_81 set compose_order_id = 0 ,coupon_number=1; +update wx_order_82 set compose_order_id = 0 ,coupon_number=1; +update wx_order_83 set compose_order_id = 0 ,coupon_number=1; +update wx_order_84 set compose_order_id = 0 ,coupon_number=1; +update wx_order_85 set compose_order_id = 0 ,coupon_number=1; +update wx_order_86 set compose_order_id = 0 ,coupon_number=1; +update wx_order_87 set compose_order_id = 0 ,coupon_number=1; +update wx_order_88 set compose_order_id = 0 ,coupon_number=1; +update wx_order_89 set compose_order_id = 0 ,coupon_number=1; +update wx_order_90 set compose_order_id = 0 ,coupon_number=1; +update wx_order_91 set compose_order_id = 0 ,coupon_number=1; +update wx_order_92 set compose_order_id = 0 ,coupon_number=1; +update wx_order_93 set compose_order_id = 0 ,coupon_number=1; +update wx_order_94 set compose_order_id = 0 ,coupon_number=1; +update wx_order_95 set compose_order_id = 0 ,coupon_number=1; +update wx_order_96 set compose_order_id = 0 ,coupon_number=1; +update wx_order_97 set compose_order_id = 0 ,coupon_number=1; +update wx_order_98 set compose_order_id = 0 ,coupon_number=1; +update wx_order_99 set compose_order_id = 0 ,coupon_number=1; + +update wx_pay_order_0 set compose_order = 0 ; +update wx_pay_order_1 set compose_order = 0 ; +update wx_pay_order_2 set compose_order = 0 ; +update wx_pay_order_3 set compose_order = 0 ; +update wx_pay_order_4 set compose_order = 0 ; +update wx_pay_order_5 set compose_order = 0 ; +update wx_pay_order_6 set compose_order = 0 ; +update wx_pay_order_7 set compose_order = 0 ; +update wx_pay_order_8 set compose_order = 0 ; +update wx_pay_order_9 set compose_order = 0 ; +update wx_pay_order_10 set compose_order = 0 ; +update wx_pay_order_11 set compose_order = 0 ; +update wx_pay_order_12 set compose_order = 0 ; +update wx_pay_order_13 set compose_order = 0 ; +update wx_pay_order_14 set compose_order = 0 ; +update wx_pay_order_15 set compose_order = 0 ; +update wx_pay_order_16 set compose_order = 0 ; +update wx_pay_order_17 set compose_order = 0 ; +update wx_pay_order_18 set compose_order = 0 ; +update wx_pay_order_19 set compose_order = 0 ; +update wx_pay_order_20 set compose_order = 0 ; +update wx_pay_order_21 set compose_order = 0 ; +update wx_pay_order_22 set compose_order = 0 ; +update wx_pay_order_23 set compose_order = 0 ; +update wx_pay_order_24 set compose_order = 0 ; +update wx_pay_order_25 set compose_order = 0 ; +update wx_pay_order_26 set compose_order = 0 ; +update wx_pay_order_27 set compose_order = 0 ; +update wx_pay_order_28 set compose_order = 0 ; +update wx_pay_order_29 set compose_order = 0 ; +update wx_pay_order_30 set compose_order = 0 ; +update wx_pay_order_31 set compose_order = 0 ; +update wx_pay_order_32 set compose_order = 0 ; +update wx_pay_order_33 set compose_order = 0 ; +update wx_pay_order_34 set compose_order = 0 ; +update wx_pay_order_35 set compose_order = 0 ; +update wx_pay_order_36 set compose_order = 0 ; +update wx_pay_order_37 set compose_order = 0 ; +update wx_pay_order_38 set compose_order = 0 ; +update wx_pay_order_39 set compose_order = 0 ; +update wx_pay_order_40 set compose_order = 0 ; +update wx_pay_order_41 set compose_order = 0 ; +update wx_pay_order_42 set compose_order = 0 ; +update wx_pay_order_43 set compose_order = 0 ; +update wx_pay_order_44 set compose_order = 0 ; +update wx_pay_order_45 set compose_order = 0 ; +update wx_pay_order_46 set compose_order = 0 ; +update wx_pay_order_47 set compose_order = 0 ; +update wx_pay_order_48 set compose_order = 0 ; +update wx_pay_order_49 set compose_order = 0 ; +update wx_pay_order_50 set compose_order = 0 ; +update wx_pay_order_51 set compose_order = 0 ; +update wx_pay_order_52 set compose_order = 0 ; +update wx_pay_order_53 set compose_order = 0 ; +update wx_pay_order_54 set compose_order = 0 ; +update wx_pay_order_55 set compose_order = 0 ; +update wx_pay_order_56 set compose_order = 0 ; +update wx_pay_order_57 set compose_order = 0 ; +update wx_pay_order_58 set compose_order = 0 ; +update wx_pay_order_59 set compose_order = 0 ; +update wx_pay_order_60 set compose_order = 0 ; +update wx_pay_order_61 set compose_order = 0 ; +update wx_pay_order_62 set compose_order = 0 ; +update wx_pay_order_63 set compose_order = 0 ; +update wx_pay_order_64 set compose_order = 0 ; +update wx_pay_order_65 set compose_order = 0 ; +update wx_pay_order_66 set compose_order = 0 ; +update wx_pay_order_67 set compose_order = 0 ; +update wx_pay_order_68 set compose_order = 0 ; +update wx_pay_order_69 set compose_order = 0 ; +update wx_pay_order_70 set compose_order = 0 ; +update wx_pay_order_71 set compose_order = 0 ; +update wx_pay_order_72 set compose_order = 0 ; +update wx_pay_order_73 set compose_order = 0 ; +update wx_pay_order_74 set compose_order = 0 ; +update wx_pay_order_75 set compose_order = 0 ; +update wx_pay_order_76 set compose_order = 0 ; +update wx_pay_order_77 set compose_order = 0 ; +update wx_pay_order_78 set compose_order = 0 ; +update wx_pay_order_79 set compose_order = 0 ; +update wx_pay_order_80 set compose_order = 0 ; +update wx_pay_order_81 set compose_order = 0 ; +update wx_pay_order_82 set compose_order = 0 ; +update wx_pay_order_83 set compose_order = 0 ; +update wx_pay_order_84 set compose_order = 0 ; +update wx_pay_order_85 set compose_order = 0 ; +update wx_pay_order_86 set compose_order = 0 ; +update wx_pay_order_87 set compose_order = 0 ; +update wx_pay_order_88 set compose_order = 0 ; +update wx_pay_order_89 set compose_order = 0 ; +update wx_pay_order_90 set compose_order = 0 ; +update wx_pay_order_91 set compose_order = 0 ; +update wx_pay_order_92 set compose_order = 0 ; +update wx_pay_order_93 set compose_order = 0 ; +update wx_pay_order_94 set compose_order = 0 ; +update wx_pay_order_95 set compose_order = 0 ; +update wx_pay_order_96 set compose_order = 0 ; +update wx_pay_order_97 set compose_order = 0 ; +update wx_pay_order_98 set compose_order = 0 ; +update wx_pay_order_99 set compose_order = 0 ; + +ALTER TABLE wx_coupon_order_0 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_1 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_2 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_3 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_4 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_5 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_6 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_7 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_8 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_9 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_10 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_11 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_12 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_13 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_14 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_15 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_16 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_17 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_18 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_19 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_20 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_21 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_22 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_23 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_24 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_25 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_26 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_27 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_28 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_29 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_30 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_31 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_32 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_33 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_34 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_35 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_36 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_37 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_38 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_39 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_40 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_41 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_42 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_43 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_44 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_45 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_46 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_47 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_48 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_49 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_50 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_51 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_52 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_53 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_54 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_55 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_56 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_57 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_58 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_59 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_60 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_61 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_62 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_63 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_64 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_65 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_66 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_67 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_68 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_69 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_70 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_71 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_72 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_73 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_74 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_75 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_76 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_77 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_78 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_79 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_80 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_81 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_82 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_83 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_84 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_85 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_86 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_87 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_88 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_89 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_90 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_91 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_92 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_93 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_94 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_95 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_96 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_97 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_98 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; +ALTER TABLE wx_coupon_order_99 ADD COLUMN `coupon_number` int(8) COMMENT '购买券数量'; + +update wx_coupon_order_0 set coupon_number = 1; +update wx_coupon_order_1 set coupon_number = 1; +update wx_coupon_order_2 set coupon_number = 1; +update wx_coupon_order_3 set coupon_number = 1; +update wx_coupon_order_4 set coupon_number = 1; +update wx_coupon_order_5 set coupon_number = 1; +update wx_coupon_order_6 set coupon_number = 1; +update wx_coupon_order_7 set coupon_number = 1; +update wx_coupon_order_8 set coupon_number = 1; +update wx_coupon_order_9 set coupon_number = 1; +update wx_coupon_order_10 set coupon_number = 1; +update wx_coupon_order_11 set coupon_number = 1; +update wx_coupon_order_12 set coupon_number = 1; +update wx_coupon_order_13 set coupon_number = 1; +update wx_coupon_order_14 set coupon_number = 1; +update wx_coupon_order_15 set coupon_number = 1; +update wx_coupon_order_16 set coupon_number = 1; +update wx_coupon_order_17 set coupon_number = 1; +update wx_coupon_order_18 set coupon_number = 1; +update wx_coupon_order_19 set coupon_number = 1; +update wx_coupon_order_20 set coupon_number = 1; +update wx_coupon_order_21 set coupon_number = 1; +update wx_coupon_order_22 set coupon_number = 1; +update wx_coupon_order_23 set coupon_number = 1; +update wx_coupon_order_24 set coupon_number = 1; +update wx_coupon_order_25 set coupon_number = 1; +update wx_coupon_order_26 set coupon_number = 1; +update wx_coupon_order_27 set coupon_number = 1; +update wx_coupon_order_28 set coupon_number = 1; +update wx_coupon_order_29 set coupon_number = 1; +update wx_coupon_order_30 set coupon_number = 1; +update wx_coupon_order_31 set coupon_number = 1; +update wx_coupon_order_32 set coupon_number = 1; +update wx_coupon_order_33 set coupon_number = 1; +update wx_coupon_order_34 set coupon_number = 1; +update wx_coupon_order_35 set coupon_number = 1; +update wx_coupon_order_36 set coupon_number = 1; +update wx_coupon_order_37 set coupon_number = 1; +update wx_coupon_order_38 set coupon_number = 1; +update wx_coupon_order_39 set coupon_number = 1; +update wx_coupon_order_40 set coupon_number = 1; +update wx_coupon_order_41 set coupon_number = 1; +update wx_coupon_order_42 set coupon_number = 1; +update wx_coupon_order_43 set coupon_number = 1; +update wx_coupon_order_44 set coupon_number = 1; +update wx_coupon_order_45 set coupon_number = 1; +update wx_coupon_order_46 set coupon_number = 1; +update wx_coupon_order_47 set coupon_number = 1; +update wx_coupon_order_48 set coupon_number = 1; +update wx_coupon_order_49 set coupon_number = 1; +update wx_coupon_order_50 set coupon_number = 1; +update wx_coupon_order_51 set coupon_number = 1; +update wx_coupon_order_52 set coupon_number = 1; +update wx_coupon_order_53 set coupon_number = 1; +update wx_coupon_order_54 set coupon_number = 1; +update wx_coupon_order_55 set coupon_number = 1; +update wx_coupon_order_56 set coupon_number = 1; +update wx_coupon_order_57 set coupon_number = 1; +update wx_coupon_order_58 set coupon_number = 1; +update wx_coupon_order_59 set coupon_number = 1; +update wx_coupon_order_60 set coupon_number = 1; +update wx_coupon_order_61 set coupon_number = 1; +update wx_coupon_order_62 set coupon_number = 1; +update wx_coupon_order_63 set coupon_number = 1; +update wx_coupon_order_64 set coupon_number = 1; +update wx_coupon_order_65 set coupon_number = 1; +update wx_coupon_order_66 set coupon_number = 1; +update wx_coupon_order_67 set coupon_number = 1; +update wx_coupon_order_68 set coupon_number = 1; +update wx_coupon_order_69 set coupon_number = 1; +update wx_coupon_order_70 set coupon_number = 1; +update wx_coupon_order_71 set coupon_number = 1; +update wx_coupon_order_72 set coupon_number = 1; +update wx_coupon_order_73 set coupon_number = 1; +update wx_coupon_order_74 set coupon_number = 1; +update wx_coupon_order_75 set coupon_number = 1; +update wx_coupon_order_76 set coupon_number = 1; +update wx_coupon_order_77 set coupon_number = 1; +update wx_coupon_order_78 set coupon_number = 1; +update wx_coupon_order_79 set coupon_number = 1; +update wx_coupon_order_80 set coupon_number = 1; +update wx_coupon_order_81 set coupon_number = 1; +update wx_coupon_order_82 set coupon_number = 1; +update wx_coupon_order_83 set coupon_number = 1; +update wx_coupon_order_84 set coupon_number = 1; +update wx_coupon_order_85 set coupon_number = 1; +update wx_coupon_order_86 set coupon_number = 1; +update wx_coupon_order_87 set coupon_number = 1; +update wx_coupon_order_88 set coupon_number = 1; +update wx_coupon_order_89 set coupon_number = 1; +update wx_coupon_order_90 set coupon_number = 1; +update wx_coupon_order_91 set coupon_number = 1; +update wx_coupon_order_92 set coupon_number = 1; +update wx_coupon_order_93 set coupon_number = 1; +update wx_coupon_order_94 set coupon_number = 1; +update wx_coupon_order_95 set coupon_number = 1; +update wx_coupon_order_96 set coupon_number = 1; +update wx_coupon_order_97 set coupon_number = 1; +update wx_coupon_order_98 set coupon_number = 1; +update wx_coupon_order_99 set coupon_number = 1; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V2021091500001__wx_coupon.sql b/mallinkAdmin/src/main/resources/db/migration/V2021091500001__wx_coupon.sql new file mode 100644 index 000000000..7ad638c36 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2021091500001__wx_coupon.sql @@ -0,0 +1,1209 @@ +ALTER TABLE `mallink`.`wx_coupon_0` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_1` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_2` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_3` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_4` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_5` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_6` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_7` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_8` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_9` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_10` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_11` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_12` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_13` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_14` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_15` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_16` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_17` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_18` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_19` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_20` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_21` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_22` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_23` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_24` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_25` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_26` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_27` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_28` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_29` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_30` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_31` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_32` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_33` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_34` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_35` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_36` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_37` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_38` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_39` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_40` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_41` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_42` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_43` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_44` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_45` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_46` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_47` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_48` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_49` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_50` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_51` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_52` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_53` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_54` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_55` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_56` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_57` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_58` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_59` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_60` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_61` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_62` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_63` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_64` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_65` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_66` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_67` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_68` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_69` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_70` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_71` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_72` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_73` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_74` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_75` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_76` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_77` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_78` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_79` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_80` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_81` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_82` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_83` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_84` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_85` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_86` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_87` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_88` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_89` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_90` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_91` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_92` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_93` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_94` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_95` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_96` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_97` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_98` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; +ALTER TABLE `mallink`.`wx_coupon_99` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `sale_price`, +ADD COLUMN `gift_list` json COMMENT '卷包 子券' AFTER `source_type`; + + + +ALTER TABLE `mallink`.`wx_order_0` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_1` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_2` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_3` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_4` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_5` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_6` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_7` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_8` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_9` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_10` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_11` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_12` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_13` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_14` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_15` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_16` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_17` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_18` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_19` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_20` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_21` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_22` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_23` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_24` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_25` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_26` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_27` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_28` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_29` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_30` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_31` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_32` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_33` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_34` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_35` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_36` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_37` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_38` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_39` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_40` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_41` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_42` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_43` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_44` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_45` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_46` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_47` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_48` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_49` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_50` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_51` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_52` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_53` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_54` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_55` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_56` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_57` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_58` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_59` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_60` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_61` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_62` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_63` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_64` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_65` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_66` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_67` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_68` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_69` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_70` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_71` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_72` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_73` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_74` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_75` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_76` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_77` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_78` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_79` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_80` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_81` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_82` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_83` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_84` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_85` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_86` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_87` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_88` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_89` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_90` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_91` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_92` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_93` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_94` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_95` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_96` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_97` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_98` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; +ALTER TABLE `mallink`.`wx_order_99` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `payment`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`; + + + + + + +ALTER TABLE `mallink`.`wx_coupon_order_0` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_1` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_2` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_3` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_4` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_5` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_6` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_7` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_8` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_9` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_10` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_11` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_12` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_13` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_14` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_15` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_16` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_17` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_18` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_19` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_20` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_21` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_22` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_23` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_24` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_25` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_26` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_27` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_28` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_29` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_30` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_31` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_32` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_33` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_34` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_35` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_36` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_37` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_38` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_39` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_40` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_41` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_42` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_43` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_44` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_45` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_46` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_47` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_48` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_49` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_50` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_51` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_52` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_53` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_54` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_55` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_56` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_57` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_58` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_59` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_60` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_61` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_62` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_63` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_64` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_65` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_66` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_67` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_68` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_69` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_70` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_71` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_72` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_73` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_74` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_75` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_76` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_77` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_78` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_79` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_80` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_81` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_82` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_83` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_84` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_85` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_86` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_87` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_88` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_89` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_90` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_91` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_92` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_93` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_94` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_95` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_96` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_97` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_98` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_99` +ADD COLUMN `freight_price` int(11) NOT NULL DEFAULT 0 COMMENT '运费' AFTER `compose_order_id`, +ADD COLUMN `shipping_address` json COMMENT '收货地址' AFTER `freight_price`, +ADD COLUMN `shipping_type` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送类型 0:默认(无) 1:自提 2:配送' AFTER `shipping_address`, +ADD COLUMN `delivery_info` json COMMENT '配送信息' AFTER `shipping_type`; diff --git a/mallinkAdmin/src/main/resources/db/migration/V2021091500002__wx_user_address.sql b/mallinkAdmin/src/main/resources/db/migration/V2021091500002__wx_user_address.sql new file mode 100644 index 000000000..f54eb6326 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2021091500002__wx_user_address.sql @@ -0,0 +1,124 @@ +CREATE TABLE `user_basic_info_address` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', + `final_tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '归属租户ID', + `user_id` bigint(20) DEFAULT NULL, + `consignee` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收货人', + `country` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国家', + `province` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '省', + `city` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '市', + `district` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '区', + `region` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属地区', + `address` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '详细地址', + `zipcode` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮政编码', + `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号', + `is_default` tinyint(1) DEFAULT 0 COMMENT '是否默认,0否,1是。', + `mark` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标识', + `is_del` tinyint(1) DEFAULT 0 COMMENT '0否,1是。', + `create_date` datetime(0) DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime(0) DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `id_UNIQUE`(`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户收获地址表' ROW_FORMAT = Dynamic; + +CREATE TABLE user_basic_info_address_0 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_1 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_2 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_3 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_4 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_5 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_6 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_7 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_8 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_9 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_10 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_11 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_12 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_13 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_14 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_15 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_16 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_17 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_18 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_19 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_20 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_21 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_22 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_23 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_24 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_25 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_26 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_27 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_28 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_29 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_30 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_31 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_32 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_33 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_34 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_35 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_36 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_37 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_38 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_39 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_40 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_41 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_42 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_43 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_44 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_45 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_46 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_47 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_48 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_49 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_50 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_51 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_52 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_53 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_54 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_55 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_56 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_57 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_58 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_59 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_60 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_61 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_62 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_63 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_64 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_65 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_66 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_67 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_68 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_69 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_70 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_71 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_72 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_73 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_74 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_75 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_76 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_77 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_78 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_79 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_80 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_81 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_82 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_83 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_84 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_85 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_86 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_87 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_88 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_89 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_90 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_91 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_92 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_93 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_94 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_95 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_96 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_97 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_98 LIKE user_basic_info_address; +CREATE TABLE user_basic_info_address_99 LIKE user_basic_info_address; diff --git a/mallinkAdmin/src/main/resources/db/migration/V2021091500003__wx_mall_permission.sql b/mallinkAdmin/src/main/resources/db/migration/V2021091500003__wx_mall_permission.sql new file mode 100644 index 000000000..619a7510d --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2021091500003__wx_mall_permission.sql @@ -0,0 +1,15 @@ +--加可配送商品 +INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (665, '可配送商品', 604, 'Y', NULL, 1, NULL, NULL, 'distributableCoupon', null, 0, 665); +INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (666, '券礼包', 604, 'Y', NULL, 1, NULL, NULL, 'couponGiftList', null, 0, 666); + +--加商品订单 +INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (714, '商品订单', 610, 'Y', NULL, 1, NULL, NULL, 'distributableOrder', NULL, 0, 714); + +--UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 251, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 686, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 901, 902, 903, 904, 905, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 60701, 60702]' WHERE `id` = 1; + +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 686, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 901, 902, 903, 904, 905, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 60701, 60702]' WHERE `id` = 1; + + + + +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 251, 299, 300, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 665, 666, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 686, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 714, 901, 902, 903, 904, 905, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 60701, 60702] \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V2021092300001__wx_coupon_order.sql b/mallinkAdmin/src/main/resources/db/migration/V2021092300001__wx_coupon_order.sql new file mode 100644 index 000000000..a73e3ae22 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2021092300001__wx_coupon_order.sql @@ -0,0 +1,200 @@ +ALTER TABLE `mallink`.`wx_coupon_order_0` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_1` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_2` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_3` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_4` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_5` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_6` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_7` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_8` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_9` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_10` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_11` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_12` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_13` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_14` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_15` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_16` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_17` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_18` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_19` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_20` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_21` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_22` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_23` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_24` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_25` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_26` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_27` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_28` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_29` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_30` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_31` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_32` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_33` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_34` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_35` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_36` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_37` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_38` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_39` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_40` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_41` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_42` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_43` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_44` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_45` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_46` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_47` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_48` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_49` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_50` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_51` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_52` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_53` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_54` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_55` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_56` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_57` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_58` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_59` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_60` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_61` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_62` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_63` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_64` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_65` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_66` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_67` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_68` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_69` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_70` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_71` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_72` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_73` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_74` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_75` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_76` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_77` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_78` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_79` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_80` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_81` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_82` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_83` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_84` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_85` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_86` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_87` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_88` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_89` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_90` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_91` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_92` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_93` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_94` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_95` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_96` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_97` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_98` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; +ALTER TABLE `mallink`.`wx_coupon_order_99` +ADD COLUMN `shipping_status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '配送状态 0:默认(无) 1*:自提 2*:配送' AFTER `shipping_type`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V2021101200001__order.sql b/mallinkAdmin/src/main/resources/db/migration/V2021101200001__order.sql new file mode 100644 index 000000000..5d673f4e7 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2021101200001__order.sql @@ -0,0 +1,201 @@ +ALTER TABLE wx_order_0 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_1 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_2 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_3 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_4 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_5 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_6 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_7 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_8 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_9 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_10 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_11 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_12 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_13 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_14 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_15 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_16 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_17 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_18 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_19 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_20 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_21 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_22 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_23 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_24 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_25 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_26 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_27 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_28 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_29 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_30 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_31 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_32 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_33 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_34 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_35 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_36 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_37 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_38 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_39 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_40 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_41 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_42 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_43 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_44 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_45 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_46 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_47 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_48 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_49 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_50 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_51 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_52 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_53 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_54 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_55 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_56 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_57 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_58 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_59 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_60 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_61 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_62 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_63 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_64 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_65 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_66 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_67 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_68 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_69 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_70 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_71 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_72 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_73 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_74 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_75 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_76 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_77 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_78 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_79 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_80 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_81 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_82 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_83 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_84 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_85 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_86 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_87 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_88 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_89 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_90 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_91 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_92 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_93 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_94 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_95 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_96 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_97 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_98 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_order_99 ADD COLUMN `parent_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; + +ALTER TABLE wx_coupon_order_0 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_1 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_2 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_3 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_4 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_5 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_6 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_7 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_8 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_9 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_10 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_11 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_12 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_13 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_14 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_15 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_16 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_17 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_18 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_19 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_20 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_21 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_22 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_23 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_24 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_25 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_26 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_27 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_28 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_29 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_30 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_31 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_32 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_33 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_34 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_35 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_36 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_37 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_38 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_39 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_40 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_41 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_42 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_43 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_44 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_45 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_46 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_47 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_48 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_49 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_50 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_51 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_52 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_53 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_54 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_55 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_56 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_57 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_58 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_59 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_60 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_61 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_62 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_63 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_64 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_65 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_66 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_67 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_68 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_69 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_70 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_71 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_72 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_73 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_74 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_75 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_76 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_77 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_78 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_79 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_80 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_81 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_82 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_83 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_84 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_85 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_86 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_87 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_88 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_89 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_90 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_91 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_92 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_93 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_94 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_95 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_96 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_97 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_98 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; +ALTER TABLE wx_coupon_order_99 ADD COLUMN `parent_coupon_order_id` bigint(20) not null default 0 COMMENT '父订单编号'; diff --git a/mallinkAdmin/src/main/resources/doc/微信自助积分客户准备资料.docx b/mallinkAdmin/src/main/resources/doc/微信自助积分客户准备资料.docx index 499ba57f4..1ba4408c4 100644 Binary files a/mallinkAdmin/src/main/resources/doc/微信自助积分客户准备资料.docx and b/mallinkAdmin/src/main/resources/doc/微信自助积分客户准备资料.docx differ diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 980031e13..658f7df1c 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -1,5 +1,6 @@ package com.iformall.controller; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.iformall.annotation.RedisCache; import com.iformall.common.ErrorCode; @@ -7,10 +8,9 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxCouponCVo; +import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.domain.vo.WxCouponOrderCVo; -import com.iformall.enums.EnumCouponType; -import com.iformall.enums.EnumCouponValidType; -import com.iformall.enums.EnumCreditLockedStatus; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; import io.swagger.annotations.Api; @@ -26,7 +26,10 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.web.bind.annotation.*; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -70,6 +73,33 @@ public class WxCouponOrderController extends BaseController { return new ResultData(page); } + @ApiOperation("分页列表接口") + @GetMapping("goodsList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData goodsList(@ModelAttribute WxCouponOrderBVo wxCouponOrderBvo, Integer pageNum, Integer pageSize) { + if (null == wxCouponOrderBvo) wxCouponOrderBvo = new WxCouponOrderBVo(); + wxCouponOrderBvo.updateTenantInfo(getTenantInfo()); + wxCouponOrderBvo.setMerchantId(getLoginBUser().getMerchantId()); + wxCouponOrderBvo.setCouponType(EnumCouponType.COUPON_DISTRIBUTION.getCode()); + List shippingStatuss = new ArrayList<>(); + if(EnumOrderShopingStatus.WAIT_SENG_GOODS.getCode().equals(wxCouponOrderBvo.getShippingStatus())){ + shippingStatuss.add(EnumOrderShopingStatus.READY_SELF_MENTION.getCode()); + shippingStatuss.add(EnumOrderShopingStatus.READY_DISTRIBUTION.getCode()); + }else if(EnumOrderShopingStatus.SENG_GOODS.getCode().equals(wxCouponOrderBvo.getShippingStatus())){ + shippingStatuss.add(EnumOrderShopingStatus.WAIT_SELF_MENTION.getCode()); + shippingStatuss.add(EnumOrderShopingStatus.WAIT_DISTRIBUTION.getCode()); + }else if(EnumOrderShopingStatus.FINISH_SENG_GOODS.getCode().equals(wxCouponOrderBvo.getShippingStatus())){ + wxCouponOrderBvo.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + } + if(shippingStatuss.size() > 0){ + wxCouponOrderBvo.setShippingStatuss(shippingStatuss); + } + final PageInfo page = wxCouponOrderService.goodsListAsPage(wxCouponOrderBvo, pageNum, pageSize); + return new ResultData(page); + } + @ApiOperation("根据id更新接口") @PostMapping("update") public ResultData update(@RequestBody WxCouponOrder wxCouponOrder) { @@ -171,6 +201,7 @@ public class WxCouponOrderController extends BaseController { wxCouponOrderCVo.setTitle(wxCouponCVo.getTitle()); wxCouponOrderCVo.setSubTitle(wxCouponCVo.getSubTitle()); wxCouponOrderCVo.setSalePrice(wxCouponCVo.getSalePrice()); + wxCouponOrderCVo.setFreightPrice(wxCouponCVo.getFreightPrice()); wxCouponOrderCVo.setUsePrice(wxCouponCVo.getUsePrice()); wxCouponOrderCVo.setPrice(wxCouponCVo.getPrice()); wxCouponOrderCVo.setUnit(wxCouponCVo.getUnit()); @@ -307,7 +338,7 @@ public class WxCouponOrderController extends BaseController { WxCouponOrder couponOrder = null; try { wxCouponOrder.setVerifyRemark(verifyRemark); - couponOrder = wxCouponOrderService.verify(wxCouponOrder, wxMerchantBUser); + couponOrder = wxCouponOrderService.verify(wxCouponOrder, wxMerchantBUser, EnumCouponVerifyType.VERIFY_B); } catch (MallinkException e) { logger.error("核销异常: " + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); @@ -316,13 +347,14 @@ public class WxCouponOrderController extends BaseController { return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage()); } - if (couponOrder != null) { - wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, wxMerchantBUser.getId()); + if (couponOrder != null && couponOrder.getMerchantId() != null) { + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, couponOrder.getMerchantId()); } return new ResultData(couponOrder); } - + + @ApiOperation(value = "根据couponOrderId查询接口", notes = "{\"couponOrderId\":\"string\"}") @PostMapping("/findById") public ResultData findById(@RequestBody Map paramMap) { @@ -353,4 +385,52 @@ public class WxCouponOrderController extends BaseController { return new ResultData(); } + + @ApiOperation(value = "商品发货", notes = "{\"id\":\"string\", \"deliveryInfo\":\"jsonString\"}") + @PostMapping("/sendGoods") + public ResultData sendGoods(@RequestBody WxCouponOrder wxCouponOrder) { + logger.debug("[" + getIpAddr() + "] WxCouponPasswordController::postpone"); + if (wxCouponOrder == null || wxCouponOrder.getId() == null) { + logger.error("id不能为空: "); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + try { + WxCouponOrder couponOrder = wxCouponOrderService.getById(wxCouponOrder.getId(), getTenantInfo().getTenantId()); + if(couponOrder==null){ + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + if(!EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode().equals(couponOrder.getCouponOrderStatus())){ + return new ResultData(ErrorCode.COUPON_GOODS_STATUS_NOT_SUPPORTED); + } + WxCouponOrder updateCouponOrder = new WxCouponOrder(); + updateCouponOrder.setId(couponOrder.getId()); + if(EnumOrderShopingType.SELF_MENTION.getCode().equals(couponOrder.getShippingType())){ + updateCouponOrder.setShippingStatus(EnumOrderShopingStatus.READY_SELF_MENTION.getCode()); + }else if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(couponOrder.getShippingType())){ + if(StringUtils.isBlank(wxCouponOrder.getDeliveryInfo())){ + return new ResultData(ErrorCode.COUPON_GOODS_DELIVERY_NULL); + } + try{ + JSONObject jsonObject = JSONObject.parseObject(wxCouponOrder.getDeliveryInfo()); + jsonObject.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + updateCouponOrder.setDeliveryInfo(JSONObject.toJSONString(jsonObject)); + + }catch(Exception e){ + return new ResultData(ErrorCode.COUPON_GOODS_ADDRESS_ERROR); + } + + updateCouponOrder.setShippingStatus(EnumOrderShopingStatus.WAIT_DISTRIBUTION.getCode()); + + }else{ + return new ResultData(ErrorCode.COUPON_GOODS_TYPE_NOT_SUPPORTED); + } + updateCouponOrder.setUpdateDate(new Date()); + wxCouponOrderService.saveOrUpdate(updateCouponOrder); + + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + return new ResultData(); + } } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java index f4dcfbf64..b693979ac 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java @@ -9,6 +9,8 @@ import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.utils.IPUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -57,6 +59,9 @@ public class WxMicroPayController extends BaseController { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + OrderFactory orderFactory; @ApiOperation(value = "付款码支付订单", notes = "params:{\"authCode\":\"String\",\"totalFee\":\"支付金额\"},\n" + "注意:\n" + @@ -103,7 +108,7 @@ public class WxMicroPayController extends BaseController { WxPayOrder record = new WxPayOrder(); record.updateTenantInfo(user); - record.setOrderId(order.getId()); + record.setOrderId(EnumComposeOrder.getPayOrderId(order)); record.setAuthCode(authCode); record.setPayAmount(order.getPayment()); record.setIp(ipStr); @@ -428,7 +433,8 @@ public class WxMicroPayController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } - WxOrder microOrder = wxOrderService.getById(orderId,wxMerchantBUser.getTenantId()); + WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(EnumComposeOrder.SINGLE.getCode()).getComposeOrder(orderId, wxMerchantBUser.getTenantId()); + WxOrder microOrder = composeOrder.getSingleOrder(); if (microOrder == null) { return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); } @@ -449,7 +455,7 @@ public class WxMicroPayController extends BaseController { Integer remainPrice = payPrice; if (wxCouponOrder != null) { try { - couponPayOrder = wxCouponOrderService.microPayPreVerify(microOrder, wxCouponOrder, wxMerchantBUser, payPrice,payWay,ipStr,authCode); + couponPayOrder = wxCouponOrderService.microPayPreVerify(composeOrder, wxCouponOrder, wxMerchantBUser, payPrice,payWay,ipStr,authCode); //remainPrice = microOrder.getPayment() - couponPayOrder.getPayAmount(); remainPrice = couponPayOrder.getPayAmount(); // 更新实际支付金额 diff --git a/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java index 1afac3a93..619c73adb 100644 --- a/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -35,6 +35,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_score_rules", "wx_level_config", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_credit_history", @@ -50,6 +51,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_authorizer_info", "wx_c_user", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_c_user_car", diff --git a/mallinkCApi/src/main/java/com/iformall/controller/UserBasicInfoAddressController.java b/mallinkCApi/src/main/java/com/iformall/controller/UserBasicInfoAddressController.java new file mode 100644 index 000000000..06d41aa89 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/controller/UserBasicInfoAddressController.java @@ -0,0 +1,119 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.UserBasicInfoAddress; +import com.iformall.service.UserBasicInfoAddressService; +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("api/userBasicInfoAddress") +@Api(description = "会员地址相关接口") +public class UserBasicInfoAddressController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private UserBasicInfoAddressService userBasicInfoAddressService; + + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData list(@ModelAttribute UserBasicInfoAddress userBasicInfoAddress, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] UserBasicInfoAddressController::list"); + if (null == userBasicInfoAddress) { + userBasicInfoAddress = new UserBasicInfoAddress(); + } + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + userBasicInfoAddress.setUserId(memberId); + userBasicInfoAddress.undateFinalTenantId(getTenantInfo()); + PageInfo page = userBasicInfoAddressService.listAsPage(userBasicInfoAddress, pageNum, pageSize); + return new ResultData(page); + } + + @PostMapping("saveOrUpdate") + public ResultData saveOrUpdate(@RequestBody UserBasicInfoAddress userBasicInfoAddress) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::saveOrUpdate"); + if(userBasicInfoAddress == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + userBasicInfoAddress.setUserId(memberId); + userBasicInfoAddress.undateFinalTenantId(getTenantInfo()); + userBasicInfoAddressService.saveOrUpdate(userBasicInfoAddress); + return new ResultData(); + } + + @PostMapping("setUpDefault") + public ResultData setUpDefault(@RequestBody UserBasicInfoAddress userBasicInfoAddress) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::setUpDefault"); + if(userBasicInfoAddress == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if(userBasicInfoAddress.getId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "Id为空"); + } + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + userBasicInfoAddress.setUserId(memberId); + userBasicInfoAddress.undateFinalTenantId(getTenantInfo()); + userBasicInfoAddressService.updateDefault(userBasicInfoAddress); + return new ResultData(); + } + + @ApiOperation("删除") + @GetMapping("/del") + @ApiImplicitParam(name = "id", value = "id", dataType = "String", paramType = "query", required = true) + public ResultData delete(Long id) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::delete"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "Id为空"); + } + UserBasicInfoAddress userBasicInfoAddress = new UserBasicInfoAddress(); + userBasicInfoAddress.setId(id); + userBasicInfoAddress.undateFinalTenantId(getTenantInfo()); + userBasicInfoAddressService.deleteById(userBasicInfoAddress); + return new ResultData(); + } + + @ApiOperation("查询") + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "String", paramType = "query", required = true) + public ResultData findById(Long id) { + logger.debug("[" + getIpAddr() + "] userBasicInfoAddress::findById"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "Id为空"); + } + UserBasicInfoAddress userBasicInfoAddress = new UserBasicInfoAddress(); + userBasicInfoAddress.setId(id); + userBasicInfoAddress.undateFinalTenantId(getTenantInfo()); + UserBasicInfoAddress userAddress = userBasicInfoAddressService.findById(userBasicInfoAddress); + return new ResultData(userAddress); + } + +} \ No newline at end of file diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java index a88626ce3..796c1bf60 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java @@ -62,12 +62,16 @@ public class WxCouponController extends BaseController { @ApiImplicitParam(name = "couponChannelId", value = "couponChannelId", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "couponId", value = "couponId", dataType = "String", paramType = "query", required = false)}) public ResultData detailC(String couponChannelId, String couponId) { - if (StringUtils.isBlank(couponChannelId) || couponChannelId.equalsIgnoreCase(Constant.UNDEFINED)) { + if ((StringUtils.isBlank(couponChannelId) || couponChannelId.equalsIgnoreCase(Constant.UNDEFINED)) + && (StringUtils.isBlank(couponId) || couponId.equalsIgnoreCase(Constant.UNDEFINED))) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId/couponId为空"); } Long couponChannelIdL = 0L, couponIdL = 0L; + try { - couponChannelIdL = Long.valueOf(couponChannelId); + if (StringUtils.isNotBlank(couponChannelId) && !couponChannelId.equalsIgnoreCase(Constant.UNDEFINED)) { + couponChannelIdL = Long.valueOf(couponChannelId); + } if (StringUtils.isNotBlank(couponId) && !couponId.equalsIgnoreCase(Constant.UNDEFINED)) { couponIdL = Long.valueOf(couponId); } @@ -76,7 +80,14 @@ public class WxCouponController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId转换失败" + couponChannelId); } - String key = "cc:" + couponChannelId; + String key = "cc:"; + if(couponChannelIdL > 0){ + key = key + couponChannelIdL; + }else if(couponIdL > 0){ + key = key + couponIdL; + }else{ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId/couponId为空"); + } ValueOperations operations = cdRedisTemplate.opsForValue(); // 缓存 @@ -112,7 +123,7 @@ public class WxCouponController extends BaseController { //WxCouponCVo wxCouponCVo = wxCouponChannelService.findDetailVo(couponChannelIdL); WxCouponCVo wxCouponCVo = null; try { - wxCouponCVo = generateWxCouponCVoex(couponChannelIdL,getTenantInfo().getTenantId()); + wxCouponCVo = generateWxCouponCVoex(couponChannelIdL,couponIdL,getTenantInfo().getTenantId()); } catch (IllegalAccessException e) { logger.error("coupon detail fail,copyproperties error" + couponChannelId,e); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "coupon detail fail,copyproperties error" + couponChannelId); @@ -138,12 +149,16 @@ public class WxCouponController extends BaseController { @ApiImplicitParam(name = "couponChannelId", value = "couponChannelId", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "couponId", value = "couponId", dataType = "String", paramType = "query", required = false)}) public ResultData getHtml(String couponChannelId, String couponId) { - if (StringUtils.isBlank(couponChannelId) || couponChannelId.equalsIgnoreCase(Constant.UNDEFINED)) { + if (StringUtils.isBlank(couponChannelId) || couponChannelId.equalsIgnoreCase(Constant.UNDEFINED) + && (StringUtils.isBlank(couponId) || couponId.equalsIgnoreCase(Constant.UNDEFINED))) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId/couponId为空"); } Long couponChannelIdL = 0L, couponIdL = 0L; + try { - couponChannelIdL = Long.valueOf(couponChannelId); + if (StringUtils.isNotBlank(couponChannelId) && !couponChannelId.equalsIgnoreCase(Constant.UNDEFINED)) { + couponChannelIdL = Long.valueOf(couponChannelId); + } if (StringUtils.isNotBlank(couponId) && !couponId.equalsIgnoreCase(Constant.UNDEFINED)) { couponIdL = Long.valueOf(couponId); } @@ -152,7 +167,14 @@ public class WxCouponController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId转换失败" + couponChannelId); } - String key = "ch:" + couponChannelId; + String key = "ch:"; + if(couponChannelIdL > 0){ + key = key + couponChannelIdL; + }else if(couponIdL > 0){ + key = key + couponIdL; + }else{ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId/couponId为空"); + } ValueOperations operations = cdRedisTemplate.opsForValue(); // 缓存 @@ -199,49 +221,57 @@ public class WxCouponController extends BaseController { } private WxCouponCVo generateWxCouponCVoForHtml(Long couponChannelIdL, Long couponIdL,String tenantId) { - WxCouponChannel cc = wxCouponChannelService.getById(couponChannelIdL,tenantId); - if (cc == null) { - return null; - } - - WxCoupon c = couponService.getHtmlById(cc.getCouponId(),cc.getTenantId()); - if (c == null) { - return null; + if(couponChannelIdL > 0l){ + WxCouponChannel cc = wxCouponChannelService.getById(couponChannelIdL,tenantId); + if(cc == null){ + return null; + } + WxCoupon c = couponService.getHtmlById(cc.getCouponId(),cc.getTenantId()); + if (c == null) { + return null; + } + WxCouponCVo couponCVo = new WxCouponCVo(); + couponCVo.setId(cc.getId()); + couponCVo.setCouponId(cc.getCouponId()); + couponCVo.setHtml(c.getHtml()); + return couponCVo; + }else if(couponIdL > 0l){ + WxCoupon c = couponService.getHtmlById(couponIdL,tenantId); + if (c == null) { + return null; + } + WxCouponCVo couponCVo = new WxCouponCVo(); + couponCVo.setCouponId(c.getId()); + couponCVo.setHtml(c.getHtml()); + return couponCVo; } + return null; - WxCouponCVo couponCVo = new WxCouponCVo(); - couponCVo.setId(cc.getId()); - couponCVo.setCouponId(cc.getCouponId()); - couponCVo.setHtml(c.getHtml()); - return couponCVo; } - private WxCouponCVo generateWxCouponCVoex(Long couponChannelIdL,String tenantId) throws IllegalAccessException, InvocationTargetException { - WxCouponChannel cc = wxCouponChannelService.getById(couponChannelIdL,tenantId); - if (cc == null) { - return null; - } - - WxCoupon c = couponService.getById(cc.getCouponId(),cc.getTenantId()); - if (c == null) { - c = new WxCoupon(); - } - - WxCouponCVo wxcv = new WxCouponCVo(); - BeanUtils.copyProperties(wxcv, c); - wxcv.setId(cc.getId()); - wxcv.setCouponId(cc.getCouponId()); - wxcv.setTargetAd(cc.getTargetAd()); - wxcv.setBeginTime(cc.getBeginTime()); - wxcv.setEndTime(cc.getEndTime()); - wxcv.setQrCode(cc.getQrCode()); - - List chantlist = merchantService.findMerchantVoList(cc.getCouponId(),cc.getTenantId()); - if (null != chantlist && chantlist.size()>0) { - wxcv.setMerchantVoList(chantlist); + private WxCouponCVo generateWxCouponCVoex(Long couponChannelIdL,Long couponIdL,String tenantId) throws IllegalAccessException, InvocationTargetException { + if(couponChannelIdL > 0l){ + WxCouponChannel cc = wxCouponChannelService.getById(couponChannelIdL,tenantId); + if(cc == null){ + return null; + } + WxCouponCVo wxcv = couponService.getVoById(cc.getCouponId(),tenantId); + if(wxcv == null){ + return null; + } + wxcv.setId(cc.getId()); + wxcv.setCouponId(cc.getCouponId()); + wxcv.setTargetAd(cc.getTargetAd()); + wxcv.setBeginTime(cc.getBeginTime()); + wxcv.setEndTime(cc.getEndTime()); + wxcv.setQrCode(cc.getQrCode()); + return wxcv; + }else if(couponIdL > 0l){ + WxCouponCVo wxcv = couponService.getVoById(couponIdL,tenantId); + return wxcv; } - return wxcv; + return null; } private void updateActivityStatus(WxCouponCVo wxCouponCVo) { diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 4b77ff2ba..2896546b2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -5,19 +5,14 @@ import com.iformall.annotation.RedisCache; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity; -import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCardCVo; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponOrderCVo; -import com.iformall.enums.EnumCouponChannelActivityStatus; -import com.iformall.enums.EnumCouponOrderStatus; -import com.iformall.enums.EnumCouponOrderValidStatus; -import com.iformall.enums.EnumCouponType; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.service.MemCouponFromDspService; import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxCouponService; @@ -47,6 +42,7 @@ public class WxCouponOrderController extends BaseController { @Autowired private WxCouponService wxCouponService; + @Autowired private WxCouponOrderService wxCouponOrderService; @@ -154,6 +150,7 @@ public class WxCouponOrderController extends BaseController { wxCouponOrderCVo.setTitle(wxCouponCVo.getTitle()); wxCouponOrderCVo.setSubTitle(wxCouponCVo.getSubTitle()); wxCouponOrderCVo.setSalePrice(wxCouponCVo.getSalePrice()); + wxCouponOrderCVo.setFreightPrice(wxCouponCVo.getFreightPrice()); wxCouponOrderCVo.setUsePrice(wxCouponCVo.getUsePrice()); wxCouponOrderCVo.setPrice(wxCouponCVo.getPrice()); @@ -408,4 +405,91 @@ public class WxCouponOrderController extends BaseController { return new ResultData(); } + @ApiOperation(value = "核销接口", notes = "{\"couponOrderId\":\"string\"}") + @PostMapping("verify") + public ResultData verify(@RequestBody Map paramMap) { + logger.info("couponOrderController.verify:" + paramMap.toString()); + String couponOrderIdStr = paramMap.get("couponOrderId"); + if (StringUtils.isBlank(couponOrderIdStr)) { + logger.error("couponOrderId不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + Long couponOrderId = 0L; + try { + couponOrderId = Long.valueOf(couponOrderIdStr); + } catch (NumberFormatException e) { + couponOrderId = 0L; + logger.error("couponOrderId参数不正确: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + + WxCouponOrderCVo wxCouponOrderCVo = wxCouponOrderService.detailCUserVo(couponOrderIdStr,getTenantInfo()); + + if (wxCouponOrderCVo == null) + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + + WxCUserBasicInfo member; + try { + member = getCacheMember(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + + Date now = new Date(); + if (wxCouponOrderCVo.getValidType().equals(EnumCouponValidType.BETWEEN_TWO_TIME.getCode())){ +// && !wxCouponOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())) { + if(wxCouponOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())){ + if (wxCouponOrderCVo.getPickStartDate().after(now)) { + logger.error("此券有效期未开始:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (wxCouponOrderCVo.getPickEndDate().before(now)) { + logger.error("此券有效期已结束:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); + } + }else{ + if (wxCouponOrderCVo.getValidStartDate().after(now)) { + logger.error("此券有效期未开始:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (wxCouponOrderCVo.getValidEndDate().before(now)) { + logger.error("此券有效期已结束:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); + } + } + + } else { + if (wxCouponOrderCVo.getExpiredTime().before(now)) { + logger.error("此券已过期:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_IS_EXPIRED); + } + } + + WxCouponOrder wxCouponOrder = wxCouponOrderService.getById(couponOrderId,getTenantInfo().getTenantId()); + if (wxCouponOrder == null) { + logger.error("券ID不存在:" + couponOrderId); + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + if(!member.getId().equals(wxCouponOrder.getCUserId())){ + logger.error("此券不属于此人:" + member.getId()); + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + } + WxCouponOrder couponOrder = null; + try { + couponOrder = wxCouponOrderService.verify(wxCouponOrder,null,EnumCouponVerifyType.VERIFY_C); + } catch (MallinkException e) { + logger.error("核销异常: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("核销异常: " + e.getMessage()); + return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage()); + } + + if (couponOrder != null && couponOrder.getMerchantId() != null) { + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, couponOrder.getMerchantId()); + } + + return new ResultData(couponOrder); + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java index 210c690bc..89c1b2e97 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java @@ -7,6 +7,7 @@ import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; +import com.iformall.service.order.OrderFactory; import com.iformall.utils.Constant; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -36,7 +37,7 @@ public class WxCouponPasswordController extends BaseController { @Autowired private WxCUserBasicInfoService userService; - + @ApiOperation(value = "根据卡密领卡", notes = "{\"password\":\"String\",\"formId\":\"String\"}") @PostMapping("getCouponOrderByPassword") public ResultData getCouponOrderByPassword(@RequestBody Map params) { @@ -96,14 +97,16 @@ public class WxCouponPasswordController extends BaseController { // 3. 领取free coupon try { - WxOrder order = orderService.saveFreeOrderForCoupon(member, coupon, null, formId, couponPassword.getId(),payWay); + WxOrder order = orderService.saveFreeOrderForCoupon(false,null,member, coupon, 1, + null, formId, couponPassword.getId(),payWay, + EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null); } catch (MallinkException e) { setCouponPasswordStatus(couponPassword, EnumCouponPasswordStatus.getEnum(pwdStatus)); logger.error(e.getMessage(),e); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { setCouponPasswordStatus(couponPassword, EnumCouponPasswordStatus.getEnum(pwdStatus)); - logger.error(e.getMessage()); + logger.error(e.getMessage(),e); return new ResultData(500, e.getMessage()); } return new ResultData(); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 39fb2c8ec..82cfd40ee 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity; @@ -31,7 +32,9 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Map; @RestController @@ -58,172 +61,63 @@ public class WxOrderController extends BaseController { @Autowired RedisLock redisLock; + + //券包下单的逻辑和组合下单的逻辑差不错,但是库存走的是券包的库存,子订单的分账需要调用多次分账 + @ApiOperation(value = "券包下单,", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") + @PostMapping("couponPackageSave") + public ResultData couponPackageSave(@RequestBody List orderSaveDto) { + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + + return wxOrderService.composeSaveOrder(false,EnumComposeOrder.PACKAGECOUPON,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); + } + + @ApiOperation(value = "商品购物车组合下单", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") + @PostMapping("goodsShopCartSave") + public ResultData goodsShopCart(@RequestBody List orderSaveDto) { + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + return wxOrderService.composeSaveOrder(true,EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); + } - @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") + @ApiOperation(value = "券购物车组合下单", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") + @PostMapping("couponShopCartSave") + public ResultData couponShopCartSave(@RequestBody List orderSaveDto) { + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + return wxOrderService.composeSaveOrder(false,EnumComposeOrder.ONE_NUMBER_ORDER_BATCH,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); + } + + @ApiOperation(value = "单个券单个订单,卡(分账导致无法批量下单)、拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") @PostMapping("save") public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) { + logger.info("save orderSaveDto:"+orderSaveDto); Long memberId; try { memberId = getMemberId(); } catch (Exception e) { return new ResultData(Result.ERROR,e.getMessage()); } - return wxOrderService.saveOrder(orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); + List list = new ArrayList<>(); + OrderComposeSaveDto dto = new OrderComposeSaveDto(); + dto.setSignleOrder(orderSaveDto); + dto.setCount(1); + list.add(dto); + return wxOrderService.composeSaveOrder(false,EnumComposeOrder.SINGLE,list,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); } -// private ResultData saveOrder(OrderSaveDto orderSaveDto,Long cUserId,EnumPayWay payWay) { -// logger.info("OrderSave: " + orderSaveDto); -// if (orderSaveDto.getCouponChannelId() == null) { -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空"); -// } -// WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(orderSaveDto.getCouponChannelId(),getTenantInfo().getTenantId()); -// if (wxCouponChannel == null) { -// logger.error("couponChannelId find error, " + orderSaveDto.getCouponChannelId()); -// return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); -// } -// ResultData resultData = couponChannelCheck(orderSaveDto, wxCouponChannel); -// if (resultData != null) return resultData; -// -// WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,getFinalTenantId()); -// if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) { -// logger.info("会员权益被锁定:cUserId:" + cUserId); -// return new ResultData(ErrorCode.MEMBER_IS_LOCKED); -// } -// -// WxCoupon coupon = wxCouponService.getById(wxCouponChannel.getCouponId(),wxCouponChannel.getTenantId()); -// if (null == coupon) { -// return new ResultData(ErrorCode.COUPON_IS_EMPTY); -// } -// if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { -// return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); -// } -// //判断是否是拼团订单,如果是拼团订单,判断现在进行中的,和已完成的数量是否超出券的限制 -// if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { -// int ordercount = wxOrderService.countUserCouponGroupOrder(cUserId,coupon.getId(),coupon.getTenantId()); -// if (ordercount>=coupon.getUseLimitQuantity()) { -// return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF.getCode(),"您当前此券的有效拼团数量达到券的限购次数。"); -// } -// } -// -// WxCouponCVo wxCouponCVo = null; -// -// String key = "cc:" + orderSaveDto.getCouponChannelId(); -// ValueOperations operations = cdRedisTemplate.opsForValue(); -// // 缓存 -// boolean hasKey = cdRedisTemplate.hasKey(key); -// if (hasKey) { -// // 从缓存获取用户信息 -// wxCouponCVo = operations.get(key); -// } else { -// // 游戏没有入缓存,需要从数据库中读取 -// wxCouponCVo = wxCouponChannelService.findDetailVo(orderSaveDto.getCouponChannelId(),wxCouponChannel.getTenantId()); -// if (wxCouponCVo != null) { -// // 游戏优化,进缓存 -// cdRedisTemplate.opsForValue().set(key, wxCouponCVo, 3600, TimeUnit.SECONDS); -// } -// } -// if (wxCouponCVo == null) { -// return new ResultData(ErrorCode.COUPON_IS_EMPTY); -// } -// -// //此处判断是否存在绝对保证库存不超卖的缓存,如果没有,则把当前的库存设置为最大值。如果有,则是后台设置的时候保存的,以那个为准。 -// boolean hascache = redisLock.hasCouponStockCache(wxCouponCVo.getCouponId()); -// if (!hascache) { -// long time = System.currentTimeMillis() + RedisLock.TIMEOUT; -// String timeStr = String.valueOf(time); -// boolean stocksetlock = redisLock.lock("couponLockStockSetByOrder_"+coupon.getId(), timeStr); -// if (stocksetlock) { -// try { -// if (!redisLock.hasCouponStockCache(wxCouponCVo.getCouponId())) { -// redisLock.setCouponStock(wxCouponCVo.getCouponId(), coupon.getRemainInventory()); -// } -// }catch(Exception e) { -// logger.error("save order stock cache error.",e); -// }finally { -// redisLock.unlock("couponLockStockSetByOrder_"+coupon.getId(), timeStr); -// } -// }else { -// redisLock.unlock("couponLockStockSetByOrder_"+coupon.getId(), timeStr); -// } -// } -// -// resultData = couponUserCheck(wxCUserBasicInfo, wxCouponCVo); -// if (resultData != null) return resultData; -// -// Long couponId = orderSaveDto.getCouponId() == null ? wxCouponChannel.getCouponId() : orderSaveDto.getCouponId(); -// if (couponId == null) { -// logger.error("couponChannelId或者couponId不能为空"); -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId或者couponId不能为空"); -// } -// // 是否砍价 -// boolean isPress = orderSaveDto.getPress() != null ? orderSaveDto.getPress() : false; -// -// try { -// WxOrder order = wxOrderService.saveOrderForCoupon(wxCUserBasicInfo, coupon, orderSaveDto, isPress,payWay); -// return new ResultData(order); -// } catch (MallinkException e) { -// logger.error(e.getMessage()); -// return new ResultData(e.getErrorCode(), e.getMessage()); -// } catch (Exception e) { -// logger.error(e.getMessage()); -// return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); -// } -// } - -// private ResultData couponUserCheck(WxCUserBasicInfo user, WxCouponCVo coupon) { -// if (coupon.getConditions() == null) return null; -// JSONObject jo = null; -// try { -// jo = JSONObject.parseObject(coupon.getConditions()); -// } catch (Exception e) { -// logger.error("购买券条件判断错误:ID=" + coupon.getId() + e.getMessage()); -// } -// if (jo != null) { -// if (jo.getIntValue("type") == EnumCouponConditionType.NEW_MEMBER.getCode()){ -// -// if (user != null && user.getActRecord() > 0) -// return new ResultData(ErrorCode.COUPON_ONLY_FOR_NEW_MEMBER); -// if (wxOrderService.countCouponConditionType1(coupon.getTenantId(),user.getId()) > 0) -// return new ResultData(ErrorCode.COUPON_ALREADY_IN_NEW_MEMBER); -// }else if (jo.getIntValue("type") == EnumCouponConditionType.SCORE_SCOPE.getCode()){ -// int max = jo.getIntValue("max"); -// int min = jo.getIntValue("min"); -// -// if (max!=0 && min ==0 && user.getPoins() > max) { -// return new ResultData(ErrorCode.COUPON_SCORE_NOT_IN_RANGE); -// } -// if (max==0 && min !=0 && user.getPoins() < min) { -// return new ResultData(ErrorCode.COUPON_SCORE_NOT_IN_RANGE); -// } -// if (max!=0 && min !=0 && (user.getPoins() < min || user.getPoins() > max)) { -// return new ResultData(ErrorCode.COUPON_SCORE_NOT_IN_RANGE); -// } -// } -// } -// -// return null; -// } - -// private ResultData couponChannelCheck(@RequestBody OrderSaveDto orderSaveDto, WxCouponChannel wxCouponChannel) { -// if (wxCouponChannel.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) { -// Date now = new Date(); -// if (wxCouponChannel.getBeginTime().getTime() > now.getTime()) { -// logger.error("此券活动未开始:" + orderSaveDto.getCouponChannelId()); -// return new ResultData(ErrorCode.COUPON_CHANNEL_IS_NOT_STARTED); -// } -// if (wxCouponChannel.getEndTime().getTime() < now.getTime()) { -// logger.error("此券活动已结束:" + orderSaveDto.getCouponChannelId()); -// return new ResultData(ErrorCode.COUPON_CHANNEL_IS_END); -// } -// } -// -// if (wxCouponChannel.getStatus() == EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) { -// logger.error("此券已下架:" + orderSaveDto.getCouponChannelId()); -// return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); -// } -// return null; -// } - @ApiOperation(value = "取消订单", notes = "{\"orderId\":\"string\"}") @PostMapping("cancel") public ResultData cancelOrder(@RequestBody Map paramMap) { @@ -267,7 +161,7 @@ public class WxOrderController extends BaseController { orderId = Long.valueOf(orderIdStr); } catch (NumberFormatException e) { logger.error(e.getMessage()); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "退款订单ID转换失败"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "退款订单ID转换失败:"+orderIdStr); } try { WxOrder order = wxOrderService.getById(orderId,getTenantInfo().getTenantId()); @@ -335,7 +229,7 @@ public class WxOrderController extends BaseController { id = Long.valueOf(orderId); } catch (NumberFormatException e) { logger.error("parse orderId failed"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常:"+orderId); } wxOrder.setId(id); Long memberId; @@ -377,6 +271,83 @@ public class WxOrderController extends BaseController { return new ResultData(wxOrderCVo); } + @ApiOperation("订单详情接口") + @GetMapping("detail_v1") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "String", paramType = "query", required = true) + }) + public ResultData detail_v1(String orderId) { + if (StringUtils.isBlank(orderId) || orderId.equalsIgnoreCase(Constant.UNDEFINED)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + // c端用户应该只能看到自己的订单细节 + WxOrder wxOrder = new WxOrder(); + Long id = 0L; + try { + id = Long.valueOf(orderId); + } catch (NumberFormatException e) { + logger.error("parse orderId failed"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常:"+orderId); + } + wxOrder.setId(id); + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + wxOrder.setCUserId(memberId); + WxOrderCouponVo wxOrderCVo = wxOrderService.detailCUserVo(wxOrder); + if (wxOrderCVo == null){ + wxOrderCVo = new WxOrderCouponVo(); + wxOrderCVo.setLevel(1); + + wxOrder.setComposeOrderId(wxOrder.getId()); + wxOrder.setId(null); + List wxOrders = wxOrderService.goodsDetailCUserVo(wxOrder); + if(wxOrders != null && wxOrders.size() > 0){ + wxOrderCVo.setOrderCouponVoList(wxOrders); + + WxOrderCouponVo wxOrderCouponVo = wxOrders.get(0); + wxOrderCVo.setComposeOrderType(wxOrderCouponVo.getComposeOrderType()); + wxOrderCVo.setComposeOrderId(wxOrderCouponVo.getCouponOrderId()); + wxOrderCVo.setOrderStatus(wxOrderCouponVo.getOrderStatus()); + wxOrderCVo.setCreateDate(wxOrderCouponVo.getCreateDate()); + wxOrderCVo.setPayment(wxOrders.stream().mapToInt(o -> o.getPayment()).sum()); + + }else{ + return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); + } + }else{ + wxOrderCVo.setLevel(0); + Date now = new Date(); + if (wxOrderCVo.getValidStartDate() != null && wxOrderCVo.getValidEndDate() != null + && !wxOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())) { + if (wxOrderCVo.getValidStartDate().getTime() > now.getTime()) { + wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode()); + } else if (wxOrderCVo.getValidEndDate().getTime() < now.getTime()) { + wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode()); + } else { + wxOrderCVo.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + if(wxOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode()) + && wxOrderCVo.getPickStartDate() != null && wxOrderCVo.getPickEndDate() != null){ +// wxOrderCVo.setValidStartDate(wxOrderCVo.getPickStartDate()); +// wxOrderCVo.setValidEndDate(wxOrderCVo.getPickEndDate()); + if (wxOrderCVo.getPickStartDate().getTime() > now.getTime()) { + wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode()); + } else if (wxOrderCVo.getPickEndDate().getTime() < now.getTime()) { + wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode()); + } else { + wxOrderCVo.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + } + + return new ResultData(wxOrderCVo); + } + @ApiOperation(value = "根据orderId查询接口", notes = "{\"orderId\":\"string\"}") @GetMapping("/findById") @ApiImplicitParams({ @@ -391,7 +362,7 @@ public class WxOrderController extends BaseController { id = Long.valueOf(orderId); } catch (NumberFormatException e) { logger.error("parse orderId failed"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常:"+orderId); } WxOrder order = null; try { @@ -421,7 +392,7 @@ public class WxOrderController extends BaseController { id = Long.valueOf(couponId); } catch (NumberFormatException e) { logger.error("parse couponId failed"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券ID转换异常"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券ID转换异常:"+couponId); } WxCoupon wxCoupon = null; try { @@ -490,7 +461,7 @@ public class WxOrderController extends BaseController { id = Long.valueOf(orderId); } catch (NumberFormatException e) { logger.error("parse orderId failed"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常:"+orderId); } wxOrder.setId(id); wxOrder.updateTenantInfo(getTenantInfo()); @@ -507,5 +478,63 @@ public class WxOrderController extends BaseController { } } + @ApiOperation("购物车订单详情接口") + @GetMapping("goodsDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "String", paramType = "query", required = true) + }) + public ResultData goodsDetail(String mainOrderId) { + if (StringUtils.isBlank(mainOrderId) || mainOrderId.equalsIgnoreCase(Constant.UNDEFINED)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + // c端用户应该只能看到自己的订单细节 + WxOrder wxOrder = new WxOrder(); + Long composeOrderId = 0L; + try { + composeOrderId = Long.valueOf(mainOrderId); + } catch (NumberFormatException e) { + logger.error("parse composeOrderId failed"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常:"+mainOrderId); + } + wxOrder.setComposeOrderId(composeOrderId); + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + wxOrder.setCUserId(memberId); + List wxOrders = wxOrderService.goodsDetailCUserVo(wxOrder); + if (wxOrders == null) + return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); + + return new ResultData(wxOrders); + } + + + @ApiOperation("分页订单列表接口") + @GetMapping("listGoods") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData listGoods(@ModelAttribute WxOrder wxOrder, Integer pageNum, Integer pageSize) { + // c端用户应该只能看到自己的订单 + if (wxOrder == null){ + wxOrder = new WxOrder(); + } + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + wxOrder.setCUserId(memberId); + wxOrder.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); + final PageInfo page = wxOrderService.listGoodsCAsPage(wxOrder, pageNum, pageSize); + + return new ResultData(page); + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java index 2de764783..a44003521 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java @@ -94,6 +94,7 @@ public class WxOrderGroupController extends BaseController { @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true), }) public ResultData toOrderGroup(@RequestBody WxOrderGroup wxOrderGroup) { + logger.info("toOrderGroup "+wxOrderGroup); if (wxOrderGroup.getId() == null) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id不能为空"); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java index 8a612f9fd..1e084917c 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -24,10 +24,12 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumCreditLockedStatus; import com.iformall.enums.EnumOrderStatus; import com.iformall.enums.EnumPayStatus; @@ -39,6 +41,8 @@ import com.iformall.service.WxCouponService; import com.iformall.service.WxOrderService; import com.iformall.service.WxPayAccountService; import com.iformall.service.WxPayOrderService; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.utils.IPUtil; @@ -71,6 +75,9 @@ public class WxPayOrderController extends BaseController { @Autowired private WxAppinfoService wxAppinfoService; + @Autowired + OrderFactory orderFactory; + /** * 微信支付 * @param paramMap @@ -87,17 +94,23 @@ public class WxPayOrderController extends BaseController { logger.info("orderId不能为空: " + paramMap.toString()); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); } - + + String composeOrderType = paramMap.get("composeOrderType"); + if (StringUtils.isBlank(composeOrderType)) { + logger.info("composeOrderType不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "composeOrderType不能为空"); + } + WxCUser user = getWxCUser(); if (!user.basicInfoIs()) { logger.error("暂未成为会员,请授权手机号"); return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号"); } - - return _create(orderIdStr,user.getUserId(),EnumPayWay.PAY_WAY_WECHAT,user.getAppId(),new PayExtraParam("openId",user.getOpenId()),request); + + return _create(orderIdStr,composeOrderType,user.getUserId(),EnumPayWay.PAY_WAY_WECHAT,user.getAppId(),new PayExtraParam("openId",user.getOpenId()),request); } - private ResultData _create(String orderIdStr,Long userId, EnumPayWay payWay,String appId,PayExtraParam parm,HttpServletRequest request) { + private ResultData _create(String orderIdStr,String composeOrderType,Long userId, EnumPayWay payWay,String appId,PayExtraParam parm,HttpServletRequest request) { WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(userId,getFinalTenantId()); if ( null == wxCUserBasicInfo) { logger.error("会员用户不存在."+userId); @@ -120,22 +133,23 @@ public class WxPayOrderController extends BaseController { record.setOrderId(orderId); try { record.setIp(IPUtil.getIpAddr(request)); + record.setComposeOrder(Integer.parseInt(composeOrderType)); return wxPayOrderService.createPayOrder(appInfo, wxCUserBasicInfo, record, payWay,parm); } catch (MallinkException e) { - logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); + logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage(),e); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { - logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); + logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage(),e); return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); } } - @ApiOperation(value = "更新支付订单状态", notes = "{\"payOrderId\":\"string\",\"orderId\":\"string\",\"status\":integer,\"reason\":\"string\"}") + @ApiOperation(value = "更新支付订单状态", notes = "{\"payOrderId\":\"string\",\"composeOrderId\":\"string\",\"status\":integer,\"reason\":\"string\"}") @PostMapping("/updatePayOrder") public ResultData updatePayOrder(@RequestBody Map paramMap) { logger.info("/api/pay/updatePayOrder" + paramMap.toString()); String payOrderIdStr = (String) paramMap.get("payOrderId"); - String orderIdStr = (String) paramMap.get("orderId"); + String orderIdStr = (String) paramMap.get("composeOrderId"); String reasonStr = (String) paramMap.get("reason"); Integer status = (Integer) paramMap.get("status"); if (StringUtils.isBlank(orderIdStr)) { @@ -185,31 +199,12 @@ public class WxPayOrderController extends BaseController { if (null == payOrder) { return new ResultData(ErrorCode.PAY_ORDER_ERROR, "未查询到payOrder."); } - WxOrder order = wxOrderService.getById(orderId,payOrder.getTenantId()); - if (null == order) { - return new ResultData(ErrorCode.PAY_ORDER_ERROR, "未查询到Order["+orderId+"]."); - } - WxCoupon wxCoupon = wxCouponService.getById(order.getProductId(),order.getTenantId()); - if (null == wxCoupon) { - return new ResultData(ErrorCode.PAY_ORDER_ERROR, "未查询到优惠券[orderId:"+orderId+"]."); - } - //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 - if (wxPayOrderService.isOrderGroupCoupon(payOrder, wxCoupon)) { - if (!order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode())) { - return new ResultData(Result.SUCCESS, "支付状态更新成功", order); - } - }else { - //非拼团的订单,支付成功,关闭订单,撤销支付订单,支付转退款的,直接返回订单信息,其他需要查询真实支付状态 - if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { - return new ResultData(Result.SUCCESS, "支付状态更新成功", order); - } - } + WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(payOrder.getComposeOrder()).getComposeOrder(payOrder.getOrderId(), payOrder.getTenantId()); //查询微信订单状态并更新 + check(composeOrder,payOrder); + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(payOrder, EnumPayWay.getEnum(payOrder.getPayVendor())); //WxCUser user = getUser(); //WxAppinfo appInfo = getAppInfo(user.getAppId()); @@ -218,13 +213,13 @@ public class WxPayOrderController extends BaseController { } WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); try { - WxPayOrder wo = wxPayOrderService.handleWxOrderQuery(payOrder, order, appInfo, payAccount, IdWorker.get(),false); + WxPayOrder wo = wxPayOrderService.handleWxOrderQuery(payOrder, composeOrder,appInfo, payAccount, IdWorker.get(),false); if (null != wo) { - return new ResultData(Result.SUCCESS, "支付状态更新成功", order); + return new ResultData(Result.SUCCESS, "支付状态更新成功", composeOrder); } }catch(MallinkException e) { //已经同步了微信的支付状态,表示已经更新 - return new ResultData(Result.SUCCESS, "支付状态更新成功", order); + return new ResultData(Result.SUCCESS, "支付状态更新成功", composeOrder); } return new ResultData(ErrorCode.PAY_ORDER_ERROR, "查询微信订单支付状态失败,请稍后!"); @@ -234,14 +229,49 @@ public class WxPayOrderController extends BaseController { } return new ResultData(Result.SUCCESS, "支付状态更新成功"); } catch (MallinkException e) { - logger.error("支付状态更新失败2: " + payOrder.toString() + ", e:" + e.getMessage()); + logger.error("支付状态更新失败2: " + payOrder.toString() + ", e:" + e.getMessage(),e); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { - logger.error("支付状态更新失败3: " + payOrder.toString() + ", e:" + e.getMessage()); + logger.error("支付状态更新失败3: " + payOrder.toString() + ", e:" + e.getMessage(),e); return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付状态更新失败3: " + payOrder.toString() + ", e:" + e.getMessage()); } } - + + private boolean check(WxComposeOrder composeOrder,WxPayOrder payOrder) { + if (EnumComposeOrder.isSingle(composeOrder.getComposeOrderType())) { + WxOrder order = composeOrder.getSingleOrder(); + if (null == order) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "未查询到Order["+payOrder.getOrderId()+"]."); + } + WxCoupon wxCoupon = wxCouponService.getById(order.getProductId(),order.getTenantId()); + if (null == wxCoupon) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "未查询到优惠券[orderId:"+payOrder.getOrderId()+"]."); + } + //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 + if (wxPayOrderService.isOrderGroupCoupon(payOrder, wxCoupon)) { + if (!order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode())) { + return true; + } + }else { + //非拼团的订单,支付成功,关闭订单,撤销支付订单,支付转退款的,直接返回订单信息,其他需要查询真实支付状态 + if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { + return true; + } + } + }else { + if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { + return true; + } + } + return false; + } + @ApiOperation("分页列表接口") @GetMapping("/list") @ApiImplicitParams({ diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java index 9cf63bf74..22a61dd54 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java @@ -223,6 +223,7 @@ public class WxPressOrderController extends BaseController { orderUpdatePress.updateTenantInfo(order); // 保存订单 wxOrderService.saveOrUpdate(orderUpdatePress); + // 发送砍价成功消息 if(index.equals(wxCouponCVo.getPressLimitNum())) { wxOrderPressService.sendPressComplateMsg(orderUpdatePress); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionOneselfController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionOneselfController.java index 195fd60b0..d68762b36 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionOneselfController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionOneselfController.java @@ -2,6 +2,7 @@ package com.iformall.controller; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; +import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxQuestionOneself; @@ -79,11 +80,17 @@ public class WxQuestionOneselfController extends BaseController { public ResultData detailsById(Long id) { logger.debug("[" + getIpAddr() + "] WxQuestionOneselfController::detailsById"); Map map = new HashMap(); + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } WxQuestionOneself wxQuestionOneself = wxQuestionOneselfService.detailsById(id); if(wxQuestionOneself != null){ WxQuestionOneselfUser userQ = new WxQuestionOneselfUser(); userQ.updateTenantInfo(getTenantInfo()); - userQ.setUserId(getMemberId()); + userQ.setUserId(memberId); userQ.setQuestionId(wxQuestionOneself.getId()); wxQuestionOneself.setUserStatus(wxQuestionOneselfUserService.countQuestion(userQ)); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index e9dfd1677..b4dab67ff 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -742,6 +742,8 @@ public class WxUserGrantController extends BaseController { userVo.setName(wxCUserBasicInfo.getName()); userVo.setBirthdate(wxCUserBasicInfo.getBirthdate()); userVo.setSex(wxCUserBasicInfo.getSex()); + userVo.setHeight(wxCUserBasicInfo.getHeight()); + userVo.setWeight(wxCUserBasicInfo.getWeight()); userVo.setAddress(wxCUserBasicInfo.getAddress()); userVo.setStatus(wxCUserBasicInfo.getStatus()); userVo.setChildrenList(wxCUserBasicInfo.getChildrenList()); @@ -894,6 +896,8 @@ public class WxUserGrantController extends BaseController { record.setAvatarUrl(wxCUserBasicInfo.getAvatarUrl()); record.setBirthdate(wxCUserBasicInfo.getBirthdate()); record.setSex(wxCUserBasicInfo.getSex()); + record.setWeight(wxCUserBasicInfo.getWeight()); + record.setHeight(wxCUserBasicInfo.getHeight()); record.setAddress(wxCUserBasicInfo.getAddress()); record.setUpdateDate(new Date()); record.setFinalTenantId(tenantEntity.getFinalTenantId()); diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java index ff7e81880..916338575 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -118,6 +118,6 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - logger.debug("afterCompletion"); + logger.debug("afterCompletion:"); } } diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/TestControllerReturnAspect.java b/mallinkCApi/src/main/java/com/iformall/interceptor/TestControllerReturnAspect.java new file mode 100644 index 000000000..07e5d9259 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/TestControllerReturnAspect.java @@ -0,0 +1,71 @@ +package com.iformall.interceptor; + +import java.io.BufferedReader; +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import com.alibaba.fastjson.JSON; + +import lombok.extern.slf4j.Slf4j; + + +/** + * 测试所有controler请求返回信息输出 + * @author alascor + * + */ +//@Aspect +//@Configuration +@Slf4j +public class TestControllerReturnAspect { + + + //@Pointcut("execution(* com.iformall.controller.*Controller.*(..))") + public void excudeService() { + } + + //@Around("excudeService()") + public Object doAround(ProceedingJoinPoint pjp) throws Throwable { + RequestAttributes ra = RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes sra = (ServletRequestAttributes) ra; + HttpServletRequest request = sra.getRequest(); + + String method = request.getMethod(); + String uri = request.getRequestURI(); + String paraString = JSON.toJSONString(request.getParameterMap()); + String requestBody = getBodyRequest(request); + //log.info("***************************************************"); + //log.info("请求开始, URI: {}, method: {}, params: {}", uri, method, paraString); + + // result的值就是被拦截方法的返回值 + Object result = pjp.proceed(); + log.info("开发调试请求结果日志,生产请关闭!!!!>>>>>>>>请求结束,URI: {}, method: {}, params: {},requestBody:{}. 返回值:{} " ,uri, method, paraString,requestBody, JSON.toJSONString(result)); + return result; + } + + private String getBodyRequest(HttpServletRequest request) throws IOException { + // 直接从HttpServletRequest的Reader流中获取RequestBody + BufferedReader reader = request.getReader(); + StringBuilder builder = new StringBuilder(); + String line = reader.readLine(); + while(line != null){ + builder.append(line); + line = reader.readLine(); + } + reader.close(); + + String reqBody = builder.toString(); + return reqBody; + } + +} diff --git a/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java index 9c72c528c..dc2a4e3d8 100644 --- a/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -35,6 +35,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_score_rules", "wx_level_config", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_credit_history", @@ -56,6 +57,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_authorizer_info", "wx_c_user", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_c_user_car", diff --git a/mallinkCallback/src/main/java/com/iformall/CallbackApplication.java b/mallinkCallback/src/main/java/com/iformall/CallbackApplication.java index 8ee5a7ec1..38c22d759 100644 --- a/mallinkCallback/src/main/java/com/iformall/CallbackApplication.java +++ b/mallinkCallback/src/main/java/com/iformall/CallbackApplication.java @@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableAsync; import springfox.documentation.swagger2.annotations.EnableSwagger2; @@ -20,6 +21,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableEncryptableProperties @EnableAsync @EnableRocketMQ +@EnableAspectJAutoProxy(exposeProxy = true) public class CallbackApplication { @Value("${fm.exception}") diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/AliPayController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/AliPayController.java index 9bb1a7375..cbe4769d2 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/AliPayController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/AliPayController.java @@ -9,6 +9,7 @@ import com.iformall.service.*; import com.iformall.service.pay.alipay.AliPayUtil; import com.iformall.service.pay.alipay.api.enums.EnumMemberCardConfig; import com.iformall.service.pay.alipay.api.result.UserAuthData; +import com.iformall.utils.AlipayMsgPage; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -58,8 +59,9 @@ public class AliPayController extends BaseController { private void writeResponse(HttpServletResponse response,String msg) { PrintWriter out; try { + response.setContentType("text/html"); out = response.getWriter(); - out.print(msg); + out.print(AlipayMsgPage.getPageContent(msg)); out.close(); } catch (IOException e) { logger.error(" alipayCallback writeResponse error.",e); diff --git a/mallinkCallback/src/main/java/com/iformall/utils/AlipayMsgPage.java b/mallinkCallback/src/main/java/com/iformall/utils/AlipayMsgPage.java new file mode 100644 index 000000000..233d317f6 --- /dev/null +++ b/mallinkCallback/src/main/java/com/iformall/utils/AlipayMsgPage.java @@ -0,0 +1,140 @@ +package com.iformall.utils; + +public class AlipayMsgPage { + + public final static String page_content_pre = "\r\n" + + "\r\n" + + "\r\n" + + "\r\n" + + " \r\n" + + " \r\n" + + " \r\n" + + "\r\n" + + "\r\n" + + "\r\n" + + "\r\n" + + "
"; + public final static String page_content_end = "
\r\n" + + "\r\n" + + "\r\n" + + "\r\n" + + ""; + + public static String getPageContent(String msg) { + return page_content_pre+msg+page_content_end; + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java b/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java index f1f7760ad..656995efe 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java @@ -1,18 +1,15 @@ package com.iformall; -import com.iformall.domain.po.msg.FmInsideCouponVerifyMsg; -import com.iformall.enums.EnumMsgRecordType; -import com.iformall.service.msg.impl.FmInsideCouponVerifyMsgServiceImpl; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; import org.mybatis.spring.annotation.MapperScan; import org.rocketmq.starter.annotation.EnableRocketMQ; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + import springfox.documentation.swagger2.annotations.EnableSwagger2; /** @@ -24,6 +21,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 @EnableRocketMQ @EnableEncryptableProperties +@EnableAspectJAutoProxy(exposeProxy = true) public class ConsumerApplication { @Value("${fm.exception}") diff --git a/mallinkNeuPosAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkNeuPosAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java index 9c72c528c..dc2a4e3d8 100644 --- a/mallinkNeuPosAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkNeuPosAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -35,6 +35,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_score_rules", "wx_level_config", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_credit_history", @@ -56,6 +57,7 @@ public class TenantInfoImpl implements TenantInfo { "wx_authorizer_info", "wx_c_user", "wx_c_user_basic_info", + "user_basic_info_address", "wx_c_user_basic_child", "wx_c_user_basic_sign", "wx_c_user_car", diff --git a/mallinkPosApi/src/main/java/com/iformall/PosApplication.java b/mallinkPosApi/src/main/java/com/iformall/PosApplication.java index 31bae8c8d..9350b8248 100644 --- a/mallinkPosApi/src/main/java/com/iformall/PosApplication.java +++ b/mallinkPosApi/src/main/java/com/iformall/PosApplication.java @@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; /** * @author Stormeye @@ -16,6 +17,7 @@ import org.springframework.context.annotation.Bean; @MapperScan(basePackages = {"com.iformall.mapper"}) @EnableEncryptableProperties @EnableRocketMQ +@EnableAspectJAutoProxy(exposeProxy = true) public class PosApplication { @Value("${fm.exception}") diff --git a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java index 7a7528522..703f442cf 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -2099,7 +2099,7 @@ public class PosServiceImpl implements PosService { payOrder.setId(idWorker.nextId()); payOrder.updateTenantInfo(merchantBUser); payOrder.setCUserId(memId); - payOrder.setOrderId(order.getId()); + payOrder.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrder.setCreateTime(curDate); payOrder.setUpdateTime(curDate); payOrder.setPayTimeStart(curDate); @@ -2140,7 +2140,7 @@ public class PosServiceImpl implements PosService { Long posPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String posPayOrderNo) { // 1. insert into PayOrder WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrderQ.updateTenantInfo(merchantBUser); List payOrderList = payOrderMapper.findList(payOrderQ); WxPayOrder payOrder = null; @@ -2153,7 +2153,7 @@ public class PosServiceImpl implements PosService { payOrder.updateTenantInfo(merchantBUser); payOrder.setCUserId(memId); payOrder.setBUserId(merchantBUser.getId()); - payOrder.setOrderId(order.getId()); + payOrder.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrder.setCreateTime(curDate); payOrder.setUpdateTime(curDate); payOrder.setPayTimeStart(curDate); @@ -2186,6 +2186,7 @@ public class PosServiceImpl implements PosService { updateCO.setId(couponOrderId); updateCO.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); updateCO.setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); + couponOrderMapper.updateById(updateCO); } WxCouponOrderCVo couponOrderCVo = couponOrderService.detailCUserVo(posPayOrderNo,merchantBUser); @@ -2214,7 +2215,7 @@ public class PosServiceImpl implements PosService { logger.error("交易核销积分异常:" + e.getMessage()); } // 3. 核销后处理 - couponOrderService.sendInsideCouponVerifyMsg(merchantBUser, couponOrderId, merchantBUser.getId()); + couponOrderService.sendInsideCouponVerifyMsg(merchantBUser, couponOrderId, merchantBUser.getMerchantId()); } return payOrder; } @@ -2238,7 +2239,7 @@ public class PosServiceImpl implements PosService { // 1. insert into PayOrder WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(buUser); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); List payOrderList = payOrderMapper.findList(payOrderQ); WxPayOrder payOrder = null; if (null == payOrderList || payOrderList.size()<=0) { @@ -2326,7 +2327,7 @@ public class PosServiceImpl implements PosService { payOrder.setTenantId(buUser.getTenantId()); payOrder.updateTenantInfo(buUser); payOrder.setCUserId(memId); - payOrder.setOrderId(order.getId()); + payOrder.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrder.setCreateTime(curDate); payOrder.setUpdateTime(curDate); payOrder.setPayTimeStart(curDate); @@ -2391,7 +2392,7 @@ public class PosServiceImpl implements PosService { WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(refundOrder); payOrderQ.setCUserId(refundOrder.getCUserId()); - payOrderQ.setOrderId(refundOrder.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(refundOrder)); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); payOrderQ.setPosPayOrderId(posPayOrderId); @@ -2495,7 +2496,9 @@ public class PosServiceImpl implements PosService { order.setPosOrderId(posOrderId); order.setPosOrderCreateTime(posOrderTime.getTime()); order.setPosOrderCreateSn(orderCreateSn); - + order.setComposeOrderId(0L); + order.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + order.setCouponNumber(1); try { orderMapper.insert(order); } catch (Exception e) { @@ -2576,6 +2579,9 @@ public class PosServiceImpl implements PosService { order.setPosOrderCreateTime(posOrderTime.getTime()); order.setPosOrderCreateSn(orderCreateSn); order.setOrderNumber(orderQ.getOrderNumber()); + order.setComposeOrderId(0L); + order.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + order.setCouponNumber(1); try { orderMapper.insert(order); diff --git a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java index ddc3ac458..e1a800de0 100644 --- a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java +++ b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java @@ -8,6 +8,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.swagger2.annotations.EnableSwagger2; @@ -21,6 +23,8 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableRocketMQ @EnableEncryptableProperties @EnableAspectJAutoProxy(exposeProxy = true) +@EnableScheduling +@EnableAsync public class ScheduleApplication { @Value("${fm.exception}") diff --git a/mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java b/mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java index 3ef7737ca..3ff83b3dc 100644 --- a/mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java +++ b/mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java @@ -6,14 +6,14 @@ import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.config.ScheduledTaskRegistrar; -@Configuration -@EnableScheduling -public class SchedulingConfig implements SchedulingConfigurer { - - @Override - public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { - - - } - -} \ No newline at end of file +//@Configuration +//@EnableScheduling +//public class SchedulingConfig implements SchedulingConfigurer { +// +// @Override +// public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { +// +// +// } +// +//} \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java index bfc212e69..e23f320aa 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java @@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -47,6 +48,7 @@ public class ActivitySchedule { /** * 每天12点执行 */ + @Async @Scheduled(cron = "0 0 12 * * ?") public void sendMsg() { logger.info("限时活动参与提醒任务启动"); @@ -91,6 +93,7 @@ public class ActivitySchedule { /** * 5分钟一次 */ + @Async @Scheduled(cron = "0 */5 * * * ?") public void activityExipred() { logger.info("活动报名结束任务"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java index a95d83c10..f7e0a4327 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java @@ -11,6 +11,7 @@ import org.apache.commons.collections.map.HashedMap; 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; @@ -40,6 +41,7 @@ public class BillNotificationSchedule { /** * 每天9点执行 */ + @Async @Scheduled(cron = "0 0 14 * * ?") public void sendMsgFromBill() { logger.info("账单通知任务启动"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/BillStatusSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/BillStatusSchedule.java index f1b713ba6..0d67b0507 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/BillStatusSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/BillStatusSchedule.java @@ -8,6 +8,7 @@ import com.iformall.service.WxBillAllService; 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; @@ -30,6 +31,7 @@ public class BillStatusSchedule { /** * 每天1点执行 */ + @Async @Scheduled(cron = "0 0 1 * * ?") public void updateBillStatus() { logger.info("账单状态更新开始"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CashOutSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CashOutSchedule.java index 58c23006b..69d571a74 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CashOutSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CashOutSchedule.java @@ -22,6 +22,7 @@ import com.iformall.service.pay.service.cashout.entity.CashOutAdapterResult; 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; @@ -56,7 +57,8 @@ public class CashOutSchedule { return wxMallMapper.findList(wxMall); } - + + @Async @Scheduled(cron = "0 5 0 * * ?") // 每天凌晨00:05 public void merchantCountSchedule() { List malls = getMalls(); @@ -75,6 +77,7 @@ public class CashOutSchedule { } } + @Async @Scheduled(cron = "0 0 0/6 * * ?") // 执行一次 public void cashOutFailSchedule() { List malls = getMalls(); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java index a68488ec7..b24513e39 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java @@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -56,6 +57,7 @@ public class ChartDataSchedule { /** * 每天7点执行 */ + @Async @Scheduled(cron = "0 0 7 * * ?") public void createData() { createCarData(); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/ContractSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/ContractSchedule.java index dc480105f..2ab62f5ea 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/ContractSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/ContractSchedule.java @@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; 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; @@ -37,6 +38,7 @@ public class ContractSchedule { /** * 凌晨5分 */ + @Async @Scheduled(cron = "0 5 0 * * ?") public void updateContractStatus() { //更新合同状态,正常到期 diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java index c7052418a..fad1da827 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java @@ -10,6 +10,7 @@ import com.iformall.mapper.*; 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; @@ -46,6 +47,7 @@ public class CouponExpiringSchedule { return wxMallMapper.findList(wxMall); } + @Async @Scheduled(cron = "0 5 0 * * ?") // 每天凌晨00:05 作废过期券,商户禁用券 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponExpiringSchedule() { @@ -53,7 +55,7 @@ public class CouponExpiringSchedule { for (WxMall mall : malls) { try { wxCouponMapper.offExpiriedCouponByValidDate(mall.getTenantId()); - wxCouponMapper.offExpiriedCouponByMerchantStatus(mall.getTenantId()); + wxCouponMapper.offExpiriedCouponByMerchantStatus(mall.getTenantId(),wxCouponMapper.getValidMerchantProductIds(mall.getTenantId())); wxCouponSendMapper.offExpiriedCouponSendByCouponStatus(mall.getTenantId()); wxCouponChannelMapper.offExpiriedCouponChannelByCouponStatus(mall.getTenantId()); @@ -63,6 +65,7 @@ public class CouponExpiringSchedule { } } + @Async @Scheduled(cron = "0 10 0 * * ?") // 每天凌晨00:10 下架定向发放 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponSendExpiringSchedule() { @@ -76,6 +79,7 @@ public class CouponExpiringSchedule { } } + @Async @Scheduled(cron = "0 10 0 * * ?") // 每天凌晨00:10 下架主动领取 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponChannelExpiringSchedule() { @@ -91,12 +95,14 @@ public class CouponExpiringSchedule { } } + @Async @Scheduled(cron = "0 15 0 * * ?") // 每天凌晨00:15 下架券广告 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void screenAdExpiringSchedule() { wxScreenAdMapper.offScreeAdByCouponChannelStatus(); } + @Async @Scheduled(cron = "0 0,1,2,3 0/1 * * ?") // 每小时 0, 1 ,2 ,3 分钟(整点)执行//限时抢购 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponChannel2ExpiringSchedule() { @@ -110,6 +116,7 @@ public class CouponExpiringSchedule { } } + @Async @Scheduled(cron = "0 20 0 * * ?") // 每天凌晨00:20 下架游戏 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void gameExpiringSchedule() { @@ -117,20 +124,22 @@ public class CouponExpiringSchedule { wxGame.setStatus(EnumGameStatus.STATUS_THROW_IN.getCode()); List list = wxGameMapper.findList(wxGame); - list.stream().forEach(g->{ - WxCouponChannel couponChannel = new WxCouponChannel(); - couponChannel.updateTenantInfo(g); - couponChannel.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_GAME.getCode()); - couponChannel.setSubTargetId(g.getId()); - couponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); - int count = wxCouponChannelMapper.countCouponChannel(couponChannel); - if (count == 0) { - WxGame record = new WxGame(); - record.setId(g.getId()); - record.setStatus(EnumGameStatus.STATUS_TAKE_OFFF.getCode()); - wxGameMapper.updateById(record); - } - }); + if (null != list && list.size() > 0 ) { + list.stream().forEach(g->{ + WxCouponChannel couponChannel = new WxCouponChannel(); + couponChannel.updateTenantInfo(g); + couponChannel.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_GAME.getCode()); + couponChannel.setSubTargetId(g.getId()); + couponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); + int count = wxCouponChannelMapper.countCouponChannel(couponChannel); + if (count == 0) { + WxGame record = new WxGame(); + record.setId(g.getId()); + record.setStatus(EnumGameStatus.STATUS_TAKE_OFFF.getCode()); + wxGameMapper.updateById(record); + } + }); + } } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index 935271bcc..7ec13fed2 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -2,11 +2,13 @@ package com.iformall.schedule; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxOrderService; import com.iformall.service.WxProfitSharingOrderService; import com.iformall.service.WxRefundOrderService; @@ -15,6 +17,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.framework.AopContext; 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; @@ -30,6 +33,9 @@ public class CouponOrderExpiringSchedule { @Autowired private WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + private WxCouponOrderService wxCouponOrderService; + @Autowired private WxRefundOrderService wxRefundOrderService; @@ -57,7 +63,6 @@ public class CouponOrderExpiringSchedule { return wxMallMapper.findList(wxMall); } - @Scheduled(cron = "0 0 5 * * ?") // 每天凌晨00:05 // @Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponOrderExpiringSchedule() { @@ -66,15 +71,17 @@ public class CouponOrderExpiringSchedule { List malls = getMalls(); for (WxMall mall: malls) { List list = wxCouponOrderMapper.findExpiredFreeCouponOrderByValidDate(mall.getTenantId()); - list.stream().forEach(co -> { - // 券过期,更改状态及库存退回 - try { - proxy.couponOrderExpire(co, true); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - }); + if (null != list && list.size() > 0 ) { + list.stream().forEach(co -> { + // 券过期,更改状态及库存退回 + try { + proxy.couponOrderExpire(co, true); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + + }); + } } } @@ -86,13 +93,15 @@ public class CouponOrderExpiringSchedule { List malls = getMalls(); for (WxMall mall: malls) { List list = wxCouponOrderMapper.findExpiredCouponOrderByValidDate(mall.getTenantId()); - list.stream().forEach(co -> { - try { - proxy.refund(co); - }catch(Exception e) { - logger.error(e.getMessage()); - } - }); + if (null != list && list.size() > 0 ) { + list.stream().forEach(co -> { + try { + proxy.refund(co); + }catch(Exception e) { + logger.error(e.getMessage(),e); + } + }); + } } } @@ -104,10 +113,40 @@ public class CouponOrderExpiringSchedule { couponOrderExpireRefund(order, true); } + + @Scheduled(cron = "0 0 5 * * ?") // 每天凌晨00:05 +// @Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + public void couponOrderGoodsVerifySchedule() {//14天确认收获 系统自动核销 + + List malls = getMalls(); + for (WxMall mall: malls) { + List list = wxCouponOrderMapper.findExpiredCouponOrderGoodsVerify(mall.getTenantId()); + if (null != list && list.size() > 0 ) { + list.stream().forEach(co -> { + WxCouponOrder couponOrder = null; + try { + couponOrder = wxCouponOrderService.verify(co,null,EnumCouponVerifyType.VERIFY_C_AUTO); + } catch (MallinkException e) { + logger.error("核销异常: " + e.getMessage()); + } catch (Exception e) { + logger.error("核销异常: " + e.getMessage()); + } + + if (couponOrder != null && couponOrder.getMerchantId() != null) { + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, couponOrder.getId(), couponOrder.getMerchantId()); + } + }); + } + } + } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void couponOrderExpire(WxCouponOrder co, boolean bStockBack) { + //商品订单不过期 + if(EnumCouponType.COUPON_DISTRIBUTION.getCode().equals(co.getCouponType())){ + return; + } // 标记 couponOrder过期 WxCouponOrder updateRecord = new WxCouponOrder(); updateRecord.setId(co.getId()); @@ -123,7 +162,8 @@ public class CouponOrderExpiringSchedule { // 库存退回 if(bStockBack) { WxOrder order = wxOrderMapper.selectById(co.getOrderId(),co.getTenantId()); - if(order != null) { + //券包子券没有库存 + if(order != null && order.getParentOrderId() == 0l) { wxOrderService.stockBack(order); } } @@ -162,7 +202,11 @@ public class CouponOrderExpiringSchedule { try { WxPayOrder wxPayOrder = new WxPayOrder(); wxPayOrder.updateTenantInfo(co); - wxPayOrder.setOrderId(co.getOrderId()); + Long orderId = co.getOrderId(); + if (!EnumComposeOrder.isSingle(co.getComposeOrderType())) { + orderId = co.getComposeOrderId(); + } + wxPayOrder.setOrderId(orderId); wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder)); if (wxPayOrder != null && wxPayOrder.getShare().equals(EnumPayShare.YES.getCode())) { @@ -176,18 +220,18 @@ public class CouponOrderExpiringSchedule { wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - if (wxPayOrder.getRateAmount() != null) { + if (wxPayOrder.getChildOrderShare(co.getOrderId()).getRateAmount() != null) { // 实际分账金额为 分账金额 + 通道费差 - wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()+wxPayOrder.getRateAmount()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(co.getOrderId()).getShareAmount()+wxPayOrder.getChildOrderShare(co.getOrderId()).getRateAmount()); } else { // 未设置通道费差 - wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(co.getOrderId()).getShareAmount()); } wxProfitSharingOrderService.finishSharingOrder(wxSharingOrderDto,wxPayOrder.getPayVendor()); } } catch (MallinkException e) { - logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage()); + logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage(),e); throw new MallinkException(e.getErrorCode(), e.getMessage()); } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java index 9043a7055..613dcf960 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java @@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -74,7 +75,7 @@ public class CouponSendSchedule { @Autowired private PushLimitService pushLimitService; - + @Async //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 @Scheduled(cron = "0 0 6 * * ?") // 测试每天6点发券 //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 @@ -219,6 +220,7 @@ public class CouponSendSchedule { /** * 生日券发放 */ + @Async @Scheduled(cron = "0 30 8 * * ?") // 测试每天8:30点发券 public void birthdayCouponSendSchedule() { logger.info("生日发券: 任务开始"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java index 5b8794f2c..8a3b99467 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java @@ -9,6 +9,7 @@ import com.iformall.service.WxDateAmountRecordService; 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; @@ -69,32 +70,34 @@ public class DaliyAmountSchedule { wxDateAmountRecordService.saveAmount(dateAmountRecord); list = wxCouponOrderMapper.findListOfVerifiedByDate(dateMap); - logger.info("\nfind " + list.size() + " coupon order from " + startDate + " to " + endDate); - total_price = list.stream().mapToInt(p -> p.getCouponPrice()).sum(); - logger.info("\nFound " + list.size() + " coupon orders \n" + - "for merchantId:" + merchant.getId() + "\n" + - "from " + startDate + " to " + endDate + "\n" + - "TOTAL VERIFIED=" + total_price); - - dateAmountRecord.setPayPrice(total_price); - dateAmountRecord.setType(EnumDateAmtType.VERIFY_RECORD.getCode()); - wxDateAmountRecordService.saveAmount(dateAmountRecord); - - Map microPayMap = wxOrderMapper.dayMicroPayAmountList(dateMap); - Long countMic = (Long) microPayMap.get("count"); - BigDecimal totalPriceMic = (BigDecimal) microPayMap.get("total_price"); - logger.info("\nFound " + countMic + " order " + "\n" + - "for merchantId:" + merchant.getId() + "\n" + - "from " + startDate + " to " + endDate + "\n" + - "TOTAL Payment=" + totalPriceMic); - - dateAmountRecord.setPayPrice(totalPriceMic.intValue()); - dateAmountRecord.setType(EnumDateAmtType.MICROPAY_RECORD.getCode()); - wxDateAmountRecordService.saveAmount(dateAmountRecord); + if (null != list && list.size() > 0) { + logger.info("\nfind " + list.size() + " coupon order from " + startDate + " to " + endDate); + total_price = list.stream().mapToInt(p -> p.getCouponPrice()).sum(); + logger.info("\nFound " + list.size() + " coupon orders \n" + + "for merchantId:" + merchant.getId() + "\n" + + "from " + startDate + " to " + endDate + "\n" + + "TOTAL VERIFIED=" + total_price); + + dateAmountRecord.setPayPrice(total_price); + dateAmountRecord.setType(EnumDateAmtType.VERIFY_RECORD.getCode()); + wxDateAmountRecordService.saveAmount(dateAmountRecord); + + Map microPayMap = wxOrderMapper.dayMicroPayAmountList(dateMap); + Long countMic = (Long) microPayMap.get("count"); + BigDecimal totalPriceMic = (BigDecimal) microPayMap.get("total_price"); + logger.info("\nFound " + countMic + " order " + "\n" + + "for merchantId:" + merchant.getId() + "\n" + + "from " + startDate + " to " + endDate + "\n" + + "TOTAL Payment=" + totalPriceMic); + + dateAmountRecord.setPayPrice(totalPriceMic.intValue()); + dateAmountRecord.setType(EnumDateAmtType.MICROPAY_RECORD.getCode()); + wxDateAmountRecordService.saveAmount(dateAmountRecord); + } } - + @Async @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点盘点前一天的数据 //@Scheduled(cron = "0 0 1 * * ?") // 测试10秒中一次 public void daliyAmountSchedule() { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java index e8aed9ea6..48f2a84d7 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java @@ -10,6 +10,7 @@ import com.iformall.mapper.WxDeviceMapper; 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; @@ -32,6 +33,7 @@ public class DeviceHbCheckSchedule { @Autowired KwMeterMapper kwMeterMapper; + @Async @Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void offlineCheckSchedule() { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/FloatingLayerSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/FloatingLayerSchedule.java index 368340229..0ebafde20 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/FloatingLayerSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/FloatingLayerSchedule.java @@ -4,6 +4,7 @@ import com.iformall.mapper.WxCuserFloatingLayerMapper; 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; @@ -22,6 +23,7 @@ public class FloatingLayerSchedule { /** * 每天23点执行 */ + @Async @Scheduled(cron = "0 0 23 * * ?") public void sendMsg() { logger.info("删除浮层用户数据开始"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/InvestSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/InvestSchedule.java index a30ea1e30..61449f833 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/InvestSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/InvestSchedule.java @@ -19,6 +19,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -59,6 +60,7 @@ public class InvestSchedule { private static final String TAG_REMIND = "招商定时任务-提醒"; + @Async @Scheduled(cron = "0 0 14 * * ?") // 每天下午两点执行定时任务 //@Scheduled(cron = "0 */30 * * * *?") // 测试,每30分钟执行 public void messageSchedule() { @@ -70,6 +72,7 @@ public class InvestSchedule { log.info("{}: 结束", TAG_MESSAGE); } + @Async @Scheduled(cron = "0 */5 * * * *?") public void remindSchedule() { log.info("{}: 开始", TAG_REMIND); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/LatePayBillActionSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/LatePayBillActionSchedule.java index 67a7381ad..1eac36b92 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/LatePayBillActionSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/LatePayBillActionSchedule.java @@ -5,6 +5,7 @@ import com.iformall.mapper.WxBillRentMapper; 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; @@ -21,6 +22,7 @@ public class LatePayBillActionSchedule { /** * 每天凌晨1点执行 */ + @Async @Scheduled(cron = "0 0 1 * * ?") public void updateBillStatus() { try { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java index d3e5388ee..66dc81226 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java @@ -14,6 +14,7 @@ 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 java.util.List; @@ -43,6 +44,7 @@ public class MsgSendingSchedule { /** * 每小时第一分钟执行 */ + @Async @Scheduled(cron = "0 1 */1 * * ?") public void sendmsgschedule() { logger.info("sendmsg定时任务启动"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java index 1ca3e16eb..980bed148 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.framework.AopContext; 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; @@ -20,6 +21,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.enums.EnumAppType; +import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumOrderStatus; import com.iformall.enums.EnumOrderType; import com.iformall.enums.EnumPayStatus; @@ -31,6 +33,8 @@ import com.iformall.service.WxOrderService; import com.iformall.service.WxPayOrderService; import com.iformall.service.WxRefundOrderService; import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; import com.iformall.utils.DateUtils; @@ -84,12 +88,14 @@ public class OrderExpiringSchedule { @Autowired PayServiceFactory payServiceFactory; + @Autowired + OrderFactory orderFactory; + private List getMalls() { WxMall wxMall =new WxMall(); return wxMallMapper.findList(wxMall); } - @Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void orderExpireSchedule() { @@ -117,13 +123,15 @@ public class OrderExpiringSchedule { dateMap.put("endDate", expireDate); dateMap.put("tenantId", tenantId); List orderCoupons = wxOrderMapper.findListOfUnpaidOrderByDate(dateMap); - orderCoupons.stream().forEach( o -> { - try { - proxy.orderExpired(o,true,payWay); - } catch (Exception e) { - logger.error("券过期失败" + e.getMessage()); - } - }); + if (null != orderCoupons && orderCoupons.size() > 0) { + orderCoupons.stream().forEach( o -> { + try { + proxy.orderExpired(o,true,payWay); + } catch (Exception e) { + logger.error("券过期失败" + e.getMessage()); + } + }); + } // 砍价相关订单, // 1. 如果已经砍价完成,必须60分钟内支付, 未支付,订单过期 @@ -132,25 +140,29 @@ public class OrderExpiringSchedule { dateMap.put("endDate", pressExpireDate); dateMap.put("tenantId", tenantId); List orderPresss = wxOrderMapper.findListOfCompleteUnPaidPressOrderByDate(dateMap); - orderPresss.stream().forEach( o -> { - try { - proxy.orderPressExpired(o, true,true,payWay); - } catch (Exception e) { - logger.error("砍价券支付过期失败" + e.getMessage()); - } - }); + if (null != orderPresss && orderPresss.size() > 0) { + orderPresss.stream().forEach( o -> { + try { + proxy.orderPressExpired(o, true,true,payWay); + } catch (Exception e) { + logger.error("砍价券支付过期失败" + e.getMessage()); + } + }); + } // 2. 当前已超过砍价结束时间, 订单过期 dateMap.put("type", EnumOrderType.COUPON.getCode()); dateMap.put("endDate", curDate); dateMap.put("tenantId", tenantId); orderPresss = wxOrderMapper.findListOfUnpaidPressOrderByDate(dateMap); - orderPresss.stream().forEach( o -> { - try { - proxy.orderPressExpired(o, false,true,payWay); - } catch (Exception e) { - logger.error("砍价券过期失败" +e.getMessage()); - } - }); + if (null != orderPresss && orderPresss.size() > 0) { + orderPresss.stream().forEach( o -> { + try { + proxy.orderPressExpired(o, false,true,payWay); + } catch (Exception e) { + logger.error("砍价券过期失败" +e.getMessage()); + } + }); + } // 拼团取消 @@ -168,13 +180,15 @@ public class OrderExpiringSchedule { dateMap.put("endDate", groupExpireDate); dateMap.put("tenantId", tenantId); List orderGroups = wxOrderMapper.findListOfUnpaidGroupOrderByDate(dateMap); - orderGroups.stream().forEach( o -> { - try { - proxy.orderGroupExpired(o,true,true,payWay); - } catch (Exception e) { - logger.error("砍价券支付过期失败" + e.getMessage()); - } - }); + if (null != orderGroups && orderGroups.size() > 0) { + orderGroups.stream().forEach( o -> { + try { + proxy.orderGroupExpired(o,true,true,payWay); + } catch (Exception e) { + logger.error("砍价券支付过期失败" + e.getMessage()); + } + }); + } //更新拼团过期状态 @@ -182,57 +196,71 @@ public class OrderExpiringSchedule { //拼团过期 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()); order.setTenantId(tenantId); - wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { - try { - proxy.expiredAndReturnMoney((WxOrder) o,false,payWay); - } catch (Exception e) { - logger.error("拼团过期退款失败" + e.getMessage()); - } - }); + List _orderList = wxOrderMapper.selectList(new QueryWrapper(order)); + if (null != _orderList && _orderList.size() > 0) { + _orderList.stream().forEach(o -> { + try { + proxy.expiredAndReturnMoney((WxOrder) o,false,payWay); + } catch (Exception e) { + logger.error("拼团过期退款失败" + e.getMessage()); + } + }); + } //拼团券下架 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); - wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { - try { - proxy.returnMoney((WxOrder) o,payWay); - } catch (Exception e) { - logger.error("拼团券下架退款失败" + e.getMessage()); - } - }); + _orderList = wxOrderMapper.selectList(new QueryWrapper(order)); + if (null != _orderList && _orderList.size() > 0) { + _orderList.stream().forEach(o -> { + try { + proxy.returnMoney((WxOrder) o,payWay); + } catch (Exception e) { + logger.error("拼团券下架退款失败" + e.getMessage()); + } + }); + } //参团失败 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); - wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { - try { - proxy.expiredAndReturnMoney((WxOrder) o,true,payWay); - } catch (Exception e) { - logger.error("参团失败退款失败" + e.getMessage()); - } - }); + _orderList = wxOrderMapper.selectList(new QueryWrapper(order)); + if (null != _orderList && _orderList.size() > 0) { + _orderList.stream().forEach(o -> { + try { + proxy.expiredAndReturnMoney((WxOrder) o,true,payWay); + } catch (Exception e) { + logger.error("参团失败退款失败" + e.getMessage()); + } + }); + } //无需查询付款状态的订单-退款,回滚库存 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_SCHEDU_REFUND.getCode()); - wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { - try { - proxy.expiredAndReturnMoney((WxOrder) o,false,payWay); - } catch (Exception e) { - logger.error("参团失败退款失败" + e.getMessage()); - } - }); + _orderList = wxOrderMapper.selectList(new QueryWrapper(order)); + if (null != _orderList && _orderList.size() > 0) { + _orderList.stream().forEach(o -> { + try { + proxy.expiredAndReturnMoney((WxOrder) o,false,payWay); + } catch (Exception e) { + logger.error("参团失败退款失败" + e.getMessage()); + } + }); + } //此处是拼团完成后,会将其他失效的订单置成该状态。需要查询是否已经付款,如果已经付款,则退款,退款回回滚库存。如果没付款,则主动回滚库存 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode()); - wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { - try { - proxy.expiredCheckAndReturnMoney((WxOrder) o,payWay); - } catch (Exception e) { - logger.error("参团失败退款失败" + e.getMessage()); - } - }); - - + _orderList = wxOrderMapper.selectList(new QueryWrapper(order)); + if (null != _orderList && _orderList.size() > 0) { + _orderList.stream().forEach(o -> { + try { + proxy.expiredCheckAndReturnMoney((WxOrder) o,payWay); + } catch (Exception e) { + logger.error("参团失败退款失败" + e.getMessage()); + } + }); + } } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void expiredCheckAndReturnMoney(WxOrder wxOrder,EnumPayWay payWay) throws MallinkException, Exception { if (wxPaySuccess(wxOrder, false, payWay)) { @@ -252,7 +280,7 @@ public class OrderExpiringSchedule { public boolean wxPaySuccess(WxOrder order,boolean autoReHandle,EnumPayWay payWay) throws MallinkException, Exception { WxPayOrder payOrderq = new WxPayOrder(); - payOrderq.setOrderId(order.getId()); + payOrderq.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrderq.setTenantId(order.getTenantId()); List payorderlist = wxPayOrderMapper.findList(payOrderq); if (null == payorderlist || payorderlist.size() <=0 ) { @@ -288,11 +316,14 @@ public class OrderExpiringSchedule { } //Map retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(wxpayOrder, order, appInfo, payAccount); //int status = WxPayOrderServiceHelper.getPayStatusFromMap(retMap, wxpayOrder.getPayOrderNo()); - PayQueryAdapterResult payResult = payServiceFactory.getPayAdapterService(wxpayOrder.getPayVendor()).queryPayStatus(wxpayOrder, order, appInfo, payAccount); + PayQueryAdapterResult payResult = payServiceFactory.getPayAdapterService(wxpayOrder.getPayVendor()).queryPayStatus(wxpayOrder, appInfo, payAccount); //如果是支付成功,并且需要重试成功流程, if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode().intValue() == payResult.getCode()) { if (autoReHandle) { - wxPayOrderService.handleSuccessOrder(wxpayOrder, order, payResult,true); + WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(wxpayOrder.getComposeOrder()).getComposeOrder(wxpayOrder.getOrderId(), wxpayOrder.getTenantId()); + //无论是不是批量的,都是执行单个订单 + composeOrder.setSingleOrder(order); + wxPayOrderService.handleSuccessOrder(wxpayOrder, composeOrder, payResult, true,true); } return true; } @@ -310,8 +341,8 @@ public class OrderExpiringSchedule { // 库存退回 wxOrderService.stockBack(order); - // 微信 关单 - wxOrderService.orderClose(order,payWay); + // 微信 关单,批量的订单关单有问题 + //wxOrderService.orderClose(order,payWay); // 订单状态更改 WxOrder updateOrder = new WxOrder(); @@ -370,7 +401,7 @@ public class OrderExpiringSchedule { wxOrderService.stockBack(order); } // 微信 关单 - wxOrderService.orderClose(updateOrder,payWay); + //wxOrderService.orderClose(updateOrder,payWay); logger.info("拼团订单: " + order.getId() + " create at " + order.getCreateDate() + " expired at " + curDate); } @@ -391,7 +422,7 @@ public class OrderExpiringSchedule { WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(order); payOrderQ.setCUserId(order.getCUserId()); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); WxPayOrder payOrder = null; diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java index 13d9bc3fe..5eefd5672 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java @@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -60,20 +61,23 @@ public class PowerBillAutoBuildSchedule { /** * 每天5点执行 */ + @Async @Scheduled(cron = "0 0 5 * * ?") public void powerBillAutoConfigStart() { logger.info("自动生成电费账单开始...."); int dayOfMonth = LocalDate.now().getDayOfMonth(); List wxPowerBillAutoConfigs = wxPowerBillAutoConfigMapper.selectList(new QueryWrapper(null)); - wxPowerBillAutoConfigs = wxPowerBillAutoConfigs.stream().filter(config -> StringUtils.isNotEmpty(config.getUnitPrice()) - && StringUtils.isNotEmpty(config.getBuildDay()) - && StringUtils.isNotEmpty(config.getReceiveDay())) - .collect(Collectors.toList()); - for (int i = 0; i < wxPowerBillAutoConfigs.size(); i++) { - WxPowerBillAutoConfig wxPowerBillAutoConfig = wxPowerBillAutoConfigs.get(i); - if (String.valueOf(dayOfMonth).equals(wxPowerBillAutoConfig.getBuildDay())) { - merchantPowerBillConfigStart(wxPowerBillAutoConfig); - } + if (null != wxPowerBillAutoConfigs) { + wxPowerBillAutoConfigs = wxPowerBillAutoConfigs.stream().filter(config -> StringUtils.isNotEmpty(config.getUnitPrice()) + && StringUtils.isNotEmpty(config.getBuildDay()) + && StringUtils.isNotEmpty(config.getReceiveDay())) + .collect(Collectors.toList()); + for (int i = 0; i < wxPowerBillAutoConfigs.size(); i++) { + WxPowerBillAutoConfig wxPowerBillAutoConfig = wxPowerBillAutoConfigs.get(i); + if (String.valueOf(dayOfMonth).equals(wxPowerBillAutoConfig.getBuildDay())) { + merchantPowerBillConfigStart(wxPowerBillAutoConfig); + } + } } logger.info("自动生成电费账单结束...."); } @@ -82,8 +86,10 @@ public class PowerBillAutoBuildSchedule { WxMerchantPowerBillConfig wxMerchantPowerBillConfig = new WxMerchantPowerBillConfig(); wxMerchantPowerBillConfig.updateTenantInfo(wxPowerBillAutoConfig); List wxMerchantPowerBillConfigs = wxMerchantPowerBillConfigMapper.selectList(new QueryWrapper(wxMerchantPowerBillConfig)); - for (int i = 0; i < wxMerchantPowerBillConfigs.size(); i++) { - buildPowerBill(wxMerchantPowerBillConfigs.get(i), wxPowerBillAutoConfig); + if (null != wxMerchantPowerBillConfigs) { + for (int i = 0; i < wxMerchantPowerBillConfigs.size(); i++) { + buildPowerBill(wxMerchantPowerBillConfigs.get(i), wxPowerBillAutoConfig); + } } } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java index 2d233c2a2..69e5a4131 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java @@ -15,6 +15,7 @@ import com.iformall.service.WxProfitSharingOrderService; 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; @@ -40,6 +41,7 @@ public class SharingOrderRedoSchedule { return wxMallMapper.findList(wxMall); } + @Async @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨02:00分账重试 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void sharingOrderResultSchedule() { @@ -50,40 +52,44 @@ public class SharingOrderRedoSchedule { wxProfitSharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); wxProfitSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode()); List list = wxProfitSharingOrderMapper.findList(wxProfitSharingOrder); - list.stream().forEach(sharingOrder->{ - try { - ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder); - if (result.code != ResultData.SUCCESS) { - logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage() - + " ID:" +sharingOrder.getId() - + " RES:" + result.message); - } - - } catch (Exception e){ - logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage() - + " ID:" +sharingOrder.getId() - + " MSG:" + e.getMessage()); - } - }); + if (null != list) { + list.stream().forEach(sharingOrder->{ + try { + ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder); + if (result.code != ResultData.SUCCESS) { + logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage() + + " ID:" +sharingOrder.getId() + + " RES:" + result.message); + } + + } catch (Exception e){ + logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage() + + " ID:" +sharingOrder.getId() + + " MSG:" + e.getMessage()); + } + }); + } wxProfitSharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()); wxProfitSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode()); list = wxProfitSharingOrderMapper.findList(wxProfitSharingOrder); - list.stream().forEach(sharingOrder->{ - try { - ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder); - if (result.code != ResultData.SUCCESS) { - logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getMessage() - + " ID:" +sharingOrder.getId() - + " RES:" + result.message); - } - } catch (Exception e){ - logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getMessage() - + " ID:" +sharingOrder.getId() - + " MSG:" + e.getMessage()); - } - }); + if (null != list) { + list.stream().forEach(sharingOrder->{ + try { + ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder); + if (result.code != ResultData.SUCCESS) { + logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getMessage() + + " ID:" +sharingOrder.getId() + + " RES:" + result.message); + } + } catch (Exception e){ + logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getMessage() + + " ID:" +sharingOrder.getId() + + " MSG:" + e.getMessage()); + } + }); + } } } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoScheduletttttttttttttttttttttttttt.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoScheduletttttttttttttttttttttttttt.java index 31f0f508e..9a342fbbf 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoScheduletttttttttttttttttttttttttt.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoScheduletttttttttttttttttttttttttt.java @@ -15,6 +15,7 @@ import com.iformall.service.WxProfitSharingOrderService; 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; @@ -39,6 +40,7 @@ public class SharingOrderRedoScheduletttttttttttttttttttttttttt { return wxMallMapper.findList(wxMall); } + @Async @Scheduled(cron = "0 5 0 * * ?") // 每天凌晨02:00分账重试 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void sharingOrderResultSchedule() { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java index 5dc18648a..2475f9d5b 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java @@ -9,6 +9,7 @@ import com.iformall.service.WxProfitSharingOrderService; 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; @@ -33,6 +34,7 @@ public class SharingOrderResultSchedule { return wxMallMapper.findList(wxMall); } + @Async @Scheduled(cron = "0 15 0 * * ?") // 每天凌晨00:15更新分账结果 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void sharingOrderResultSchedule() { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java index 3028b3be6..776436157 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -31,6 +32,7 @@ public class SysMonitorSchedule { @Autowired private SysMonitorMapper sysMonitorMapper; + @Async @Scheduled(cron = "0 */5 * * * *?") // 每隔5分钟检查一下各个网址 public void checkUrls() { if(isFmMonitor) { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java index fdb34194d..a8ab2ceb4 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java @@ -8,6 +8,7 @@ import me.chanjar.weixin.common.error.WxErrorException; 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; @@ -28,7 +29,7 @@ public class WeChatAccessTokenSchedule { @Autowired MaUtil maUtil; - + @Async @Scheduled(cron = "0 1 * * * ?") // 每小时第一分钟执行 public void getAccessTokens() { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java index c3b8441c2..e98218694 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java @@ -15,6 +15,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -48,7 +49,7 @@ public class WxAppVisitSchedule { @Autowired MaUtil maUtil; - + @Async @Scheduled(cron = "0 0 9/1 * * ? ") //早晨9点开始每小时取一次,获取前一日,微信时间为GMT public void daliyVisitRetrive() { try { @@ -80,7 +81,7 @@ public class WxAppVisitSchedule { } } - + @Async @Scheduled(cron = "0 0 2 * * ? ") //2点做一次补录 public void completeVisitRetrive() { try { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java index ba3984184..ba5a76232 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils; 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; @@ -34,6 +35,7 @@ public class WxCUserTagsSchedule { @Autowired WxMallService wxMallService; + @Async // TODO 先不执行打标签操作了, 数据量太大,导致数据库CPU 100% //@Scheduled(cron = "0 0 0 25 * ?") // 每月25日凌晨01:00对会员列表扫描补录标签 @Scheduled(cron = "0 0 2 * * ?") // 测试1分钟一次 @@ -61,13 +63,15 @@ public class WxCUserTagsSchedule { PageInfo page; do{ page = wxCUserBasicInfoService.listAsPage(wxCUserBasicInfo, pageIndex++, pageSize); - page.getList().stream().forEach(cubi -> { - try { - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_SCAN, new WxCUserBasicTagVo((WxCUserBasicInfo)cubi,mall.getTenantId()),mall,null); - }catch(Exception e) { - logger.error("wxCUserTagsSchedule error."+cubi.toString(),e); - } - }); + if (null != page && null != page.getList()) { + page.getList().stream().forEach(cubi -> { + try { + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_SCAN, new WxCUserBasicTagVo((WxCUserBasicInfo)cubi,mall.getTenantId()),mall,null); + }catch(Exception e) { + logger.error("wxCUserTagsSchedule error."+cubi.toString(),e); + } + }); + } } while ((page.isHasNextPage())); } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxMsgRecordSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxMsgRecordSchedule.java index 7c365a211..e8b6c0eb2 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxMsgRecordSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxMsgRecordSchedule.java @@ -2,6 +2,7 @@ package com.iformall.schedule; import com.iformall.service.WxMsgRecordService; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -16,6 +17,7 @@ public class WxMsgRecordSchedule { @Value("${fm.clear_data_before_msg_record}") private int monthBefore; + @Async @Scheduled(cron = "0 0 1 1 * ?") // 每月1日凌晨01:00清理过期的wx_msg_record表 public void clearOldData() { msgRecordService.clearOldData(monthBefore); diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index b4bd65396..89b92bc7b 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -140,6 +140,10 @@ public enum ErrorCode{ COUPON_ONLY_FOR_NEW_MEMBER(2044, "您已经参加过新会员活动"), COUPON_ALREADY_IN_NEW_MEMBER(2045, "您已经不是新用户"), COUPON_VALID_NOT_SUPPORTED(2046, "券类型不支持"), + + COUPON_IS_EMPTY_GIFT(2120, "子券不存在"), + COUPON_IS_TAKE_OFF_GIFT(2122, "子券存在作废券"), + COUPON_VALID_DATE_ERR_GIFT(2135, "存在子券有效期在券包有效期之前"), /** * 车流 2040 */ @@ -223,6 +227,16 @@ public enum ErrorCode{ COUPON_HANDSEL_VERIFY(4010, "商户发券异常"), COUPON_MANJIAN_USE_PRICE_NO_ALLOW_(4011, "满减券金额不符合条件"), COUPON_ORDER_TYPE_NOT_SUPPORTED(4012, "券类型不支持"), + COUPON_ORDER_SEND_ERROR(4013, "券包发卷失败"), + COUPON_ORDER_DATE_ERROR(4014, "券包数据异常"), + + /** + * 商品 + */ + COUPON_GOODS_DELIVERY_NULL(5000,"物流信息为空"), + COUPON_GOODS_TYPE_NOT_SUPPORTED(5001,"该类型不支持发货"), + COUPON_GOODS_STATUS_NOT_SUPPORTED(5002,"该状态不支持发货"), + COUPON_GOODS_ADDRESS_ERROR(5003,"配送信息错误"), /** * 卡 diff --git a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java index 61bcb981b..862a16328 100644 --- a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java +++ b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java @@ -76,6 +76,13 @@ public class BaseMyBatisConfiguration { basicInfoSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(basicInfoSharding); + ShardingSphere basicInfoAddressSharding = new ShardingSphere(); + basicInfoAddressSharding.setColumn("final_tenant_id"); + basicInfoAddressSharding.setTableName("user_basic_info_address"); + basicInfoAddressSharding.setCount(100); + basicInfoAddressSharding.setRule(EnumShardingRule.HASH.getCode()); + shardingList.add(basicInfoAddressSharding); + ShardingSphere basicSignSharding = new ShardingSphere(); basicSignSharding.setColumn("tenant_id"); basicSignSharding.setTableName("wx_c_user_basic_sign"); @@ -247,6 +254,13 @@ public class BaseMyBatisConfiguration { alipayCUserSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(alipayCUserSharding); + ShardingSphere wxComposeOrderSharding = new ShardingSphere(); + wxComposeOrderSharding.setColumn("tenant_id"); + wxComposeOrderSharding.setTableName("wx_batch_order"); + wxComposeOrderSharding.setCount(100); + wxComposeOrderSharding.setRule(EnumShardingRule.HASH.getCode()); + shardingList.add(wxComposeOrderSharding); + //初始化 shardingSpherePlugin.setShardingSpheres(shardingList); Properties properties = new Properties(); diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java new file mode 100644 index 000000000..5fd68fa13 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java @@ -0,0 +1,25 @@ +package com.iformall.domain.dto; + +import com.iformall.domain.po.UserBasicInfoAddress; +import lombok.Data; + +import java.io.Serializable; + +import com.iformall.domain.po.WxCoupon; + +@Data +public class OrderComposeSaveDto implements Serializable { + + private static final long serialVersionUID = 1L; + + OrderSaveDto signleOrder;//单个券/实物商品 + + int count;//购买数量 + + Integer shippingType = 0;//配送类型 + + UserBasicInfoAddress address;//配送地址 + + WxCoupon wxCoupon; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java index 25d1c091f..52def9a31 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java @@ -21,5 +21,10 @@ public class OrderSaveDto implements Serializable { //被操作人的ID 供A端使用 private Long userId; + + public boolean isPressOrder() { + boolean isPress = this.getPress() != null ? this.getPress() : false; + return isPress; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/UserBasicInfoAddress.java b/mallinkService/src/main/java/com/iformall/domain/po/UserBasicInfoAddress.java new file mode 100644 index 000000000..7ca24bf1f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/UserBasicInfoAddress.java @@ -0,0 +1,86 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.po.base.TenantEntityWithoutFinalTenantId; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.apache.commons.lang3.StringUtils; + +import java.util.Date; + +@TableName(value = "user_basic_info_address") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class UserBasicInfoAddress extends TenantEntityWithoutFinalTenantId { + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="如果是集团版的,存集团版的tenantId,如果是商场,则存商场",name="finalTenantId") + private String finalTenantId; + + @JsonIgnore + @TableField(exist = false) + protected String shardFinalTableSuffix; + + public String getShardFinalTableSuffix(){ + if(StringUtils.isNotBlank(finalTenantId)){ + shardFinalTableSuffix = "_" + Integer.parseInt(finalTenantId)%100; + } + return shardFinalTableSuffix; + } + + @io.swagger.annotations.ApiModelProperty(value="",name="userId") + private Long userId; + + @io.swagger.annotations.ApiModelProperty(value="收货人",name="consignee") + private String consignee; + + @io.swagger.annotations.ApiModelProperty(value="国家",name="country") + private String country; + + @io.swagger.annotations.ApiModelProperty(value="省",name="province") + private String province; + + @io.swagger.annotations.ApiModelProperty(value="市",name="city") + private String city; + + @io.swagger.annotations.ApiModelProperty(value="区",name="district") + private String district; + + @io.swagger.annotations.ApiModelProperty(value="所属地区",name="region") + private String region; + + private String address; + + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + + @io.swagger.annotations.ApiModelProperty(value="邮编",name="zipcode") + private String zipcode; + + @io.swagger.annotations.ApiModelProperty(value="手机号",name="mobile") + private String mobile; + + @io.swagger.annotations.ApiModelProperty(value="",name="isDefault") + private Integer isDefault; + + @io.swagger.annotations.ApiModelProperty(value="标识",name="mark") + private String mark; + + + public void undateFinalTenantId(TenantEntity tenantEntity){ + setFinalTenantId(tenantEntity.getTenantId()); + if(StringUtils.isNotBlank(tenantEntity.getParentTenantId())){ + setFinalTenantId(tenantEntity.getParentTenantId()); + } + } + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java new file mode 100644 index 000000000..77c0f8e43 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java @@ -0,0 +1,31 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import java.util.Date; + +@TableName(value = "wx_batch_order") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxBatchOrder extends TenantEntity { + + /** + * + */ + private static final long serialVersionUID = 1L; + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="c端用户id",name="cUserId") + private Long cUserId; + @io.swagger.annotations.ApiModelProperty(value="支付金额(分):允许有负数,退款时为负值。",name="payment") + private Integer payment; + @io.swagger.annotations.ApiModelProperty(value="创建时间/砍价开始时间",name="createDate") + private Date createDate; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index c987285fe..1a0c2d0fb 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -29,6 +29,9 @@ public class WxCoupon extends TenantEntity { @TableField(exist = false) protected List types; + @TableField(exist = false) + protected List sendTypes; + @TableField(exist = false) protected List notinTypes; @@ -43,6 +46,10 @@ public class WxCoupon extends TenantEntity { @SortColumn(column = "use_price") private String usePriceStr; + @TableField(exist = false) + @SortColumn(column = "freight_price") + private String freightPriceStr; + @TableField(exist = false) @SortColumn(column = "price") private String priceStr; @@ -67,7 +74,7 @@ public class WxCoupon extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="enddate") private Date enddate; - @io.swagger.annotations.ApiModelProperty(value="券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,50.积分券,51.积分停车券,100.消费卡)",name="type") + @io.swagger.annotations.ApiModelProperty(value="券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,10.预购商品,11.可配送商品,12.券礼包,50.积分券,51.积分停车券,100.消费卡)",name="type") private Integer type; @io.swagger.annotations.ApiModelProperty(value="封面图",name="coverImg") private String coverImg; @@ -86,6 +93,8 @@ public class WxCoupon extends TenantEntity { private Integer salePrice; @io.swagger.annotations.ApiModelProperty(value="使用条件金额(适用于类型1,2,3,4)",name="usePrice") private Integer usePrice; + @io.swagger.annotations.ApiModelProperty(value="运费",name="freightPrice") + private Integer freightPrice; //EnumCouponUseLimitRule @io.swagger.annotations.ApiModelProperty(value="限领规则",name="useLimitRule") private Integer useLimitRule; @@ -213,6 +222,13 @@ public class WxCoupon extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="富文本内容",name="html") private String html; + //List String + @io.swagger.annotations.ApiModelProperty(value="卷包内容",name="giftList") + private String giftList; + + @TableField(exist = false) + private List giftCouponList; + @TableField(exist = false) @SortColumn(column = "press_count") private Integer pressSendCount; @@ -279,6 +295,13 @@ public class WxCoupon extends TenantEntity { return usePriceStr; } + public String getFreightPriceStr() { + if(freightPrice!=null) { + freightPriceStr = new BigDecimal(freightPrice).divide(new BigDecimal(100)).toString(); + } + return freightPriceStr; + } + public String getPriceStr() { if(price!=null) { priceStr = new BigDecimal(price).divide(new BigDecimal(100)).toString(); @@ -340,5 +363,4 @@ public class WxCoupon extends TenantEntity { } return false; } - } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java index 5a80c647f..fc90fa0e9 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -3,13 +3,16 @@ package com.iformall.domain.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; +import com.iformall.common.SortColumn; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.Date; +import java.util.List; @TableName(value = "wx_coupon_order") @Data @@ -21,7 +24,7 @@ public class WxCouponOrder extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "卡券ID", name = "couponId") private Long couponId; - @io.swagger.annotations.ApiModelProperty(value = "券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,100.消费卡)", name = "couponType") + @io.swagger.annotations.ApiModelProperty(value = "券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,10.预购商品,11.可配送商品,12.券礼包,50.积分券,51.积分停车券,100.消费卡)", name = "couponType") private Integer couponType; @io.swagger.annotations.ApiModelProperty(value = "c端用户id", name = "cUserId") private Long cUserId; @@ -54,7 +57,17 @@ public class WxCouponOrder extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="赠券商户编号",name="sendMerchantId") private Long sendMerchantId; @io.swagger.annotations.ApiModelProperty(value="赠券商户员工编号",name="sendMerchantUserId") - private Long sendMerchantUserId; + private Long sendMerchantUserId; + @io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType") + private Integer composeOrderType; + @io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="composeOrderId") + private Long composeOrderId; + + @io.swagger.annotations.ApiModelProperty(value="父订单编号",name="parentCouponOrderId") + private Long parentCouponOrderId; + + @io.swagger.annotations.ApiModelProperty(value="商品数量",name="couponNumber") + private Integer couponNumber; @TableField(exist = false) private String couponName; @@ -120,4 +133,34 @@ public class WxCouponOrder extends TenantEntity { this.cUserId = cUserId; } + + @io.swagger.annotations.ApiModelProperty(value="运费",name="freightPrice") + private Integer freightPrice; + + @TableField(exist = false) + @SortColumn(column = "freight_price") + private String freightPriceStr; + + public String getFreightPriceStr() { + if(freightPrice!=null) { + freightPriceStr = new BigDecimal(freightPrice).divide(new BigDecimal(100)).toString(); + } + return freightPriceStr; + } + + @io.swagger.annotations.ApiModelProperty(value="收货地址",name="shippingAddress") + private String shippingAddress; + + @io.swagger.annotations.ApiModelProperty(value="配送类型 0:默认(无) 1:自提 2:配送",name="shippingType") + private Integer shippingType; + + @io.swagger.annotations.ApiModelProperty(value="配送状态 0:默认(无) 1*:自提 2*:配送",name="shippingStatus") + private Integer shippingStatus; + + @io.swagger.annotations.ApiModelProperty(value="配送信息",name="deliveryInfo") + private String deliveryInfo; + + @TableField(exist = false) + private List shippingStatuss; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java index b890d3cf9..a67638368 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -3,6 +3,7 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.common.SortColumn; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -93,7 +94,22 @@ public class WxOrder extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="总计支付金额(分),收银台用券时使用",name="totalPayment") private Integer totalPayment; + + @io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="composeOrderId") + private Long composeOrderId; + + @io.swagger.annotations.ApiModelProperty(value="商品数量",name="couponNumber") + private Integer couponNumber; + + @io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType") + private Integer composeOrderType; + @io.swagger.annotations.ApiModelProperty(value="父订单编号",name="parentOrderId") + private Long parentOrderId; + + + + @TableField(exist = false) protected List statusS; @@ -104,7 +120,7 @@ public class WxOrder extends TenantEntity { @TableField(exist = false) private String title; - @Excel(name = "商品属性", width = 20, orderNum = "4", replace = {"消费卡_1", "优惠券_2", "砍价_3", "拼团_4", " _-1"}) + @Excel(name = "商品属性", width = 20, orderNum = "4", replace = {"消费卡_1", "优惠券_2", "砍价_3", "拼团_4","可配送商品_6","券礼包_7", " _-1"}) @TableField(exist = false) private Integer attribute; @@ -127,4 +143,25 @@ public class WxOrder extends TenantEntity { @TableField(exist = false) private String paymentStr; + @io.swagger.annotations.ApiModelProperty(value="运费",name="freightPrice") + private Integer freightPrice; + + @TableField(exist = false) + @SortColumn(column = "freight_price") + private String freightPriceStr; + + public String getFreightPriceStr() { + if(freightPrice!=null) { + freightPriceStr = new BigDecimal(freightPrice).divide(new BigDecimal(100)).toString(); + } + return freightPriceStr; + } + + @io.swagger.annotations.ApiModelProperty(value="收货地址",name="shippingAddress") + private String shippingAddress; + + @io.swagger.annotations.ApiModelProperty(value="配送类型 0:默认(无) 1:自提 2:配送",name="shippingType") + private Integer shippingType; + + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java index 7169e20b1..1e0039929 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java @@ -1,13 +1,19 @@ package com.iformall.domain.po; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.service.order.entity.WxComposeChildOrderShare; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import java.util.*; +import org.apache.commons.lang3.StringUtils; + @TableName(value = "wx_pay_order") @Data @EqualsAndHashCode(callSuper = true) @@ -52,11 +58,28 @@ public class WxPayOrder extends TenantEntity { private Integer shareAmount; @io.swagger.annotations.ApiModelProperty(value="通道费差(购买时刻的通道费差,分账完结时使用)",name="rateAmount") private Integer rateAmount; + @io.swagger.annotations.ApiModelProperty(value="子订单分账金额json",name="childOrderShare") + private String childOrderShare; + + public WxComposeChildOrderShare getChildOrderShare(Long wxOrderId) { + if (StringUtils.isBlank(this.childOrderShare)) { + return new WxComposeChildOrderShare(this.payAmount, this.shareAmount, this.rateAmount); + } + Map childs = JSON.parseObject(this.childOrderShare, Map.class); + JSONObject childOrderShare = (JSONObject) childs.get(String.valueOf(wxOrderId)); + if (null != childOrderShare) { + return new WxComposeChildOrderShare(childOrderShare.getInteger("realPayMent"), childOrderShare.getInteger("shareAmount"), childOrderShare.getInteger("rateAmount")); + } + return null; + } @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") private String failReason; @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") private Integer payEndFrom; + @io.swagger.annotations.ApiModelProperty(value="是否为组合订单,1-是 0-不是",name="composeOrder") + private Integer composeOrder; + @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS支付)",name="payFrom") private Integer payFrom; @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS, inside时,填写couponOrderId",name="posPayOrderId") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/base/BaseTenantEntity.java b/mallinkService/src/main/java/com/iformall/domain/po/base/BaseTenantEntity.java index 9fd1d9e59..610520691 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/base/BaseTenantEntity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/base/BaseTenantEntity.java @@ -65,12 +65,12 @@ public class BaseTenantEntity extends BaseEntity { } } - public TenantEntity getTenantInfo() { - TenantEntity tenantEntity = new TenantEntity(); - tenantEntity.setTenantId(tenantId); - tenantEntity.setParentTenantId(parentTenantId); - return tenantEntity; - } +// public TenantEntity getTenantInfo() { +// TenantEntity tenantEntity = new TenantEntity(); +// tenantEntity.setTenantId(tenantId); +// tenantEntity.setParentTenantId(parentTenantId); +// return tenantEntity; +// } public String getTenantId() { return tenantId; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java index 9e1d107d5..27078d885 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java @@ -16,6 +16,6 @@ public class FmInsideCouponVerifyMsg extends BaseMsg{ private String parentTenantId; @io.swagger.annotations.ApiModelProperty(value = "券包ID", name = "couponOrderId") private Long couponOrderId; - @io.swagger.annotations.ApiModelProperty(value = "B端用户ID", name = "bUserId") - private Long bUserId; + @io.swagger.annotations.ApiModelProperty(value = "B端商户ID", name = "merchantId") + private Long merchantId; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java index 8418cfe78..900fd6574 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java @@ -32,6 +32,12 @@ public class WxCUserVo extends WxCUser { @io.swagger.annotations.ApiModelProperty(value="姓名",name="name") private String name; + @io.swagger.annotations.ApiModelProperty(value="高",name="height") + private String height; + + @io.swagger.annotations.ApiModelProperty(value="重",name="weight") + private String weight; + @io.swagger.annotations.ApiModelProperty(value="折扣率",name="discountRate") private Integer discountRate; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java index e62baec56..52c796c9c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java @@ -21,7 +21,7 @@ public class WxCouponOrderBVo extends WxCouponOrder { private static final long serialVersionUID = 6687954932922444531L; - @Excel(name = "券码", width = 20, orderNum = "1", prefix = "`") + @Excel(name = "兑换码", width = 20, orderNum = "1", prefix = "`") protected Long id; /** 基础购买到的券信息 */ @@ -32,7 +32,7 @@ public class WxCouponOrderBVo extends WxCouponOrder { @io.swagger.annotations.ApiModelProperty(value = "该订单对应券的实际过期时间 ", name = "expiredTime") private Date expiredTime; - @Excel(name = "券名称", width = 50, orderNum = "2") + @Excel(name = "券/商品名称", width = 50, orderNum = "2") @io.swagger.annotations.ApiModelProperty(value="券名称",name="title") private String title; @@ -93,7 +93,7 @@ public class WxCouponOrderBVo extends WxCouponOrder { @io.swagger.annotations.ApiModelProperty(value="面额",name="price") private Integer price; - @Excel(name = "所属业态", width = 50, orderNum = "11", replace = {"餐饮_1", "娱乐_2", "服饰_3", "亲子_4", "超市_5", "其它_6", "美妆_7", "珠宝_8", "服务_9", "家居_10"}) + @Excel(name = "所属业态", width = 50, orderNum = "11", replace = {"餐饮_1", "娱乐_2", "服饰_3", "亲子_4", "超市_5", "其它_6", "美妆_7", "珠宝_8", "服务_9", "家居_10", "_null"}) @io.swagger.annotations.ApiModelProperty(value = "业态", name = "business") private Integer business; @@ -134,7 +134,7 @@ public class WxCouponOrderBVo extends WxCouponOrder { private String bUserName; @io.swagger.annotations.ApiModelProperty(value="b端用户手机号",name="bUserPhone") private String bUserPhone; - @Excel(name = "券所属商户", width = 50, orderNum = "3") + @Excel(name = "所属商户", width = 50, orderNum = "3") @io.swagger.annotations.ApiModelProperty(value="使用券商户名",name="merchantName") private String merchantName; @@ -189,7 +189,7 @@ public class WxCouponOrderBVo extends WxCouponOrder { @TableField(exist = false) private Long couponId; - @Excel(name = "券类型", width = 50, orderNum = "15", replace = {"满减券_1", "代金券_2", "团购券_3", "礼品券_4", "停车券_5", "通用券_6", "砍价券_8", "团购券_9", "预购商品_10", "积分券_50", "积分停车券_51", "消费卡_100"}) + @Excel(name = "类型", width = 50, orderNum = "15", replace = {"满减券_1", "代金券_2", "团购券_3", "礼品券_4", "停车券_5", "通用券_6", "砍价券_8", "团购券_9", "预购商品_10", "可配送商品_11", "券礼包_12", "积分券_50", "积分停车券_51", "消费卡_100"}) @TableField(exist = false) private Integer couponType; @@ -249,5 +249,12 @@ public class WxCouponOrderBVo extends WxCouponOrder { } return couponPriceStr; } + @Excel(name = "配送类型", width = 50, orderNum = "16", replace = {"线上购买_0", "到店自提_1", "配送到家_2"}) + @io.swagger.annotations.ApiModelProperty(value="配送类型 0:默认(无) 1:自提 2:配送",name="shippingType") + private Integer shippingType; + + @Excel(name = "配送状态", width = 50, orderNum = "17", replace = {"线上购买_0", "待自提_10", "待自提_14", "已自提_15", "待发货_20", "待收货_24", "已收货_25"}) + @io.swagger.annotations.ApiModelProperty(value="配送状态 0:默认(无) 1*:自提 2*:配送",name="shippingStatus") + private Integer shippingStatus; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponPressVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponPressVo.java index dd72774b9..bd16b9ef4 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponPressVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponPressVo.java @@ -47,4 +47,8 @@ public class WxOrderCouponPressVo extends WxOrder { @io.swagger.annotations.ApiModelProperty(value="商户列表",name="orderPressList") private List orderPressList; + + @io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType") + private Integer composeOrderType; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java index b9846e2cc..4ff756555 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java @@ -2,10 +2,13 @@ package com.iformall.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.iformall.common.SortColumn; +import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -20,6 +23,11 @@ public class WxOrderCouponVo extends TenantEntity { @TableField(exist = false) private Integer validStatus; + @TableField(exist = false) + private Integer level; + @TableField(exist = false) + private List orderCouponVoList; + /** 基础购买到的券信息 */ @io.swagger.annotations.ApiModelProperty(value="订单码;正反向交易保持一致。",name="orderNumber") private Long orderNumber; @@ -103,5 +111,50 @@ public class WxOrderCouponVo extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "补贴额", name = "subsidyNum") private Integer subsidyNum; + + @io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType") + private Integer composeOrderType; + @io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="composeOrderId") + private Long composeOrderId; + + @io.swagger.annotations.ApiModelProperty(value="父订单编号",name="parentOrderId") + private Long parentOrderId; + + @io.swagger.annotations.ApiModelProperty(value="商品数量",name="couponNumber") + private Integer couponNumber; + + + @io.swagger.annotations.ApiModelProperty(value="运费",name="freightPrice") + private Integer freightPrice; + + @TableField(exist = false) + @SortColumn(column = "freight_price") + private String freightPriceStr; + + public String getFreightPriceStr() { + if(freightPrice!=null) { + freightPriceStr = new BigDecimal(freightPrice).divide(new BigDecimal(100)).toString(); + } + return freightPriceStr; + } + + @io.swagger.annotations.ApiModelProperty(value="收货地址",name="shippingAddress") + private String shippingAddress; + + @io.swagger.annotations.ApiModelProperty(value="配送类型 0:默认(无) 1:自提 2:配送",name="shippingType") + private Integer shippingType; + + @io.swagger.annotations.ApiModelProperty(value="配送状态 0:默认(无) 1*:自提 2*:配送",name="shippingStatus") + private Integer shippingStatus; + + @io.swagger.annotations.ApiModelProperty(value="配送信息",name="deliveryInfo") + private String deliveryInfo; + + + @io.swagger.annotations.ApiModelProperty(value="卷包内容",name="giftList") + private String giftList; + + @TableField(exist = false) + private List giftCouponList; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java b/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java new file mode 100644 index 000000000..929d65cf4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java @@ -0,0 +1,67 @@ +package com.iformall.enums; + +import com.iformall.domain.po.WxOrder; + +/** + * @author gongbiao + */ +public enum EnumComposeOrder { + + SINGLE(0, "单个订单类型,如拼团,砍价"), + ONE_NUMBER_ORDER_BATCH(1, "购物车式组合下单,1个数量1个订单(针对同样产品)"), + MULITY_NUMBER_ORDER_BATCH(2,"购物车式组合下单,多个数量1个订单(针对同样产品)"), + PACKAGECOUPON(3,"券包订单类型"), + ; + + public static EnumComposeOrder getEnum(Integer code) { + for (EnumComposeOrder value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumComposeOrder(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public static Long getPayOrderId(WxOrder order) { + if (order.getComposeOrderType().intValue() == SINGLE.getCode().intValue()) { + return order.getId(); + }else { + return order.getComposeOrderId(); + } + } + + //是单个支付还是组合支付 + public static boolean isSingle(Integer type) { + if (type.intValue() == SINGLE.getCode().intValue()) { + return true; + }else { + return false; + } + } + + //子订单是单个还是一起,购物车的子订单是单个,可以单个支付,券包的子订单不能单个支付 +// public static boolean childOrderIsSingle(Integer type) { +// if (type.intValue() == SINGLE.getCode().intValue() || type.intValue() == ONE_NUMBER_ORDER_BATCH.getCode().intValue() +// || type.intValue() == MULITY_NUMBER_ORDER_BATCH.getCode().intValue()) { +// return true; +// }else { +// return false; +// } +// } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java index a5b426840..bf82d42d3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java @@ -7,7 +7,8 @@ public enum EnumCouponSendType { // 1:主动领取 2:定向投放 ACTIVE(1,"主动领取"), - PASSIVE(2, "定向投放") + PASSIVE(2, "定向投放"), + GIFT(3, "礼包券") ; public static EnumCouponSendType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java index df6f0c0a5..58acde51d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java @@ -16,6 +16,8 @@ public enum EnumCouponType { COUPON_PRESS(8, "砍价券"), COUPON_GROUP(9, "团购券"), COUPON_PREORDER(10, "预购商品"), + COUPON_DISTRIBUTION(11, "可配送商品"), + COUPON_GIFT(12, "券礼包"), COUPON_CREDIT(50,"积分券"), COUPON_CREDIT_PARK(51,"积分停车券"), CARD_MULTIMCH(100, "消费卡"), @@ -29,6 +31,16 @@ public enum EnumCouponType { } return null; } + + public static boolean mustHasMerchant(Integer code) { + if (null == code) { + return true; + } + if (COUPON_GIFT.code.equals(code)) { + return false; + } + return true; + } private Integer code; private String message; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java index 5bb47c5e0..5ddf00703 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java @@ -14,6 +14,11 @@ public enum EnumCouponVerifyType { VERIFY_POS_INDEPENDENT(1, "POS独立核销"), VERIFY_POS_PAY(2, "POS交易核销"), + + VERIFY_C(3,"用户自主核销"), + VERIFY_C_AUTO(30,"用户自主核销"), + + VERIFY_AUTO(4,"系统自动核销"), ; public static EnumCouponVerifyType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidySource.java b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidySource.java index 7c4ebd164..040c4e122 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidySource.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidySource.java @@ -10,7 +10,9 @@ public enum EnumMerchantSubsidySource { COUPON(2, "券核销"), PRESS(3, "砍价核销"), GROUP(4, "拼团核销"), - CASHIER(5, "收银台"),; + CASHIER(5, "收银台"), + DISTRIBUTION_GOODS(6, "可配送商品"), + GIFT_BAG(7, "券订单"),; public static EnumMerchantSubsidySource getEnum(Integer code) { for (EnumMerchantSubsidySource value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantType.java index 0dcf5786f..f012e3d8d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantType.java @@ -2,7 +2,8 @@ package com.iformall.enums; public enum EnumMerchantType { - MERCHANT_MORE(-1, "多商户") + MERCHANT_MORE(-1, "多商户"), + MERCHANT_NONE(-2, "无归属商户") ; public static EnumMerchantType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java new file mode 100644 index 000000000..59e9c74da --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java @@ -0,0 +1,50 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumOrderShopingStatus { + + ONLINE_PURCHASE(0,"线上购买"),//不需要发货 + + WAIT_SENG_GOODS(1,"待发货(查询用)"), + SENG_GOODS(2,"已发货(查询用)"), + FINISH_SENG_GOODS(3,"已完成(查询用)"), + + + READY_SELF_MENTION(10,"自提商品准备中"), + WAIT_SELF_MENTION(14,"已备货,待自提"), + ALREADY_SELF_MENTION(15,"已自提"), + + READY_DISTRIBUTION(20,"配送商品准备中"), + WAIT_DISTRIBUTION(24,"已发货,待收货"), + ALREADY_DISTRIBUTION(25,"已收货") + ; + + public static EnumOrderShopingStatus getEnum(Integer code) { + for (EnumOrderShopingStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOrderShopingStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java new file mode 100644 index 000000000..145755007 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumOrderShopingType { + + ONLINE_PURCHASE(0,"线上购买"), + SELF_MENTION(1,"自提"), + DISTRIBUTION(2,"配送") + ; + + public static EnumOrderShopingType getEnum(Integer code) { + for (EnumOrderShopingType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOrderShopingType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java index e9717a7ca..a99899c91 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java @@ -21,7 +21,8 @@ public enum EnumPayWay { PAY_WAY_NOT_UNPAY_BATCH_SEND(96, "后台批量发券,无需支付",null,null,null), PAY_WAY_NOT_UNPAY_TRADE(97, "交易发券,无需支付",null,null,null), PAY_WAY_NOT_UNPAY_PASSWD(98, "根据卡密兑换卡,无需支付",null,null,null), - PAY_WAY_NOT_UNPAY_CREDIT(99, "积分兑换券,无需支付",null,null,null) + PAY_WAY_NOT_UNPAY_CREDIT(99, "积分兑换券,无需支付",null,null,null), + PAY_WAY_NOT_UNPAY_GIFTLIST(100, "卷包子券,无需支付",null,null,null) ; public static EnumPayWay getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/UserBasicInfoAddressMapper.java b/mallinkService/src/main/java/com/iformall/mapper/UserBasicInfoAddressMapper.java new file mode 100644 index 000000000..d62be2766 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/UserBasicInfoAddressMapper.java @@ -0,0 +1,19 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.UserBasicInfoAddress; +import com.iformall.domain.po.WxCUserBasicInfo; + +import java.util.List; + +public interface UserBasicInfoAddressMapper extends CommonMapper { + + List findList(UserBasicInfoAddress record); + + int deleteById(UserBasicInfoAddress record); + + int updateDefault(UserBasicInfoAddress record); + + int updateUnDefault(UserBasicInfoAddress record); +} + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBatchOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBatchOrderMapper.java new file mode 100644 index 000000000..cfd518734 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBatchOrderMapper.java @@ -0,0 +1,20 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxBatchOrder; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +public interface WxBatchOrderMapper extends CommonMapper { + + List findList(WxBatchOrder order); + + Integer countList(WxBatchOrder order); + + WxBatchOrder selectById(@Param("id")Long id,@Param("tenantId")String tenantId); + + void updateCUserId(WxBatchOrder order); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java index 7ab9e250d..104d13c02 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java @@ -31,7 +31,8 @@ public interface WxCouponMapper extends CommonMapper { void offExpiriedCouponByValidDate(@Param("tenantId")String tenantId); - void offExpiriedCouponByMerchantStatus(@Param("tenantId")String tenantId); + List getValidMerchantProductIds(@Param("tenantId")String tenantId); + void offExpiriedCouponByMerchantStatus(@Param("tenantId")String tenantId,@Param("validIds")List validIds); /** * 查询时间段内销售金额 diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index 1fa0f4d48..0e5b49390 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -25,6 +25,8 @@ public interface WxCouponOrderMapper extends CommonMapper { List findExpiredCouponOrderByValidDate(@Param("tenantId")String tenantId); + List findExpiredCouponOrderGoodsVerify(@Param("tenantId")String tenantId); + // 券包核销 int updateVerifyCouponOrder(WxCouponOrder wxCouponOrder); int updateVerifyCouponOrderStatus(WxCouponOrder wxCouponOrder); @@ -33,6 +35,7 @@ public interface WxCouponOrderMapper extends CommonMapper { //统一的计数接口 int findCount(WxCouponOrder wxCouponOrder); + int findProductCount(WxCouponOrder wxCouponOrder); List> getCountByBusinessId(WxCouponOrder wxCouponOrder); List> getCountBySubBusinessId(WxCouponOrder wxCouponOrder); //统一额度统计接口 @@ -94,4 +97,7 @@ public interface WxCouponOrderMapper extends CommonMapper { List cardDeferCouponOrderId(@Param("couponId")Long couponId,@Param("tenantId")String tenantId); Integer findWriteOffCount(WxCouponOrder wxCouponOrder); + + List findGoodsList(WxCouponOrderBVo record); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java index ce86ac340..b80b2f94d 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java @@ -19,6 +19,7 @@ public interface WxOrderMapper extends CommonMapper { List findList(WxOrder wxOrder); Integer countList(WxOrder wxOrder); + Integer countListProduct(WxOrder wxOrder); int countCouponConditionType1(WxOrder wxOrder); List findListOfUnpaidOrderByDate(Map dateMap); @@ -64,5 +65,8 @@ public interface WxOrderMapper extends CommonMapper { void updateOrderGroupStatusByCouponChannelId(WxOrder updateOrder); void updateOrderStatusForGroup(@Param("tenantId")String tenantId); + + void updateCUserId(WxOrder updateOrder); + List listGoodsCAsPage(WxOrder record); } diff --git a/mallinkService/src/main/java/com/iformall/service/UserBasicInfoAddressService.java b/mallinkService/src/main/java/com/iformall/service/UserBasicInfoAddressService.java new file mode 100644 index 000000000..87f1f4031 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/UserBasicInfoAddressService.java @@ -0,0 +1,27 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.*; + +public interface UserBasicInfoAddressService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(UserBasicInfoAddress record, Integer pageIndex, Integer pageSize); + + void saveOrUpdate(UserBasicInfoAddress userBasicInfoAddress); + + Integer deleteById(UserBasicInfoAddress record); + + void updateDefault(UserBasicInfoAddress record); + + UserBasicInfoAddress findById(UserBasicInfoAddress userBasicInfoAddress); +} + diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 9522aa58a..94b1e0b70 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -6,7 +6,9 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.*; +import com.iformall.enums.EnumCouponVerifyType; import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -54,27 +56,26 @@ public interface WxCouponOrderService { * @param couponOrder * @param bUser 核销人(登录用户) */ - WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser); + WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser, EnumCouponVerifyType couponVerifyType); /** * 核销后发送消息 */ - void sendInsideCouponVerifyMsg(TenantEntity tenantEntity, Long couponOrderId, Long buUserId); + void sendInsideCouponVerifyMsg(TenantEntity tenantEntity, Long couponOrderId, Long merchantId); /** * 核销后处理 * * @param couponOrder - * @param bUser 核销人(登录用户) + * @param */ - void actionAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser); + void actionAfterVerify(WxCouponOrder couponOrder, WxMerchant merchant); /** * 核销发券 * @param couponOrder - * @param bUser */ - boolean sendCouponAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser); + boolean sendCouponAfterVerify(WxCouponOrder couponOrder); /** * B端刷卡支付发券 @@ -88,7 +89,7 @@ public interface WxCouponOrderService { * 核销分账 * @param couponOrder */ - void shareAfterVerify(WxCouponOrder couponOrder, Long merchantId,Integer payWay); + void shareAfterVerify(WxCouponOrder couponOrder, Long merchantId,Integer payWay,boolean mulityShare); /** * 核销后补贴 @@ -98,9 +99,9 @@ public interface WxCouponOrderService { /** * 核销模板消息 * @param couponOrder - * @param bUser + * @param merchant */ - void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser, boolean hadSentCoupon); + void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchant merchant, boolean hadSentCoupon); /** * 根据日期 b用户查券list @@ -206,7 +207,7 @@ public interface WxCouponOrderService { */ JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUserBasicInfo cUser, Integer price); - WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price, EnumPayWay payWay,String ipstr,String authCode); + WxPayOrder microPayPreVerify(WxComposeOrder composeOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price, EnumPayWay payWay,String ipstr,String authCode); Integer microPayVerify(WxMerchantBUser bUser, Long couponOrderId,EnumPayWay payWay); @@ -220,4 +221,6 @@ public interface WxCouponOrderService { void statisticsWriteOff(WxCouponOrder wxCouponOrder, Map resultMap); Integer findCount(WxCouponOrder wxCouponOrder); + + PageInfo goodsListAsPage(WxCouponOrderBVo couponOrderBvo, Integer pageNum, Integer pageSize); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index 4c770ebd4..8457fb8de 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -8,20 +8,18 @@ import javax.servlet.http.HttpServletResponse; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.domain.vo.WxOrderCouponPressVo; import com.iformall.domain.vo.WxOrderCouponVo; import com.iformall.domain.vo.WxOrderQueryVo; +import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumOrderStatus; import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; public interface WxOrderService { @@ -88,12 +86,19 @@ public interface WxOrderService { */ WxCouponOrder sendFreeCouponToUser(Long userId,TenantEntity tenantinfo,Long couponId, WxCouponSendVo wxCouponSendVo,EnumPayWay payWay,Long merchantId,Long bUserId); + /** + * 发券包子券 + * @param couponOrder + * @param couponIds + */ + void sendSubCouponToUser(WxCouponOrder couponOrder, List couponIds); + /** * orderSuccess 订单已支付 * @param updateOrder * @return */ - int couponOrderSuccess(WxOrder updateOrder); + WxCouponOrder couponOrderSuccess(WxOrder updateOrder); /** * microPayOrderSuccess 刷卡支付成功 @@ -112,7 +117,7 @@ public interface WxOrderService { /** * 订单关单 */ - ResultData orderClose(WxOrder order,EnumPayWay payWay); + //ResultData orderClose(WxOrder order,EnumPayWay payWay); /** * 根据Id获得实体 @@ -156,6 +161,7 @@ public interface WxOrderService { WxOrderCouponVo detailCUserVo(WxOrder record); + List goodsDetailCUserVo(WxOrder wxOrder); void stockBack(WxOrder updateOrder); @@ -192,7 +198,7 @@ public interface WxOrderService { * @param coupon * @return */ - WxOrder saveOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, OrderSaveDto orderSaveDto, boolean isPress,EnumPayWay payWay); + WxComposeOrder saveOrderForCoupon(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,WxCUserBasicInfo user, List orderSave,EnumPayWay payWay); void sendOrderSuccessActionMsg(WxOrder updateOrder); /** @@ -208,13 +214,15 @@ public interface WxOrderService { * 订单处理 * 1. 检查coupon是否免费 */ - boolean checkCouponIsFree(WxCoupon coupon); + boolean checkCouponIsFree(WxCoupon coupon,Integer shippingType); // 2. 创建免费订单, 领取 couponOrder - WxOrder saveFreeOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId,EnumPayWay payWay); + WxOrder saveFreeOrderForCoupon(boolean allowUnPayOrder,WxComposeOrder composeOrder, WxCUserBasicInfo user, WxCoupon coupon, int couponNumber, + Long couponChannelId, String formId, Long couponPasswordId, EnumPayWay payWay, + Integer shippingType, UserBasicInfoAddress address); // 3. 创建有价订单 - WxOrder saveNoFreeOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, Long couponChannelId, boolean isPress, Long orderGroupId, String formId); + WxOrder saveNoFreeOrderForCoupon(boolean allowUnPayOrder,WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber,OrderComposeSaveDto orderdto); /** * 下订单成功后处理 @@ -237,8 +245,12 @@ public interface WxOrderService { int countGroupOrder(Long groupId,boolean ignoreUnPay,String tenantId); - int countUserCouponGroupOrder(Long cuserId,Long couponId,String tenantId); + int countUserCouponGroupOrder(WxCUserBasicInfo wxCUserBasicInfo,Long couponId,String tenantId); + + //ResultData saveOrder(OrderSaveDto orderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity); + + ResultData composeSaveOrder(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,List composeOrderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity); - ResultData saveOrder(OrderSaveDto orderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity); + PageInfo listGoodsCAsPage(WxOrder wxOrder, Integer pageNum, Integer pageSize); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java index 75c6390ba..e3ea96ed4 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java @@ -7,22 +7,25 @@ import com.iformall.common.IdWorker; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumPayShare; import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; public interface WxPayOrderService { - public void handleSuccessOrder(WxPayOrder oldRecord,WxOrder order,PayQueryAdapterResult queryResult,boolean isScheduleTask); + public void handleSuccessOrder(WxPayOrder oldRecord,WxComposeOrder composeOrder,PayQueryAdapterResult queryResult,boolean isScheduleTask,boolean isOneChildOrder); - public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay); + public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxComposeOrder composeOrder,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay); /** * 创建支付订单 diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java index 5a3cbc45a..106d8c268 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java @@ -368,15 +368,17 @@ public class WxCUserTagsServiceHelper{ int count = 0; if(cardSpendCountList.size() > 0) { for (Map cardSpendCount : cardSpendCountList) { - if (cardSpendCount.get("businessId").equals(b.getId().toString())) { - count += (Integer) cardSpendCount.get("buCount"); + if (cardSpendCount.get("business_id") != null + && cardSpendCount.get("business_id").equals(b.getId().toString())) { + count += (Integer) cardSpendCount.get("bu_count"); } } } if(cardOrderCountList.size() > 0) { for (Map cardOrderCount : cardOrderCountList) { - if (cardOrderCount.get("business").equals(b.getId().toString())) { - count += (Integer) cardOrderCount.get("buCount"); + if (cardOrderCount.get("business") != null + && cardOrderCount.get("business").equals(b.getId().toString())) { + count += (Integer) cardOrderCount.get("bu_count"); } } } diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxPayOrderServiceHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxPayOrderServiceHelper.java index 5f8e7fc91..6faa9555a 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxPayOrderServiceHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxPayOrderServiceHelper.java @@ -11,6 +11,7 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; @@ -33,17 +34,13 @@ public class WxPayOrderServiceHelper { /** * 微信订单是否可以支付 */ - public static Map wxOrderPayStatusMap(WxPayOrder record,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount) { + public static Map wxOrderPayStatusMap(WxPayOrder record,WxAppinfo appInfo,WxPayAccount payAccount) { if (record == null) { throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "wxPayOrder is null."); } if (StringUtils.isBlank(record.getPayOrderNo())) { throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "payOrderNo not found"); } - if (order == null) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "Order not found"); - } - String response = wechatPayOrderQuery(appInfo, record,payAccount); logger.info("pay order query, " + record.toString() + ", response: " + response); @@ -128,8 +125,8 @@ public class WxPayOrderServiceHelper { } } - public static int wxOrderPayStatus(WxPayOrder record,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount) { - Map returnMap = wxOrderPayStatusMap(record,order,appInfo,payAccount); + public static int wxOrderPayStatus(WxPayOrder record,WxAppinfo appInfo,WxPayAccount payAccount) { + Map returnMap = wxOrderPayStatusMap(record,appInfo,payAccount); return getPayStatusFromMap(returnMap,record.getPayOrderNo()); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/UserBasicInfoAddressServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/UserBasicInfoAddressServiceImpl.java new file mode 100644 index 000000000..f37b36ff5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/UserBasicInfoAddressServiceImpl.java @@ -0,0 +1,74 @@ +package com.iformall.service.impl; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.mapper.*; +import com.iformall.service.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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 java.util.Date; + +@Service +public class UserBasicInfoAddressServiceImpl implements UserBasicInfoAddressService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + UserBasicInfoAddressMapper userBasicInfoAddressMapper; + + + @Override + public PageInfo listAsPage(UserBasicInfoAddress record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> userBasicInfoAddressMapper.findList(record)); + } + + @Override + public void saveOrUpdate(UserBasicInfoAddress record) { + Date now = new Date(); + if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateDate(now); + record.setUpdateDate(now); + userBasicInfoAddressMapper.insert(record); + } else { + record.setUpdateDate(now); + userBasicInfoAddressMapper.updateById(record); + } + if(record.getIsDefault() != null && record.getIsDefault().equals(EnumYesOrNo.YES.getCode())){ + userBasicInfoAddressMapper.updateUnDefault(record); + } + } + + @Override + public Integer deleteById(UserBasicInfoAddress record) { + return userBasicInfoAddressMapper.deleteById(record); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void updateDefault(UserBasicInfoAddress record) { + userBasicInfoAddressMapper.updateDefault(record); + userBasicInfoAddressMapper.updateUnDefault(record); + } + + @Override + public UserBasicInfoAddress findById(UserBasicInfoAddress userBasicInfoAddress) { + return userBasicInfoAddressMapper.selectOne(new QueryWrapper<>(userBasicInfoAddress)); + } + + +} + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java index e0e33a11c..161235503 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java @@ -293,7 +293,8 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { return vo; } - if(!isCouponMerchantValid(wxCoupon.getId(),wxCoupon.getTenantId())) { + if(!EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType()) + && !isCouponMerchantValid(wxCoupon.getId(),wxCoupon.getTenantId())) { logger.debug(wxCoupon.getId()+couponid+ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage()); vo.toCouponChannnelVo(wxCoupon,channelId); vo.setErrorMsg(ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 7549e9b46..30cd52805 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -2,6 +2,7 @@ package com.iformall.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.shade.com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; @@ -25,6 +26,12 @@ import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; import com.iformall.pay.WxPayConstant; import com.iformall.service.*; +import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeChildOrderShare; +import com.iformall.service.order.entity.WxComposeOrder; +import com.iformall.service.order.util.OrderHelper; import com.iformall.service.pay.PayServiceFactory; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; @@ -50,6 +57,7 @@ import java.util.*; @Service public class WxCouponOrderServiceImpl implements WxCouponOrderService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired @@ -152,6 +160,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Autowired RedisLock redisLock; + + @Autowired + OrderFactory orderFactory; private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -332,6 +343,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override public void exportData(WxCouponOrderBVo wxCouponOrder, HttpServletRequest request, HttpServletResponse response) { String filename = "券订单"; + if(EnumCouponType.COUPON_DISTRIBUTION.getCode().equals(wxCouponOrder.getCouponType())){ + filename = "商品订单"; + } WxMerchant merchantQ = new WxMerchant(); merchantQ.updateTenantInfo(wxCouponOrder); List merchantList = wxMerchantMapper.findIdNameList(merchantQ); @@ -379,7 +393,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser) { + public WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser, EnumCouponVerifyType couponVerifyType) { + if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType) && bUser == null){ + logger.error("B端核销未传入门店"); + throw new MallinkException(ErrorCode.VERIFY_ERROR); + } // 1. 获取券信息 WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId()); @@ -387,17 +405,6 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } - - // 2. 检查适用门店 - WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); - wxCouponMerchant.setProductId(wxCoupon.getId()); - wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); - if (!couponMerchantList.stream().anyMatch(cm -> cm.getMerchantId().equals(bUser.getMerchantId()))) { - logger.error("券: coupon-" + wxCoupon.getId() + "核销: couponMerchantId-" + bUser.getMerchantId()); - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); - } - // 3. 券包状态检查 if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { logger.error("已过期: couponOrder-" + couponOrder.getId()); @@ -415,43 +422,96 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("券已被预核销: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); } - - //如果开启了分账,就必须要配置分账账号 - WxAppinfo appInfo = getAppinfo(couponOrder,couponOrder.getPayVendor()); - WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); - psReceiverQ.updateTenantInfo(payAccount); - psReceiverQ.setMerchantId(bUser.getMerchantId()); - psReceiverQ.setSharingType(payServiceFactory.getPayShareAdapterService(couponOrder.getPayVendor()).getProfitSharingType()); - psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); - if (null == payAccount.getShare()) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该租户payAccount未设置分账."); - } - if (EnumPayShare.YES.getCode().intValue() == payAccount.getShare().intValue()) { - if (null == psReceiverList || psReceiverList.size() == 0) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); - }else { - for (WxProfitSharingReceiver receiver:psReceiverList) { - if (EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().intValue() - == receiver.getReceiverType().intValue()) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); - } - } - } + + // 2. 检查适用门店 + Long merchantId = null; + if(EnumCouponType.COUPON_DISTRIBUTION.getCode().equals(wxCoupon.getType())){ + //可配送商品 + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.updateTenantInfo(wxCoupon); + wxCouponMerchant.setProductId(wxCoupon.getId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + WxCouponMerchant cm = null; + try{ + cm = wxCouponMerchantMapper.selectOne(new QueryWrapper<>(wxCouponMerchant)); + }catch (Exception e){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + if(cm == null){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType) && !cm.getMerchantId().equals(bUser.getMerchantId())){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + merchantId = cm.getMerchantId(); + }else if(EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType())){ + if (StringUtils.isBlank(wxCoupon.getGiftList())){ + logger.error("券包: coupon-" + wxCoupon.getId() + "数据异常" + "couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_DATE_ERROR); + } +// if(!EnumCouponVerifyType.VERIFY_AUTO.equals(couponVerifyType)){ +// throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); +// } + }else{ + if(!EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType)){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); + } + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.setProductId(wxCoupon.getId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); + if (!couponMerchantList.stream().anyMatch(cm -> cm.getMerchantId().equals(bUser.getMerchantId()))) { + logger.error("券: coupon-" + wxCoupon.getId() + "核销: couponMerchantId-" + bUser.getMerchantId()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + merchantId = bUser.getMerchantId(); + } + + if(merchantId != null){ + //如果开启了分账,就必须要配置分账账号 + WxAppinfo appInfo = getAppinfo(couponOrder,couponOrder.getPayVendor()); + WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); + WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); + psReceiverQ.updateTenantInfo(payAccount); + psReceiverQ.setMerchantId(merchantId); + psReceiverQ.setSharingType(payServiceFactory.getPayShareAdapterService(couponOrder.getPayVendor()).getProfitSharingType()); + psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); + if (null == payAccount.getShare()) { + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该租户payAccount未设置分账."); + } + if (EnumPayShare.YES.getCode().intValue() == payAccount.getShare().intValue()) { + if (null == psReceiverList || psReceiverList.size() == 0) { + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); + }else { + for (WxProfitSharingReceiver receiver:psReceiverList) { + if (EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().intValue() + == receiver.getReceiverType().intValue()) { + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); + } + } + } + } } + int num = 0; try { couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 - couponOrder.setBUserId(bUser.getId()); - couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_B.getCode()); - if(StringUtils.isNotBlank(couponOrder.getVerifyRemark())){ + couponOrder.setBUserId(bUser==null?0l:bUser.getId()); + couponOrder.setVerifyType(couponVerifyType.getCode()); + if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType) + && StringUtils.isNotBlank(couponOrder.getVerifyRemark())){ if(couponOrder.getVerifyRemark().equals(EnumCouponVerifyType.VERIFY_B_11.getCode().toString())){ couponOrder.setVerifyRemark(EnumCouponVerifyType.VERIFY_B_11.getMessage()); }else if(couponOrder.getVerifyRemark().equals(EnumCouponVerifyType.VERIFY_B_12.getCode().toString())){ couponOrder.setVerifyRemark(EnumCouponVerifyType.VERIFY_B_12.getMessage()); } } + if(EnumOrderShopingType.SELF_MENTION.getCode().equals(couponOrder.getShippingType())){ + couponOrder.setShippingStatus(EnumOrderShopingStatus.ALREADY_SELF_MENTION.getCode()); + }else if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(couponOrder.getShippingType())){ + couponOrder.setShippingStatus(EnumOrderShopingStatus.ALREADY_DISTRIBUTION.getCode()); + } couponOrder.setUpdateDate(new Date()); num = wxCouponOrderMapper.updateVerifyCouponOrder(couponOrder); } catch (Exception e) { @@ -462,15 +522,38 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("核销异常:updatete num " + num); throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); } - doAfterVerify(couponOrder, bUser, wxCoupon); + if(EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType())){ + try { + List longs = JSON.parseArray(wxCoupon.getGiftList(), Long.class); + //发券包子券 + wxOrderService.sendSubCouponToUser(couponOrder,longs); + } catch (MallinkException e) { + throw e; + } catch (Exception e){ + throw new MallinkException(ErrorCode.COUPON_ORDER_SEND_ERROR.getCode(), couponOrder.getCouponName() + ErrorCode.COUPON_ORDER_SEND_ERROR.getMessage() ); + } + } + + if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType)){ + doAfterVerify(couponOrder, bUser, wxCoupon); + }else{ + doAfterVerify(couponOrder, wxCoupon, merchantId); + } + couponOrder.setMerchantId(merchantId); return couponOrder; } + /** + * B端核销卷增加成长值,积分 + * @param couponOrder + * @param bUser + * @param wxCoupon + */ private void doAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser, WxCoupon wxCoupon) { // 成长值 try { WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId(),couponOrder.getTenantId()); - wxScoreRulesService.addScore2(bUser,EnumScoreType.CONSUMPTION, order, wxCoupon.getBusiness()); + wxScoreRulesService.addScore2(couponOrder,EnumScoreType.CONSUMPTION, order, wxCoupon.getBusiness()); } catch (Exception e) { logger.error("成长值:" + e.getMessage()); } @@ -501,6 +584,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } + /** + * 核销停车劵增加成长值,积分 + * @param couponOrder + * @param wxCoupon + * @param cuUser + */ private void doAfterVerify(WxCouponOrder couponOrder, WxCoupon wxCoupon, WxCUserBasicInfo cuUser) { // 成长值 try { @@ -532,18 +621,56 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } + /** + * 自主核销商品加成长值 积分 + * @param couponOrder + * @param wxCoupon + */ + private void doAfterVerify(WxCouponOrder couponOrder, WxCoupon wxCoupon,Long merchantId) { + // 成长值 + try { + WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId(),couponOrder.getTenantId()); + wxScoreRulesService.addScore2(couponOrder,EnumScoreType.CONSUMPTION, order, wxCoupon.getBusiness()); + } catch (Exception e) { + logger.error("成长值:" + e.getMessage()); + } + + // 积分 + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); + creditHistory.setOperatorId(couponOrder.getCUserId()); + creditHistory.setCUserId(couponOrder.getCUserId()); + creditHistory.setCreateDate(new Date()); +// creditHistory.updateTenantInfo(couponOrder); + creditHistory.setTenantId(couponOrder.getFinalTenantId()); + creditHistory.setFinalTenantId(couponOrder.getFinalTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setCouponId(wxCoupon.getId()); + creditHistory.setBusinessId(wxCoupon.getBusiness()); + creditHistory.setSpend(couponOrder.getCouponPrice()); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(merchantId); + creditHistory.setChangePurpose("增加积分:券名称["+wxCoupon.getTitle()+"("+creditHistory.getSpendStr()+"元)] "); + wxCreditHistoryService.saveOrUpdate(creditHistory,couponOrder.getTenantId()); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } + } + @Override - public void sendInsideCouponVerifyMsg(TenantEntity tenantEntity, Long couponOrderId, Long buUserId) { + public void sendInsideCouponVerifyMsg(TenantEntity tenantEntity, Long couponOrderId, Long merchantId) { FmInsideCouponVerifyMsg verifyMsg = new FmInsideCouponVerifyMsg(); verifyMsg.setMsgType(EnumMsgRecordType.INSIDE_COUPON_VERIFY.getCode()); verifyMsg.updateTenantInfo(tenantEntity); verifyMsg.setCouponOrderId(couponOrderId); - verifyMsg.setBUserId(buUserId); + verifyMsg.setMerchantId(merchantId); mqBaseProducer.sendMessage(verifyMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } @Override - public void actionAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser) { + public void actionAfterVerify(WxCouponOrder couponOrder, WxMerchant merchant) { WxPayAccount wxPayAccountQuery = new WxPayAccount(); wxPayAccountQuery.updateTenantInfo(couponOrder); @@ -552,23 +679,33 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { try { // 核销记账,并且往账户里面记帐 if (couponOrder.getCouponPrice() > 0) { - recordAfterVerified(couponOrder, bUser.getMerchantId()); + recordAfterVerified(couponOrder, merchant.getId()); } } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } } else { - try { - // 核销分账 - shareAfterVerify(couponOrder, bUser.getMerchantId(),couponOrder.getPayVendor()); - } catch (Exception e) { - logger.error("核销记账失败"+e.getMessage(),e); - } + //如果是组合的,则为多次 + if (EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())) { + try { + // 核销分账 + shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),false); + } catch (Exception e) { + logger.error("核销记账失败"+e.getMessage(),e); + } + }else { + try { + // 核销分账 + shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),true); + } catch (Exception e) { + logger.error("核销记账失败"+e.getMessage(),e); + } + } } try { // 核销补贴 - subsidyAfterVerify(couponOrder, bUser.getMerchantId()); + subsidyAfterVerify(couponOrder, merchant.getId()); } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } @@ -577,14 +714,14 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { // 核销发券 try { - bSentCoupon = sendCouponAfterVerify(couponOrder, bUser); + bSentCoupon = sendCouponAfterVerify(couponOrder); } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } // 核销发模板消息 try { - sendVerifyMsg(couponOrder, bUser, bSentCoupon); + sendVerifyMsg(couponOrder, merchant, bSentCoupon); } catch (Exception e) { logger.error("核销发送消息发生错误:" + e.getMessage(),e); } @@ -602,6 +739,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { && couponOrder.getCouponPrice().equals(wxCoupon.getSalePrice())) { //拼团 merchantSubsidy.setSource(EnumMerchantSubsidySource.GROUP.getCode()); + } else if(couponOrder.getCouponType().equals(EnumCouponType.COUPON_DISTRIBUTION.getCode())){ + //可配送商品 + merchantSubsidy.setSource(EnumMerchantSubsidySource.DISTRIBUTION_GOODS.getCode()); + } else if(couponOrder.getCouponType().equals(EnumCouponType.COUPON_GIFT.getCode())){ + //券礼包 + merchantSubsidy.setSource(EnumMerchantSubsidySource.GIFT_BAG.getCode()); } else { //券 merchantSubsidy.setSource(EnumMerchantSubsidySource.COUPON.getCode()); @@ -635,27 +778,37 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void shareAfterVerify(WxCouponOrder couponOrder, Long merchantId,Integer payWay) { + public void shareAfterVerify(WxCouponOrder couponOrder, Long merchantId,Integer payWay,boolean mulityShare) { // 微信分账 try { WxPayOrder wxPayOrder = new WxPayOrder(); + Long orderId = couponOrder.getOrderId(); + + if (!EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())) { + orderId = couponOrder.getComposeOrderId(); + } + wxPayOrder.updateTenantInfo(couponOrder); - wxPayOrder.setOrderId(couponOrder.getOrderId()); + wxPayOrder.setOrderId(orderId); wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder)); if (wxPayOrder != null && wxPayOrder.getShare().equals(EnumPayShare.YES.getCode())) { WxSharingOrderDto wxSharingOrderDto = new WxSharingOrderDto(); wxSharingOrderDto.setCUserId(wxPayOrder.getCUserId()); wxSharingOrderDto.setMerchantId(merchantId); - wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); + if (mulityShare) { + wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()); + }else { + wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); + } wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount()); - wxSharingOrderDto.setRateAmount(wxPayOrder.getRateAmount()); + wxSharingOrderDto.setRateAmount(wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getRateAmount()); wxSharingOrderDto.setOrderId(wxPayOrder.getId()); wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart()); wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getShareAmount()); wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay); } } catch (Exception e) { @@ -710,7 +863,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder,EnumPayWay.getEnum(couponOrder.getPayVendor())); WxPayAccount payAccount = wxPayAccountMapper.selectById(wxAppinfo.getPayId()); - Integer subsidyNum = coupon.getSubsidyNum(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(couponOrder.getComposeOrderType()); + Integer subsidyNum = orderAdapterService.calcuteChildOrderSubsidy(coupon); if (subsidyNum == null || subsidyNum.intValue() == 0) { String parameter = couponMerchant.getParameter(); try { @@ -733,11 +887,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { // 补贴已入库 return; } + subsidyNum = subsidyNum * couponOrder.getCouponNumber(); // 新补贴入库 - int iSubChargeFee = PayUtils.getPayRate(subsidyNum, payAccount.getRate(), false); + int iSubChargeFee = OrderHelper.getMallCharge(subsidyNum, payAccount); Integer realSubsidyFee = subsidyNum - iSubChargeFee; - int iPriceChargeFee = PayUtils.getPayRate(coupon.getSalePrice(), payAccount.getRate(), false); + WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId(), couponOrder.getTenantId()); + int iPriceChargeFee = OrderHelper.getMallCharge(coupon.getSalePrice(), payAccount); Integer realPayment = coupon.getSalePrice() - iPriceChargeFee; WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); @@ -768,7 +924,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } @Override - public boolean sendCouponAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser) { + public boolean sendCouponAfterVerify(WxCouponOrder couponOrder) { // 核销发券 WxOrder wxOrder = wxOrderMapper.selectById(couponOrder.getOrderId(),couponOrder.getTenantId()); if (wxOrder != null) { @@ -801,7 +957,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { * @param couponOrder, bUser */ @Override - public void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser, boolean hadSentCoupon) { + public void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchant merchant, boolean hadSentCoupon) { // 1. get order info WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId(),couponOrder.getTenantId()); if (order == null) { @@ -814,18 +970,18 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("找不到券信息"); throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); } - // 3. merchant info - WxMerchant merchant = wxMerchantMapper.selectById(bUser.getMerchantId()); - if (merchant == null) { - logger.error("找不到商户信息"); - throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); - } +// // 3. merchant info +// WxMerchant merchant = wxMerchantMapper.selectById(merchant.getId()); +// if (merchant == null) { +// logger.error("找不到商户信息"); +// throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); +// } // 4. get user info WxCUser user = null; WxCUser wcuQ = new WxCUser(); - wcuQ.updateTenantInfo(bUser); + wcuQ.updateTenantInfo(couponOrder); wcuQ.setUserId(couponOrder.getCUserId()); List list = wxCUserMapper.findList(wcuQ); if(list != null && list.size() > 0){ @@ -885,7 +1041,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxPayOrder payOrder = null; WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(couponOrder); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); List payList = wxPayOrderMapper.selectList(new QueryWrapper(payOrderQ)); if (payList.size() > 0) { @@ -1336,7 +1492,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice, EnumPayWay payWay,String ipstr,String authCode) { + public WxPayOrder microPayPreVerify(WxComposeOrder composeOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice, EnumPayWay payWay,String ipstr,String authCode) { // 1. 获取券信息 WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId()); if (wxCoupon == null) { @@ -1376,7 +1532,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if (couponOrder.getCouponType().equals(EnumCouponType.COUPON_MANJIAN.getCode())) { if (payPrice < wxCoupon.getUsePrice()) { logger.error("券达不到满减条件: couponOrder-" + couponOrder.getId()); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); + throw new MallinkException(ErrorCode.COUPON_MANJIAN_USE_PRICE_NO_ALLOW_); } } @@ -1385,7 +1541,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); posCouponOrderVerify.updateTenantInfo(couponOrder); posCouponOrderVerify.setCouponOrderId(couponOrder.getId()); - posCouponOrderVerify.setPosOrderId(microOrder.getId()); + posCouponOrderVerify.setPosOrderId(composeOrder.getSingleOrder().getId()); posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode()); posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); try { @@ -1420,7 +1576,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); posCouponOrderVerify.updateTenantInfo(couponOrder); posCouponOrderVerify.setCouponOrderId(couponOrder.getId()); - posCouponOrderVerify.setPosOrderId(microOrder.getId()); + posCouponOrderVerify.setPosOrderId(composeOrder.getSingleOrder().getId()); posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode()); posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); try { @@ -1460,9 +1616,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxPayOrder payOrder = new WxPayOrder(); Date curDate = new Date(); payOrder.setId(payOrderId); - payOrder.updateTenantInfo(microOrder); - payOrder.setCUserId(microOrder.getCUserId()); - payOrder.setOrderId(microOrder.getId()); + payOrder.updateTenantInfo(composeOrder.getSingleOrder()); + payOrder.setCUserId(composeOrder.getSingleOrder().getCUserId()); + payOrder.setOrderId(composeOrder.getSingleOrder().getId()); payOrder.setCreateTime(curDate); payOrder.setUpdateTime(curDate); payOrder.setPayTimeStart(curDate); @@ -1470,7 +1626,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { payOrder.setPayOrderNo(String.valueOf(payOrderId)); payOrder.setIp(ipstr); payOrder.setAuthCode(authCode); - Integer payAmount = microOrder.getPayment() - wxCoupon.getPrice(); + Integer payAmount = composeOrder.getSingleOrder().getPayment() - wxCoupon.getPrice(); payOrder.setPayAmount(payAmount); // if (microOrder.getPayment() > wxCoupon.getPrice()) { // payOrder.setPayAmount(wxCoupon.getPrice()); @@ -1482,7 +1638,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { payOrder.setShare(shareCode); if (shareCode.intValue() == EnumPayShare.YES.getCode().intValue()) { // 分账金额 - int iChargeFee = PayUtils.getPayRate(payAmount, payAccount.getRate(), false); + int iChargeFee = OrderHelper.getMallCharge(payAmount, payAccount); Integer share_amount = payAmount - iChargeFee; payOrder.setShareAmount(share_amount); if(payAccount.getRealRate() != null) { @@ -1492,6 +1648,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if (share_amount <= 0) { payOrder.setShare(EnumPayShare.NO.getCode()); } + } payOrder.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); payOrder.setPosPayOrderId(couponOrder.getId()); @@ -1574,4 +1731,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { return wxCouponOrderMapper.findCount(wxCouponOrder); } + @Override + public PageInfo goodsListAsPage(WxCouponOrderBVo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findGoodsList(record)); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index ba0023274..5efba2ea6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -227,6 +227,9 @@ public class WxCouponServiceImpl implements WxCouponService { @Override public WxCouponCVo getVoById(Long id,String tenantId) { WxCouponCVo wxCouponCVo = wxCouponMapper.findVoDetail(id,tenantId); + if(wxCouponCVo == null){ + return null; + } List merchantList = wxCouponCVo.getMerchantVoList(); if (merchantList != null) { merchantList = merchantList.stream().filter( @@ -234,6 +237,16 @@ public class WxCouponServiceImpl implements WxCouponService { .collect(Collectors.toList()); } wxCouponCVo.setMerchantVoList(merchantList); + if(EnumCouponType.COUPON_GIFT.getCode().equals(wxCouponCVo.getType())){ + WxCoupon coupon = new WxCoupon(); + coupon.updateTenantInfo(wxCouponCVo); + List longs = JSON.parseArray(wxCouponCVo.getGiftList(), Long.class); + if(longs != null && longs.size() > 0){ + coupon.setIds(longs); + wxCouponCVo.setGiftCouponList(wxCouponMapper.findList(coupon)); + } + } + return wxCouponCVo; } @@ -286,6 +299,9 @@ public class WxCouponServiceImpl implements WxCouponService { if (StringUtils.isNotEmpty(record.getSalePriceStr())) { record.setSalePrice(new BigDecimal(record.getSalePriceStr()).multiply(new BigDecimal(100)).intValue()); } + if (StringUtils.isNotEmpty(record.getFreightPriceStr())) { + record.setFreightPrice(new BigDecimal(record.getFreightPriceStr()).multiply(new BigDecimal(100)).intValue()); + } if (StringUtils.isNotEmpty(record.getUsePriceStr())) { record.setUsePrice(new BigDecimal(record.getUsePriceStr()).multiply(new BigDecimal(100)).intValue()); } @@ -322,6 +338,31 @@ public class WxCouponServiceImpl implements WxCouponService { } } + if(EnumCouponType.COUPON_GIFT.getCode().equals(record.getType())){ + //券礼包时间判断 + WxCoupon couponQ = new WxCoupon(); + couponQ.updateTenantInfo(record); + List longs = JSON.parseArray(record.getGiftList(), Long.class); + if(longs != null && longs.size() > 0){ + couponQ.setIds(longs); + List list = wxCouponMapper.findList(couponQ); + if(list != null && list.size() > 0){ + for (WxCoupon wc:list) { + if(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode().equals(wc.getStatus())){ + return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF_GIFT); + } + if(wc.getValidEndDate().before(record.getValidEndDate())){ + return new ResultData(ErrorCode.COUPON_VALID_DATE_ERR_GIFT); + } + } + }else{ + return new ResultData(ErrorCode.COUPON_IS_EMPTY_GIFT); + } + }else{ + return new ResultData(ErrorCode.COUPON_IS_EMPTY_GIFT); + } + } + if (EnumCouponContentType.HTML.getCode().equals(record.getContentType())) { if (StringUtils.isEmpty(record.getHtml())) { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请填写富文本内容"); @@ -330,7 +371,8 @@ public class WxCouponServiceImpl implements WxCouponService { List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); //有价券判断商户是否配置了分账账号 - if (record.getSalePrice() != null && record.getSalePrice() > 0) { + if (!EnumCouponType.COUPON_GIFT.getCode().equals(record.getType()) + && record.getSalePrice() != null && record.getSalePrice() > 0) { boolean share = false; WxPayAccount payQ = new WxPayAccount(); payQ.updateTenantInfo(record); @@ -417,7 +459,10 @@ public class WxCouponServiceImpl implements WxCouponService { } } else{ - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + if (!EnumCouponType.COUPON_GIFT.getCode().equals(record.getType())){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + record.setBusiness(EnumBusiness.BUSINESS_ID6.getCode()); } if (record.getPasswordSupport() != null && record.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) { @@ -430,6 +475,22 @@ public class WxCouponServiceImpl implements WxCouponService { wxCouponMapper.insert(record); } else { + if(EnumCouponSendType.GIFT.getCode().equals(record.getSendType())){ + //券礼包子券类型判断时间 + WxCoupon couponQ = new WxCoupon(); + couponQ.updateTenantInfo(record); + couponQ.setStatus(EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode()); + couponQ.setGiftList(Long.toString(record.getId())); + List couponList = wxCouponMapper.findCouponList(couponQ); + if(couponList != null && couponList.size() > 0){ + for (WxCoupon wc:couponList) { + if(EnumCouponType.COUPON_GIFT.getCode().equals(wc.getType()) + && record.getValidEndDate().before(wc.getValidEndDate())){ + return new ResultData(ErrorCode.COUPON_VALID_DATE_ERR_GIFT); + } + } + } + } if(record.getInventory() != null && record.getRemainInventory() != null) { // 库存修改检查 WxCoupon oldCoupon = wxCouponMapper.selectById(record.getId(),record.getTenantId()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCuserFloatingLayerServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCuserFloatingLayerServiceImpl.java index 161a4129e..7fb655ae8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCuserFloatingLayerServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCuserFloatingLayerServiceImpl.java @@ -46,16 +46,16 @@ public class WxCuserFloatingLayerServiceImpl implements WxCuserFloatingLayerServ public WxFloatingLayer getFloatingLayer(String openId, String appId) { WxAppinfo appinfo = appinfoMapper.findByAppId(appId); if (StringUtils.isBlank(openId)) { - return getWxFloatingLayer(appinfo.getTenantInfo()); + return getWxFloatingLayer(appinfo.getTenantId()); } //1 查看是否存在用户,用户不存在 直接返回浮层信息 WxCUser user = new WxCUser(); user.setOpenId(openId); user.setAppId(appId); - user.updateTenantInfo(appinfo); + user.setTenantId(appinfo.getTenantId()); WxCUser byOpenId = wxCUserMapper.findByOpenId(user); if (byOpenId == null) { - return getWxFloatingLayer(appinfo.getTenantInfo()); + return getWxFloatingLayer(appinfo.getTenantId()); } //2 用户存在 查看是否已有弹出记录 没有 保存记录后返回浮层信息 WxCuserFloatingLayer wxCuserFloatingLayerQuery = new WxCuserFloatingLayer(); @@ -68,7 +68,7 @@ public class WxCuserFloatingLayerServiceImpl implements WxCuserFloatingLayerServ logger.error("用户 {} 已弹过浮层",byOpenId.getId()); return null; } - return getWxFloatingLayer(byOpenId); + return getWxFloatingLayer(byOpenId.getTenantId()); //merge from develop: 分支逻辑 // WxFloatingLayer wxFloatingLayer = getWxFloatingLayer(byOpenId); // if (wxFloatingLayer != null) { @@ -84,15 +84,15 @@ public class WxCuserFloatingLayerServiceImpl implements WxCuserFloatingLayerServ wxCuserFloatingLayer = new WxCuserFloatingLayer(); final IdWorker idWorker = IdWorker.get(); wxCuserFloatingLayer.setId(idWorker.nextId()); + wxCuserFloatingLayer.setTenantId(wxCUser.getTenantId()); wxCuserFloatingLayer.setUserId(wxCUser.getId()); - wxCuserFloatingLayer.updateTenantInfo(wxCUser); wxCuserFloatingLayer.setCreateTime(new Date()); wxCuserFloatingLayerMapper.insert(wxCuserFloatingLayer); } - public WxFloatingLayer getWxFloatingLayer(TenantEntity tenantEntity) { + public WxFloatingLayer getWxFloatingLayer(String tenantId) { WxFloatingLayer wxFloatingLayer = new WxFloatingLayer(); - wxFloatingLayer.updateTenantInfo(tenantEntity); + wxFloatingLayer.setTenantId(tenantId); wxFloatingLayer.setStatus(EnumFloatingLayerStatus.STATUS_THROW_IN.getCode()); return wxFloatingLayerMapper.selectOne(new QueryWrapper<>(wxFloatingLayer)); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java index a723be87c..717a6b250 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java @@ -10,6 +10,7 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; @@ -22,6 +23,7 @@ import com.iformall.mapper.WxCouponOrderMapper; import com.iformall.mapper.WxGameActionLogMapper; import com.iformall.mapper.WxGameMapper; import com.iformall.service.*; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.utils.Constant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,7 +74,7 @@ public class WxGameServiceImpl implements WxGameService { @Autowired private WxOrderService wxOrderService; - + @Autowired @Qualifier("couponDetailRedisTemplate") RedisTemplate cdRedisTemplate; @@ -444,6 +446,7 @@ public class WxGameServiceImpl implements WxGameService { Object data = resultData.data; Long orderId = 0L; Integer addCredit = 0; + if(data != null){ logger.info("userId:"+userId+",中奖了,"+data.toString()); if(data instanceof WxCouponChannelVo){ @@ -451,13 +454,19 @@ public class WxGameServiceImpl implements WxGameService { OrderSaveDto orderSaveDto = new OrderSaveDto(); orderSaveDto.setCouponChannelId(vo.getId()); orderSaveDto.setCouponId(vo.getCouponId()); - ResultData resultData1 = wxOrderService.saveOrder(orderSaveDto, userId, EnumPayWay.PAY_WAY_WECHAT, wxGame); - - if(resultData1.code == Result.SUCCESS && resultData1.data != null && resultData1.data instanceof WxOrder){ - WxOrder order = (WxOrder)resultData1.data; - orderId = order.getId(); + + List orderSave = new ArrayList(); + OrderComposeSaveDto ocsd = new OrderComposeSaveDto(); + ocsd.setSignleOrder(orderSaveDto); + ocsd.setCount(1); + orderSave.add(ocsd); + ResultData resultData1 = wxOrderService.composeSaveOrder(false,EnumComposeOrder.SINGLE,orderSave, userId, EnumPayWay.PAY_WAY_WECHAT, wxGame); + + if(resultData1.code == Result.SUCCESS && resultData1.data != null && resultData1.data instanceof WxComposeOrder){ + WxComposeOrder order = (WxComposeOrder)resultData1.data; + orderId = order.getMainOrderId(); }else{ - logger.info("userId:"+userId+",中奖了发卷失败,"+resultData1.toString()); + logger.info("userId:"+userId+",中奖了发卷失败,"+resultData1.code+"{}"+resultData1.message); resultData.data = null; } }else if(data instanceof JSONObject){ 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 eb4a66030..678e00654 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -16,12 +16,21 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.iformall.domain.po.*; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.service.*; +import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeChildOrderShare; +import com.iformall.service.order.entity.WxComposeOrder; +import com.iformall.service.order.util.OrderHelper; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.aop.framework.AopContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; @@ -39,29 +48,14 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.ResultData; +import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.dto.WxSharingOrderDto; -import com.iformall.domain.po.WxAppinfo; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCardInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponChannel; -import com.iformall.domain.po.WxCouponMerchant; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxCouponPassword; -import com.iformall.domain.po.WxCouponSend; -import com.iformall.domain.po.WxCreditHistory; -import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxOrderGroup; -import com.iformall.domain.po.WxOrderPress; -import com.iformall.domain.po.WxPayAccount; -import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxAppinfoMapper; +import com.iformall.mapper.WxBatchOrderMapper; import com.iformall.mapper.WxCUserBasicInfoMapper; import com.iformall.mapper.WxCUserMapper; import com.iformall.mapper.WxCardInfoMapper; @@ -120,6 +114,9 @@ public class WxOrderServiceImpl implements WxOrderService { @Autowired WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxCouponOrderService wxCouponOrderService; + @Autowired WxCUserService wxCUserService; @@ -191,11 +188,17 @@ public class WxOrderServiceImpl implements WxOrderService { @Autowired WxCouponChannelService wxCouponChannelService; + + @Autowired + WxBatchOrderMapper wxBatchOrderMapper; @Autowired @Qualifier("couponDetailRedisTemplate") RedisTemplate cdRedisTemplate; - + + @Autowired + OrderFactory orderFactory; + @Override public PageInfo listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.findList(record)); @@ -346,21 +349,21 @@ public class WxOrderServiceImpl implements WxOrderService { orderQ.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); return wxOrderMapper.countList(orderQ); } catch (Exception e) { - logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage(),e); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"["+counpon.getTitle()+"]查询拼团中订单错误."+e.getMessage()); } } /** - * 用户购买的订单数量 + * 用户购买的订单产品数量 * * @param user * @param counpon * @return */ - private int getUserOrderCount(WxCUserBasicInfo user, WxCoupon counpon) { + private int getUserOrderProductCount(WxCUserBasicInfo user, WxCoupon counpon) { // + Order 待支付 try { WxOrder orderQ = new WxOrder(); @@ -374,10 +377,10 @@ public class WxOrderServiceImpl implements WxOrderService { statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); orderQ.setStatusS(statusS); - return wxOrderMapper.countList(orderQ); + return wxOrderMapper.countListProduct(orderQ); } catch (Exception e) { - logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage(),e); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"["+counpon.getTitle()+"]查询待支付错误."+e.getMessage()); } } @@ -462,7 +465,7 @@ public class WxOrderServiceImpl implements WxOrderService { * @param counpon * @return */ - private int getUserCouponOrderCount(WxCUserBasicInfo user, WxCoupon counpon) { + private int getUserCouponOrderCount(WxCUserBasicInfo user, WxCoupon counpon,int couponNumber) { // + couponOrder ---待使用 try { WxCouponOrder couponOrderQ = new WxCouponOrder(); @@ -475,10 +478,10 @@ public class WxOrderServiceImpl implements WxOrderService { // if (counpon.getSendType().equals(EnumCouponSendType.PASSIVE.getCode())) { // couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); // } - return wxCouponOrderMapper.findCount(couponOrderQ); + return wxCouponOrderMapper.findProductCount(couponOrderQ)+couponNumber; } catch (Exception e) { - logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage(),e); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"["+counpon.getTitle()+"]查询待使用订单错误."); } } @@ -532,7 +535,7 @@ public class WxOrderServiceImpl implements WxOrderService { // } // 检查用户已购买数量 try { - count = getUserCouponOrderCount(user, coupon); + count = getUserCouponOrderCount(user, coupon,1); } catch (Exception e) { //解锁 redisLock.unlock(couponIdStr, timeStr); @@ -564,7 +567,8 @@ public class WxOrderServiceImpl implements WxOrderService { * @param coupon * @param couponIdStr */ - private void stockReduce(WxCUserBasicInfo user, WxCoupon coupon, String couponIdStr) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void stockReduce(boolean allowUnPayOrder,WxCUserBasicInfo user, WxCoupon coupon, String couponIdStr,int number) { //如果缓存中不存在这个key,则从coupon中取 if(!redisLock.hasCouponStockCache(coupon.getId())) { //此处需要加锁,防止并发设置 @@ -595,56 +599,66 @@ public class WxOrderServiceImpl implements WxOrderService { long redisStock = redisLock.getCouponStock(Long.parseLong(couponIdStr)); if (redisStock<=0) { - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券库存已为零!:"+couponIdStr); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券库存已为零!:"+coupon.getTitle()+"["+couponIdStr+"]"); } // 检查 优惠券 库存 if (coupon.getRemainInventory() <= 0) { - throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY); + throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY.getCode(),coupon.getTitle()+"["+couponIdStr+"]库存不足"); } - int count = 0; + int unPaidcount = 0; // 有价券 if (coupon.getSalePrice() > 0) { // 检查是否未支付订单 try { - count = getUserOrderCount(user, coupon); + unPaidcount = getUserOrderProductCount(user, coupon); } catch (Exception e) { - throw new MallinkException(ErrorCode.DB_FAIL); - } - if (count > 0) { - logger.error("此券有未支付的订单, couponId: " + couponIdStr + ", count: " + count); - throw new MallinkException(ErrorCode.ORDER_UNPAID); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询未支付订单失败."); } + if (!allowUnPayOrder) { + if (unPaidcount > 0) { + logger.error("此券有未支付的订单, couponId: " + couponIdStr + ", count: " + unPaidcount); + throw new MallinkException(ErrorCode.ORDER_UNPAID.getCode(),"["+coupon.getTitle()+"]您有未支付的订单."); + } + } } //检查拼团中的数量 + int grouponCount = 0; try { - count = getUserOrderGroupCount(user, coupon); + grouponCount = getUserOrderGroupCount(user, coupon); } catch (Exception e) { - throw new MallinkException(ErrorCode.DB_FAIL); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询拼团中订单错误."); } - if (count >= coupon.getUseLimitQuantity()) { - logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); - throw new MallinkException(ErrorCode.ORDER_IS_LIMITED); + if (grouponCount >= coupon.getUseLimitQuantity()) { + logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + grouponCount); + throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"["+coupon.getTitle()+"]购买超限."); } // 检查用户已购买数量 + int paidCount = 0; try { - count = getUserCouponOrderCount(user, coupon); + paidCount = getUserCouponOrderCount(user, coupon,number); } catch (Exception e) { - throw new MallinkException(ErrorCode.DB_FAIL); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询待使用订单错误."); + } + if (paidCount > coupon.getUseLimitQuantity()) { + logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + paidCount); + throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"此券购买数量已超限["+coupon.getTitle()+"], couponId: " + couponIdStr + ", count: " + paidCount); } - if (count >= coupon.getUseLimitQuantity()) { - logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); - throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); + + //如果允许未支付的,则未支付的+已支付的不能超过限购 + if ((unPaidcount+paidCount) > coupon.getUseLimitQuantity()) { + logger.error("此券[未支付+已支付]购买数量已超限, couponId: " + couponIdStr + ", count: " + paidCount); + throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"此券[未支付+已支付]购买数量已超限["+coupon.getTitle()+"], couponId: " + couponIdStr + ", count: " + paidCount); } try { - //减库存,从redis中取,然后发mq消息同步到数据库 - wxCouponService.reduceRemainInventory(coupon.getId(),coupon.getTenantId(), 1); + //减库存, + wxCouponService.reduceRemainInventory(coupon.getId(),coupon.getTenantId(), number); - long stock = redisLock.decrease(EnumCacheKey.COUPON_STOCK.getMessage()+coupon.getId(), 1); + long stock = redisLock.decrease(EnumCacheKey.COUPON_STOCK.getMessage()+coupon.getId(), number); if (stock < 0 ) { - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券库存已为零!"); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券["+coupon.getTitle()+"]库存已为零!"); } @@ -656,7 +670,7 @@ public class WxOrderServiceImpl implements WxOrderService { // mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.STOCK.getCode(), "*", "decrease_stock_"+coupon.getId()); } catch (RuntimeException e) { logger.error("此券减库存失败, couponId: " + couponIdStr,e); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),e.getMessage()); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券["+coupon.getTitle()+"]库存更新失败!"+e.getMessage()); } } @@ -777,12 +791,12 @@ public class WxOrderServiceImpl implements WxOrderService { } try { - int num = wxCouponMapper.backInventory(coupon.getId(),coupon.getTenantId(), 1, coupon.getRemainInventory()); + int num = wxCouponMapper.backInventory(coupon.getId(),coupon.getTenantId(), updateOrder.getCouponNumber(), coupon.getRemainInventory()); if (num <= 0) { logger.error("此券加库存失败, couponId: " + couponIdStr); throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券couponId:["+couponIdStr+"]库存回滚失败,更新记录条数小于等于0."); } - redisLock.increase(EnumCacheKey.COUPON_STOCK.getMessage()+coupon.getId(), 1); + redisLock.increase(EnumCacheKey.COUPON_STOCK.getMessage()+coupon.getId(), updateOrder.getCouponNumber()); } catch (Exception e) { logger.error("数据库更新失败,库存+1失败, e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "库存恢复失败"); @@ -854,6 +868,9 @@ public class WxOrderServiceImpl implements WxOrderService { record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); + record.setComposeOrderId(0L); + record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + record.setCouponNumber(1); try { // 保存订单 @@ -911,6 +928,9 @@ public class WxOrderServiceImpl implements WxOrderService { record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); + record.setComposeOrderId(0L); + record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + record.setCouponNumber(1); try { // 保存订单 @@ -948,7 +968,9 @@ public class WxOrderServiceImpl implements WxOrderService { record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); - + record.setComposeOrderId(0L); + record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + record.setCouponNumber(1); try { // 保存订单 wxOrderMapper.insert(record); @@ -966,7 +988,8 @@ public class WxOrderServiceImpl implements WxOrderService { * @param order * @param coupon */ - private WxCouponOrder createCouponOrder(WxOrder order, WxCUserBasicInfo user, WxCoupon coupon, Long couponPasswordId,EnumPayWay payWay,Long merchantId,Long bUserId) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCouponOrder createCouponOrder(WxOrder order, WxCUserBasicInfo user, WxCoupon coupon, Long couponPasswordId,EnumPayWay payWay,Long merchantId,Long bUserId,Long parentCouponOrderId) { Date curr = new Date(); Date valid_date = null; int limit_days = Constant.WX_LIMIT_DAYS; @@ -984,7 +1007,7 @@ public class WxOrderServiceImpl implements WxOrderService { try { WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(order); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); payOrder = wxPayOrderMapper.selectOne(new QueryWrapper(payOrderQ)); } catch (Exception e) { @@ -1045,7 +1068,7 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrder.setCUserId(user.getId()); couponOrder.setOwnerId(user.getId()); couponOrder.setAutoRefund(coupon.getAutoRefund()); - couponOrder.setOrderId(order.getOrderNumber()); + couponOrder.setOrderId(order.getId()); couponOrder.setExpiredTime(valid_date); if (null != merchantId) { couponOrder.setSendMerchantId(merchantId); @@ -1053,6 +1076,20 @@ public class WxOrderServiceImpl implements WxOrderService { if (null != bUserId) { couponOrder.setSendMerchantUserId(bUserId); } + couponOrder.setComposeOrderType(order.getComposeOrderType()); + couponOrder.setComposeOrderId(order.getComposeOrderId()); + couponOrder.setCouponNumber(order.getCouponNumber()); + + couponOrder.setParentCouponOrderId(parentCouponOrderId); + + couponOrder.setFreightPrice(order.getFreightPrice()); + couponOrder.setShippingType(order.getShippingType()); + couponOrder.setShippingAddress(order.getShippingAddress()); + if(couponOrder.getShippingType() != null && EnumOrderShopingType.SELF_MENTION.getCode().equals(couponOrder.getShippingType())){ + couponOrder.setShippingStatus(EnumOrderShopingStatus.READY_SELF_MENTION.getCode()); + }else if(couponOrder.getShippingType() != null && EnumOrderShopingType.DISTRIBUTION.getCode().equals(couponOrder.getShippingType())){ + couponOrder.setShippingStatus(EnumOrderShopingStatus.READY_DISTRIBUTION.getCode()); + } //有支付信息,从支付信息中取渠道 if (null != payOrder) { couponOrder.setPayVendor(payOrder.getPayVendor()); @@ -1093,22 +1130,19 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setTransactionId(payOrder.getTransactionId()); if (payOrder.getShareAmount() != null) { // 开启分账 - fee = payOrder.getPayAmount() - payOrder.getShareAmount(); - cardInfo.setShareFeeAmount(payOrder.getShareAmount()); - cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount()); - cardInfo.setRateAmount(payOrder.getRateAmount()); + WxComposeChildOrderShare share = payOrder.getChildOrderShare(order.getId()); + fee = share.getRealPayMent() - share.getShareAmount(); + cardInfo.setShareFeeAmount(share.getShareAmount()); + cardInfo.setRemainingShareFeeAmount(share.getShareAmount()); + cardInfo.setRateAmount(share.getRateAmount()); } else { // 未开启分账 - fee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRate(), false); - Integer shareAmount = payOrder.getPayAmount() - fee; + Integer orderRealPayMent = payOrder.getChildOrderShare(order.getId()).getRealPayMent(); + fee = OrderHelper.getMallCharge(orderRealPayMent, payAccountQ); + Integer shareAmount = orderRealPayMent - fee; cardInfo.setShareFeeAmount(shareAmount); cardInfo.setRemainingShareFeeAmount(shareAmount); - if (payAccount.getRealRate() != null) { - int iRealChargeFee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRealRate(), true); - if (fee > iRealChargeFee) { - cardInfo.setRateAmount(fee - iRealChargeFee); - } - } + cardInfo.setRateAmount(OrderHelper.getRateAmount(orderRealPayMent, fee, payAccountQ)); } } } else { @@ -1176,7 +1210,7 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrder.setCUserId(user.getId()); couponOrder.setOwnerId(user.getId()); couponOrder.setAutoRefund(coupon.getAutoRefund()); - couponOrder.setOrderId(order.getOrderNumber()); + couponOrder.setOrderId(order.getId()); couponOrder.setExpiredTime(valid_date); if (!isCard) { couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); @@ -1186,7 +1220,17 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrder.setCreateDate(curr); couponOrder.setUpdateDate(curr); couponOrder.setCouponPrice(order.getPayment()); + couponOrder.setComposeOrderType(order.getComposeOrderType()); + couponOrder.setComposeOrderId(order.getComposeOrderId()); + couponOrder.setFreightPrice(order.getFreightPrice()); + couponOrder.setShippingType(order.getShippingType()); + couponOrder.setShippingAddress(order.getShippingAddress()); + if(couponOrder.getShippingType() != null && EnumOrderShopingType.SELF_MENTION.getCode().equals(couponOrder.getShippingType())){ + couponOrder.setShippingStatus(EnumOrderShopingStatus.READY_SELF_MENTION.getCode()); + }else if(couponOrder.getShippingType() != null && EnumOrderShopingType.DISTRIBUTION.getCode().equals(couponOrder.getShippingType())){ + couponOrder.setShippingStatus(EnumOrderShopingStatus.READY_DISTRIBUTION.getCode()); + } wxCouponOrderMapper.insert(couponOrder); /// 储值卡信息添加 @@ -1261,18 +1305,18 @@ public class WxOrderServiceImpl implements WxOrderService { if (Objects.nonNull(wxCouponSendVo) && Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSendVo.getSendType())) { // 商户注券减库存操作 - try { - stockMerchantReduce(user, coupon, couponIdStr, wxCouponSendVo); - }catch(Exception e) { - throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); - } + try { + stockMerchantReduce(user, coupon, couponIdStr, wxCouponSendVo); + }catch(Exception e) { + throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); + } } else { // 减库存操作 - try { - stockReduce(user, coupon, couponIdStr); - }catch(Exception e) { - throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); - } + try { + stockReduce(false,user, coupon, couponIdStr,1); + }catch(Exception e) { + throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); + } } int payment = coupon.getSalePrice(); @@ -1299,7 +1343,9 @@ public class WxOrderServiceImpl implements WxOrderService { record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); - + record.setComposeOrderId(0L); + record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + record.setCouponNumber(1); // 保存订单 try { wxOrderMapper.insert(record); @@ -1311,7 +1357,7 @@ public class WxOrderServiceImpl implements WxOrderService { // 创建couponOrder WxCouponOrder couponOrder = null; try { - couponOrder = createCouponOrder(record, user, coupon, null,payWay,merchantId,bUserId); + couponOrder = createCouponOrder(record, user, coupon, null,payWay,merchantId,bUserId,null); } catch (Exception e) { logger.error("保存订单:" + e.getMessage()); throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR.getCode(), coupon.getTitle() + ErrorCode.COUPON_ORDER_SAVE_ERR.getMessage()); @@ -1320,9 +1366,83 @@ public class WxOrderServiceImpl implements WxOrderService { return couponOrder; } + @Override + @Transactional(propagation = Propagation.NESTED, readOnly = false, rollbackFor = {Exception.class}) + public void sendSubCouponToUser(WxCouponOrder couponOrder, List couponIds) { + // check 用户状态 + WxCUserBasicInfo user = null; + try { + user = wxCUserBasicInfoMapper.selectById(couponOrder.getcUserId(),couponOrder.getFinalTenantId()); + } catch (Exception e) { + logger.error("userId : " + couponOrder.getcUserId() + ", e: " + e.getMessage(),e); + } + if (user == null) { + logger.error("用户不存在, userId: " + couponOrder.getcUserId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + for (Long couponId:couponIds) { + WxCoupon coupon = wxCouponMapper.selectById(couponId,couponOrder.getTenantId()); + if (coupon == null) { + logger.error("券不存在, couponId: " + couponId); + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + if (coupon.getStatus() == EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode()) { + logger.error("券已作废, couponId: " + couponId); + throw new MallinkException(ErrorCode.COUPON_IS_TAKE_OFF.getCode(), coupon.getTitle() + ErrorCode.COUPON_IS_TAKE_OFF.getMessage()); + } + if (coupon.getSendType() != 3 || coupon.getSalePrice() != 0) { + logger.error("券 sendType 错误, couponId: " + couponId); + throw new MallinkException(ErrorCode.COUPON_VALID_NOT_SUPPORTED.getCode(), coupon.getTitle() + ErrorCode.COUPON_IS_NOT_FREE.getMessage()); + } + + Date curr = new Date(); + + final IdWorker idWorker = IdWorker.get(); + Long orderNumber = idWorker.nextId(); + + // body + // tenant_id + merchant_id + title + subtitle + String bodyStr = coupon.getTitle() + "/" + coupon.getSubTitle(); + + WxOrder record = new WxOrder(); + record.setId(orderNumber); + record.updateTenantInfo(coupon); + record.setOrderNumber(orderNumber); + record.setProductId(couponId); + record.setType(EnumOrderType.COUPON.getCode()); + record.setCUserId(user.getId()); + record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); + record.setPayment(coupon.getSalePrice()); + record.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); + record.setDetail(bodyStr); + record.setCreateDate(curr); + record.setUpdateDate(curr); + record.setComposeOrderId(0L); + record.setComposeOrderType(EnumComposeOrder.PACKAGECOUPON.getCode()); + record.setParentOrderId(couponOrder.getOrderId()); + record.setCouponNumber(1); + // 保存订单 + try { + wxOrderMapper.insert(record); + } catch (Exception e) { + logger.error("保存订单:" + e.getMessage()); + throw new MallinkException(ErrorCode.ORDER_SAVE_ERR.getCode(), coupon.getTitle() + ErrorCode.ORDER_SAVE_ERR.getMessage()); + } + + // 创建couponOrder + try { + createCouponOrder(record, user, coupon, null,EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST,null,null,couponOrder.getId()); + } catch (Exception e) { + logger.error("保存订单:" + e.getMessage()); + throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR.getCode(), coupon.getTitle() + ErrorCode.COUPON_ORDER_SAVE_ERR.getMessage()); + } + + } + } + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public int couponOrderSuccess(WxOrder updateOrder) { + public WxCouponOrder couponOrderSuccess(WxOrder updateOrder) { Date currentDate = new Date(); // 检查券相关 WxCoupon coupon = wxCouponMapper.selectById(updateOrder.getProductId(),updateOrder.getTenantId()); @@ -1359,14 +1479,11 @@ public class WxOrderServiceImpl implements WxOrderService { // 创建couponOrder try { - createCouponOrder(updateOrder, user, coupon, null,null,null,null); + return createCouponOrder(updateOrder, user, coupon, null,null,null,null,null); } catch (Exception e) { logger.error("创建券包:" + e.getMessage()); throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); } - - - return ret; } private void sendInsideOrderSuccessMsg(WxOrder updateOrder, WxCoupon coupon, WxCUserBasicInfo user) { @@ -1424,19 +1541,35 @@ public class WxOrderServiceImpl implements WxOrderService { /** * 下订单后操作 * - * @param updateOrder + * @param order * @param coupon * @param user */ - public void actionAfterCouponOrderSuccess(WxOrder updateOrder, WxCoupon coupon, WxCUserBasicInfo user) { + public void actionAfterCouponOrderSuccess(WxOrder order, WxCoupon coupon, WxCUserBasicInfo user) { + if(EnumCouponType.COUPON_GIFT.getCode().equals(coupon.getType())){ + WxCouponOrder couponOrderQ = new WxCouponOrder(); + couponOrderQ.setOrderId(order.getId()); + couponOrderQ.setCouponId(coupon.getId()); + couponOrderQ.updateTenantInfo(order); + List couponorderlist = wxCouponOrderMapper.findList(couponOrderQ); + if (null != couponorderlist && couponorderlist.size() > 0 ) { + WxCouponOrder couponOrder = couponorderlist.get(0); + try { + wxCouponOrderService.verify(couponOrder,null,EnumCouponVerifyType.VERIFY_AUTO); + } catch (Exception e) { + logger.error("系统券包核销异常:" + e.getMessage(),e); + } + } + + } /// TODO 晚上会定时打一下tag - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_BUY, user,updateOrder,null); + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_BUY, user,order,null); // 交易发券 try { - wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.C_ORDER, updateOrder,EnumPayWay.PAY_WAY_NOT_UNPAY_TRADE); + wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.C_ORDER, order,EnumPayWay.PAY_WAY_NOT_UNPAY_TRADE); } catch (Exception e) { - logger.error("订单发券:" + e.getMessage()); + logger.error("订单发券:" + e.getMessage(),e); } } @@ -1484,6 +1617,8 @@ public class WxOrderServiceImpl implements WxOrderService { if (list.size() > 1) { creditHistory.setMerchantId(Long.valueOf(EnumMerchantType.MERCHANT_MORE.getCode())); } + }else { + creditHistory.setMerchantId(Long.valueOf(EnumMerchantType.MERCHANT_NONE.getCode())); } } @@ -1639,29 +1774,29 @@ public class WxOrderServiceImpl implements WxOrderService { /** * 微信关闭订单 */ - @Override - public ResultData orderClose(WxOrder order,EnumPayWay payWay) { - // 1. get c appid - WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order,payWay); - // 2. get pay order - WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.updateTenantInfo(order); - payOrderQ.setOrderId(order.getId()); - payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); - List payOrders = wxPayOrderMapper.selectList(new QueryWrapper(payOrderQ)); - - // 3. wx pay order close - for (WxPayOrder payOrder : payOrders) { - try { - wxPayOrderService.payOrderClose(appInfo, payOrder); - } catch (Exception e) { - logger.error("微信关单失败:" + e.getMessage()); - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); - } - } - - return new ResultData(); - } +// @Override +// public ResultData orderClose(WxOrder order,EnumPayWay payWay) { +// // 1. get c appid +// WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order,payWay); +// // 2. get pay order +// WxPayOrder payOrderQ = new WxPayOrder(); +// payOrderQ.updateTenantInfo(order); +// payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); +// payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); +// List payOrders = wxPayOrderMapper.selectList(new QueryWrapper(payOrderQ)); +// +// // 3. wx pay order close +// for (WxPayOrder payOrder : payOrders) { +// try { +// wxPayOrderService.payOrderClose(appInfo, payOrder); +// } catch (Exception e) { +// logger.error("微信关单失败:" + e.getMessage()); +// throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); +// } +// } +// +// return new ResultData(); +// } @Override public WxOrder getById(Long id,String tenantId) { @@ -1704,11 +1839,40 @@ public class WxOrderServiceImpl implements WxOrderService { public WxOrderCouponVo detailCUserVo(WxOrder record) { List list = wxOrderMapper.selectDetailOfCUser(record); if (list.size() > 0) { - return list.get(0); + WxOrderCouponVo wxOrderCouponVo = list.get(0); + if(EnumCouponType.COUPON_GIFT.getCode().equals(wxOrderCouponVo.getType())){ + WxCoupon coupon = new WxCoupon(); + coupon.updateTenantInfo(wxOrderCouponVo); + List longs = JSON.parseArray(wxOrderCouponVo.getGiftList(), Long.class); + if(longs != null && longs.size() > 0){ + coupon.setIds(longs); + wxOrderCouponVo.setGiftCouponList(wxCouponMapper.findList(coupon)); + } + } + return wxOrderCouponVo; } return null; } + @Override + public List goodsDetailCUserVo(WxOrder record) { + List list = wxOrderMapper.selectDetailOfCUser(record); + if(list != null && list.size() > 0){ + for (WxOrderCouponVo wxOrderCouponVo:list) { + if(EnumCouponType.COUPON_GIFT.getCode().equals(wxOrderCouponVo.getType())){ + WxCoupon coupon = new WxCoupon(); + coupon.updateTenantInfo(wxOrderCouponVo); + List longs = JSON.parseArray(wxOrderCouponVo.getGiftList(), Long.class); + if(longs != null && longs.size() > 0){ + coupon.setIds(longs); + wxOrderCouponVo.setGiftCouponList(wxCouponMapper.findList(coupon)); + } + } + } + } + return list; + } + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void shareForMicroPay(TenantEntity tenantEntity, Long orderId, Long payOrderId,EnumPayWay payWay) { @@ -1730,19 +1894,19 @@ public class WxOrderServiceImpl implements WxOrderService { sharingOrder.setMerchantId(wxMerchantBUser.getMerchantId()); sharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); sharingOrder.setPayAmount(wxPayOrder.getPayAmount()); - sharingOrder.setRateAmount(wxPayOrder.getRateAmount()); + sharingOrder.setRateAmount(wxPayOrder.getChildOrderShare(orderId).getRateAmount()); sharingOrder.setOrderId(wxPayOrder.getId()); sharingOrder.setPayTimeStart(wxPayOrder.getPayTimeStart()); sharingOrder.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); sharingOrder.updateTenantInfo(wxPayOrder); sharingOrder.setTransactionId(wxPayOrder.getTransactionId()); - sharingOrder.setShareAmount(wxPayOrder.getShareAmount()); + sharingOrder.setShareAmount(wxPayOrder.getChildOrderShare(orderId).getShareAmount()); ResultData resultData = wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode()); } else { logger.error("微信分账: 未找到payorder or merchant at orderid-" + orderId); } } catch (MallinkException e) { - logger.error("微信分账: " + e.getMessage()); + logger.error("微信分账: " + e.getMessage(),e); } } @@ -1958,74 +2122,100 @@ public class WxOrderServiceImpl implements WxOrderService { @Qualifier("cUserBasicInfoRedisTemplate") RedisTemplate cUserBasicInfoRedisTemplate; + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override - public WxOrder saveOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, OrderSaveDto orderSaveDto, boolean isPress,EnumPayWay payWay) { + public WxComposeOrder saveOrderForCoupon(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,WxCUserBasicInfo user,List orderSave,EnumPayWay payWay) { + WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); + // 防止同一用户重复下单,1秒内 + String key = new StringBuilder().append("saveComposeOrder:").append(user.getId()).toString(); + boolean hasKey = cUserBasicInfoRedisTemplate.hasKey(key); + if (hasKey) { + logger.error("用户正在下单,请求异常返回,user: {} " + JSON.toJSONString(user)); + throw new MallinkException(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); + } + cUserBasicInfoRedisTemplate.opsForValue().set(key, user, 1000, TimeUnit.MILLISECONDS); + + + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrderType.getCode()); + WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(user, orderSave, payWay); + WxOrder lastOrder = null; + for (int i = 0 ; i < orderSave.size(); i ++) { + OrderComposeSaveDto orderdto = orderSave.get(i); + //券一个数量创建一个订单 + boolean isOneNumberOneOrder = orderAdapterService.isOneNumberOneOrder(); + if (isOneNumberOneOrder) { + for (int j = 0; j < orderdto.getCount(); j++) { + lastOrder = proxy.handleSaveOrderForCouponSingle(allowUnPayOrder,composeOrder, user, orderdto.getWxCoupon(), 1, orderdto, payWay); + } + }else { + lastOrder = proxy.handleSaveOrderForCouponSingle(allowUnPayOrder,composeOrder, user, orderdto.getWxCoupon(), orderdto.getCount(), orderdto, payWay); + } + } + //如果没有orderId,则用lastOrder的信息 + if (null == composeOrder.getMainOrderId() || composeOrder.getMainOrderId() <= 0) { + return new WxComposeOrder(lastOrder.getId(), composeOrder.getComposeOrderType(),lastOrder.getPayment()); + } + return composeOrder; + } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxOrder handleSaveOrderForCouponSingle(boolean allowUnPayOrder,WxComposeOrder composeOrder,WxCUserBasicInfo user,WxCoupon coupon,int perCouponNumber,OrderComposeSaveDto orderdto,EnumPayWay payWay) { + WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); + // 是否砍价 WxOrder order = null; - // 防止同一用户重复抽奖(一分钟内) - // 1. 订单保存时 加入redis缓存,key --> action:userId:couponId , 时间1000ms - // 2. 如果存在,说明该用户正在下单,返回异常提示 - // 3. 方法结束时清除 key - if (checkCouponIsFree(coupon)) { + if (checkCouponIsFree(coupon,orderdto.getShippingType())) { // 免费券 - String key = StringUtils.join("action", ":", user.getId(), coupon.getId()); - boolean hasKey = cUserBasicInfoRedisTemplate.hasKey(key); - if (hasKey) { - logger.error("用户正在下单,请求异常返回,user: {} " + JSON.toJSONString(user)); - throw new MallinkException(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); - } - cUserBasicInfoRedisTemplate.opsForValue().set(key, user, 1000, TimeUnit.MILLISECONDS); - - order = saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null,payWay); + order = proxy.saveFreeOrderForCoupon(allowUnPayOrder,composeOrder,user, coupon,perCouponNumber,orderdto.getSignleOrder().getCouponChannelId(), + orderdto.getSignleOrder().getFormId(),null,payWay,orderdto.getShippingType(),orderdto.getAddress()); if (order != null) { // 6. 下订单完成,发送内部消息 // 下订单完成,发送内部消息 try { - sendOrderSuccessActionMsg(order); + proxy.sendOrderSuccessActionMsg(order); } catch (Exception e) { - logger.error("内部消息发送失败: " + e.getMessage()); + logger.error("内部消息发送失败: " + e.getMessage(),e); throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); } } } else { // 有价券 - order = saveNoFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), isPress, orderSaveDto.getOrderGroupId(), orderSaveDto.getFormId()); + order = proxy.saveNoFreeOrderForCoupon(allowUnPayOrder,composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto); } // couponActionLog - try { - wxCouponActionLogService.addOne(order, order.getProductId(), order.getOrderNumber(), EnumCouponSendSendType.ACTIVE.getCode(), orderSaveDto.getCouponChannelId(),0L); - } catch (Exception e) { - // 库存恢复 - stockBack(order); - logger.error("保存订单:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); - } - return order; +// try { +// wxCouponActionLogService.addOne(order, order.getProductId(), order.getOrderNumber(), EnumCouponSendSendType.ACTIVE.getCode(), orderdto.getSignleOrder().getCouponChannelId(),0L); +// } catch (Exception e) { +// // 库存恢复 +// stockBack(order); +// logger.error("保存订单:" + e.getMessage()); +// throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); +// } + return order; } - + + @Override - public boolean checkCouponIsFree(WxCoupon coupon) { - return coupon.getSalePrice() == 0; + public boolean checkCouponIsFree(WxCoupon coupon,Integer shippingType) { + if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(shippingType)){ + return coupon.getSalePrice().intValue() + coupon.getFreightPrice().intValue() == 0; + } + return coupon.getSalePrice().intValue() == 0; } - @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveFreeOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId,EnumPayWay payWay) { - // 1. check user info and coupon info - userCouponMerchantCheck(user, coupon); - if (coupon.checkIsCreditCoupon()) { - //若用户剩余积分比积分售价低则不能支付 - if (user.getCredit() == null || user.getCredit() < coupon.getCreditPrice()) { - throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); - } - } - // 2. 减库存操作 + @Override + public WxOrder saveFreeOrderForCoupon(boolean allowUnPayOrder,WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, + Long couponChannelId, String formId, Long couponPasswordId,EnumPayWay payWay, + Integer shippingType, UserBasicInfoAddress address) { + WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); + // 减库存操作 String couponIdStr = String.valueOf(coupon.getId()); - stockReduce(user, coupon, couponIdStr); + proxy.stockReduce(allowUnPayOrder,user, coupon, couponIdStr,couponNumber); - // 3. 当积分券或者积分停车券时 则进行积分支付 + // 当积分券或者积分停车券时 则进行积分支付 Integer orderType; if (coupon.checkIsCreditCoupon()) { - creditPay(user, coupon); + proxy.creditPay(user, coupon); orderType = EnumOrderType.CREDIT.getCode(); } else { orderType = EnumOrderType.COUPON.getCode(); @@ -2040,28 +2230,111 @@ public class WxOrderServiceImpl implements WxOrderService { record.setPayment(0); record.setFormId(formId); record.setOrderGroupId(0L); + + record.setShippingType(shippingType); + if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(shippingType)){ + record.setShippingAddress(JSON.toJSONString(address)); + } + if (null != composeOrder) { + record.setComposeOrderId(composeOrder.getMainOrderId()); + //if (EnumComposeOrder.childOrderIsSingle(composeOrder.getComposeOrderType())) { + // record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + //}else { + record.setComposeOrderType(composeOrder.getComposeOrderType()); + //} + }else { + record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + record.setComposeOrderId(0L); + } + record.setCouponNumber(couponNumber); try { - saveFreeOrder(record, user, coupon); + proxy.saveFreeOrder(record, user, coupon); } catch (Exception e) { - logger.error("下订单:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); + logger.error("下订单错误:" + e.getMessage(),e); + throw new MallinkException(ErrorCode.ORDER_SAVE_ERR.getCode(),"["+coupon.getTitle()+"]保存订单错误."+e.getMessage()); } - // 5. 创建couponOrder try { - createCouponOrder(record, user, coupon, couponPasswordId,payWay,null,null); + proxy.createCouponOrder(record, user, coupon, couponPasswordId,payWay,null,null,null); } catch (Exception e) { logger.error("couponOrder失败:" + e.getMessage(),e); - throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); + throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR.getCode(),"["+coupon.getTitle()+"]保存券订单错误."+e.getMessage()); } return record; } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxOrder saveNoFreeOrderForCoupon(boolean allowUnPayOrder,WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber,OrderComposeSaveDto orderdto) { + WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); + String couponIdStr = String.valueOf(coupon.getId()); + // 3. 减库存操作 + proxy.stockReduce(allowUnPayOrder,user, coupon, couponIdStr,couponNumber); + + // 3. 当积分券或者积分停车券时 则进行积分支付 + Integer orderType; + if (coupon.checkIsCreditCoupon()) { + proxy.creditPay(user, coupon); + orderType = EnumOrderType.CREDIT.getCode(); + } else { + orderType = EnumOrderType.COUPON.getCode(); + } + + // 4. 保存订单 + Long orderNumber; + // 4.1 券价格 + WxComposeChildOrderPrice price = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()) + .getChildCouponOrderPrice(orderdto,coupon, orderdto.getSignleOrder().isPressOrder(), orderdto.getSignleOrder().getOrderGroupId(), couponNumber); + + Integer orderStatus = OrderHelper.getOrderStatusWxCoupon(coupon, orderdto.getSignleOrder().getOrderGroupId()); + + // 4.2 保存订单 + WxOrder record = new WxOrder(); + record.setType(orderType); + record.setCouponChannelId(orderdto.getSignleOrder().getCouponChannelId()); + record.setOrderGroupId(orderdto.getSignleOrder().getOrderGroupId()); + record.setFormId(orderdto.getSignleOrder().getFormId()); + + record.setPayment(price.getRealPayMent()); + record.setShippingType(orderdto.getShippingType()); + if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(orderdto.getShippingType())){ + record.setFreightPrice(coupon.getFreightPrice()); + record.setShippingAddress(JSON.toJSONString(orderdto.getAddress())); + } + + record.setOrderStatus(orderStatus); + record.setComposeOrderId(composeOrder.getMainOrderId()); + //if (EnumComposeOrder.childOrderIsSingle(composeOrder.getComposeOrderType())) { + // record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + //}else { + record.setComposeOrderType(composeOrder.getComposeOrderType()); + //} + + record.setCouponNumber(couponNumber); + try { + orderNumber = proxy.saveNoFreeOrder(record, user, coupon, orderdto.getSignleOrder().isPressOrder()); + } catch (Exception e) { + logger.error("保存订单:" + e.getMessage(),e); + throw new MallinkException(ErrorCode.ORDER_SAVE_ERR.getCode(),"["+coupon.getTitle()+"]订单保存错误,"+e.getMessage()); + } + + if (orderdto.getSignleOrder().isPressOrder()) { + // 5. 第一次砍价 + try { + proxy.firstPress(record, user, coupon, orderNumber); + } catch (Exception e) { + logger.error("第一次砍价失败:" + e.getMessage(),e); + throw new MallinkException(ErrorCode.ORDER_SAVE_ERR.getCode(),"["+coupon.getTitle()+"]第一次砍价错误,"+e.getMessage()); + } + } + return record; + } + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public Long saveOuterOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId) { // 1. check user info and coupon info - userCouponMerchantCheck(user, coupon); + userCouponMerchantCheck(user, coupon,"此券"); if (coupon.checkIsCreditCoupon()) { //若用户剩余积分比积分售价低则不能支付 if (user.getCredit() == null || user.getCredit() < coupon.getCreditPrice()) { @@ -2070,7 +2343,7 @@ public class WxOrderServiceImpl implements WxOrderService { } // 2. 减库存操作 String couponIdStr = String.valueOf(coupon.getId()); - stockReduce(user, coupon, couponIdStr); + stockReduce(false,user, coupon, couponIdStr,1); // 3. 当积分券或者积分停车券时 则进行积分支付 Integer orderType; @@ -2090,6 +2363,9 @@ public class WxOrderServiceImpl implements WxOrderService { record.setPayment(0); record.setFormId(formId); record.setOrderGroupId(0L); + record.setComposeOrderId(0L); + record.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + record.setCouponNumber(1); try { saveFreeOrder(record, user, coupon); } catch (Exception e) { @@ -2114,7 +2390,8 @@ public class WxOrderServiceImpl implements WxOrderService { * @param user * @param coupon */ - private void saveFreeOrder(WxOrder record, WxCUserBasicInfo user, WxCoupon coupon) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void saveFreeOrder(WxOrder record, WxCUserBasicInfo user, WxCoupon coupon) { Date curr = new Date(); // body String bodyStr = ""; @@ -2140,35 +2417,28 @@ public class WxOrderServiceImpl implements WxOrderService { wxOrderMapper.insert(record); } - private void userCouponMerchantCheck(WxCUserBasicInfo user, WxCoupon coupon) throws MallinkException { - // 检查用户 - if (user == null) { - logger.error("用户不存在"); - throw new MallinkException(ErrorCode.USER_IS_EMPTY); - } + private void userCouponMerchantCheck(WxCUserBasicInfo user, WxCoupon coupon,String premsg) throws MallinkException { // 检查券 if (coupon == null) { logger.error("券不存在"); - throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); - } - // 检查券状态 - if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { - logger.error("券已下架, couponId: " + coupon.getId()); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY.getCode(),premsg+"不存在"); } - // 检查券商户信息 - if (!isCouponMerchantValid(coupon.getId(),coupon.getTenantId())) { - logger.error("商户不存在, couponId: " + coupon.getId()); - throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); + if (EnumCouponType.mustHasMerchant(coupon.getType())) { + // 检查券商户信息 + if (!isCouponMerchantValid(coupon.getId(),coupon.getTenantId())) { + logger.error("商户不存在, couponId: " + coupon.getId()); + throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND.getCode(),premsg+"商户信息没找到"); + } } // 检查 优惠券 库存 if (coupon.getRemainInventory() <= 0) { logger.error("此券库存为0, couponId: " + coupon.getId()); - throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY); + throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY.getCode(),premsg+"库存不足"); } } - private void creditPay(WxCUserBasicInfo user, WxCoupon coupon) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void creditPay(WxCUserBasicInfo user, WxCoupon coupon) { //-------此处为【积分支付】记录增加积分操作------- WxCreditHistory creditHistory = new WxCreditHistory(); creditHistory.setCreditNum(coupon.getCreditPrice()); @@ -2195,79 +2465,7 @@ public class WxOrderServiceImpl implements WxOrderService { wxCreditHistoryService.saveOrUpdate(creditHistory,coupon.getTenantId()); } - @Override - @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveNoFreeOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, Long couponChannelId, boolean isPress, Long orderGroupId, String formId) { - // 1. check user info and coupon info - userCouponMerchantCheck(user, coupon); - if (coupon.checkIsCreditCoupon()) { - //若用户剩余积分比积分售价低则不能支付 - if (user.getCredit() == null || user.getCredit() < coupon.getCreditPrice()) { - throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); - } - } - - // 2. 拼团检查 - if (isOrderGroup(orderGroupId)) { - checkOrderGroup(user, orderGroupId,coupon); - } - String couponIdStr = String.valueOf(coupon.getId()); - // 3. 减库存操作 - stockReduce(user, coupon, couponIdStr); - - // 3. 当积分券或者积分停车券时 则进行积分支付 - Integer orderType; - if (coupon.checkIsCreditCoupon()) { - creditPay(user, coupon); - orderType = EnumOrderType.CREDIT.getCode(); - } else { - orderType = EnumOrderType.COUPON.getCode(); - } - - // 4. 保存订单 - Long orderNumber; - // 4.1 券价格 - int payment = coupon.getSalePrice(); - Integer orderStatus = EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode(); - if (isPress || coupon.getType().equals(EnumCouponType.COUPON_PRESS.getCode())) { - // 砍价券 初始是全价即面额 - payment = coupon.getPrice(); - } - if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { - if (orderGroupId == null) { - // 拼团券 初始是全价即面额 - payment = coupon.getPrice(); - } else { - orderStatus = EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode(); - } - } - - // 4.2 保存订单 - WxOrder record = new WxOrder(); - record.setType(orderType); - record.setCouponChannelId(couponChannelId); - record.setOrderGroupId(orderGroupId); - record.setFormId(formId); - record.setPayment(payment); - record.setOrderStatus(orderStatus); - try { - orderNumber = saveNoFreeOrder(record, user, coupon, isPress); - } catch (Exception e) { - logger.error("保存订单:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); - } - if (isPress) { - // 5. 第一次砍价 - try { - firstPress(record, user, coupon, orderNumber); - } catch (Exception e) { - logger.error("第一次砍价失败:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); - } - } - return record; - } /** * 初始砍价 @@ -2277,7 +2475,8 @@ public class WxOrderServiceImpl implements WxOrderService { * @param coupon * @param orderNumber */ - private void firstPress(WxOrder record, WxCUserBasicInfo user, WxCoupon coupon, Long orderNumber) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void firstPress(WxOrder record, WxCUserBasicInfo user, WxCoupon coupon, Long orderNumber) { // 保存砍价信息 int total = coupon.getPrice() - coupon.getSalePrice(); int left_total = total; @@ -2302,7 +2501,8 @@ public class WxOrderServiceImpl implements WxOrderService { wxOrderMapper.updateById(orderUpdatePress); } - private Long saveNoFreeOrder(WxOrder record, WxCUserBasicInfo user, WxCoupon coupon, boolean isPress) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public Long saveNoFreeOrder(WxOrder record, WxCUserBasicInfo user, WxCoupon coupon, boolean isPress) { Long orderNumber; Date curr = new Date(); @@ -2341,21 +2541,21 @@ public class WxOrderServiceImpl implements WxOrderService { return orderNumber; } - private void checkOrderGroup(WxCUserBasicInfo user, Long orderGroupId,WxCoupon coupon) { + private void checkOrderGroup(WxCUserBasicInfo user, Long orderGroupId,WxCoupon coupon,String premsg) { WxOrderGroup group = wxOrderGroupMapper.selectById(orderGroupId,coupon.getTenantId()); if (group.getStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) { logger.error("下订单拼团人数已满>>>" + orderGroupId); - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),premsg+"拼团人数已满"); } if (group.getRemainPeople()<=0) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),"下单人数已满"); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),premsg+"下单人数已满"); } //判断拼团人数是否已经超出限制 int groupCount = countGroupOrder(orderGroupId,true,group.getTenantId()); if (groupCount>=coupon.getPressLimitNum()) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),"下单人数超出优惠券人数限制!"); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),premsg+"下单人数超出优惠券人数限制!"); } WxOrder order = new WxOrder(); @@ -2365,7 +2565,7 @@ public class WxOrderServiceImpl implements WxOrderService { long count = wxOrderMapper.selectCount(new QueryWrapper(order)); if (count > 0) { logger.error("重复的拼团>>>" + orderGroupId); - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_UNPAID); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_UNPAID.getCode(),premsg+"您有未支付的拼团订单"); } } @@ -2390,9 +2590,9 @@ public class WxOrderServiceImpl implements WxOrderService { } @Override - public int countUserCouponGroupOrder(Long cuserId, Long couponId,String tenantId) { + public int countUserCouponGroupOrder(WxCUserBasicInfo wxCUserBasicInfo, Long couponId,String tenantId) { WxOrder query = new WxOrder(); - query.setCUserId(cuserId); + query.setCUserId(wxCUserBasicInfo.getId()); query.setProductId(couponId); List statusS = new ArrayList(); statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); @@ -2404,37 +2604,100 @@ public class WxOrderServiceImpl implements WxOrderService { @Override - public ResultData saveOrder(OrderSaveDto orderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity) { + public ResultData composeSaveOrder(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,List composeOrderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity) { + try { + if (null == composeOrderSaveDto || composeOrderSaveDto.size() <= 0 ) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"无商品信息"); + } + + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,tenantEntity.getFinalTenantId()); + if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) { + logger.info("会员权益被锁定:cUserId:" + cUserId); + return new ResultData(ErrorCode.MEMBER_IS_LOCKED); + } + + boolean singleProduct = false; + if (composeOrderSaveDto.size() == 1) { + singleProduct = true; + } + + for ( int i =0 ; i< composeOrderSaveDto.size(); i++ ) { + OrderComposeSaveDto ocsd = composeOrderSaveDto.get(i); + WxCoupon coupon = singleOrderCheck(ocsd.getSignleOrder(),ocsd.getCount(),wxCUserBasicInfo,payWay,tenantEntity,i+1,singleProduct); + ocsd.setWxCoupon(coupon); + } + WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); + try { + WxComposeOrder order = proxy.saveOrderForCoupon(allowUnPayOrder,composeOrderType,wxCUserBasicInfo, composeOrderSaveDto, payWay); + return new ResultData(order); + } catch (MallinkException e) { + logger.error("saveOrderForCoupon error.",e); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("saveOrderForCoupon error.",e); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), e.getMessage()); + } + + }catch(MallinkException me) { + return new ResultData(me.getErrorCode(),me.getMessage()); + }catch(Exception e) { + logger.error("composeSaveOrder error.",e); + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); + } + + + } + + @Override + public PageInfo listGoodsCAsPage(WxOrder record, Integer pageIndex, Integer pageSize) { + PageInfo page = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.listGoodsCAsPage(record)); + page.getList().stream().forEach(oc->{ + if(oc.getLevel().equals(1)){ + record.setComposeOrderId(oc.getComposeOrderId()); + record.setOrderStatus(oc.getOrderStatus()); + List orderCouponVoList = wxOrderMapper.findListOfCUser(record); + oc.setOrderCouponVoList(orderCouponVoList); + } + }); + + return page; + } + + private WxCoupon singleOrderCheck(OrderSaveDto orderSaveDto,int productCount,WxCUserBasicInfo wxCUserBasicInfo,EnumPayWay payWay,TenantEntity tenantEntity,int curindex,boolean singleProduct) { logger.info("OrderSave: " + orderSaveDto); + String premsg = ""; + if (singleProduct) { + premsg = "此券"; + }else { + premsg = "第["+curindex+"]张券"; + } if (orderSaveDto.getCouponChannelId() == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空"); + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), premsg+"couponChannelId不能为空"); } WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(orderSaveDto.getCouponChannelId(),tenantEntity.getTenantId()); if (wxCouponChannel == null) { logger.error("couponChannelId find error, " + orderSaveDto.getCouponChannelId()); - return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); + throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF.getCode(),premsg+"投放渠道不存在"); } - ResultData resultData = couponChannelCheck(orderSaveDto, wxCouponChannel); - if (resultData != null) return resultData; - - WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,tenantEntity.getFinalTenantId()); - if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) { - logger.info("会员权益被锁定:cUserId:" + cUserId); - return new ResultData(ErrorCode.MEMBER_IS_LOCKED); + if (!singleProduct) { + premsg = premsg+"【"+wxCouponChannel.getTitle()+"】"; } + couponChannelCheck(orderSaveDto, wxCouponChannel,premsg); WxCoupon coupon = wxCouponService.getById(wxCouponChannel.getCouponId(),wxCouponChannel.getTenantId()); if (null == coupon) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY); + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY.getCode(),premsg+"不存在"); } + if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { - return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); + throw new MallinkException(ErrorCode.COUPON_IS_TAKE_OFF.getCode(),premsg+"已作废"); } + //判断是否是拼团订单,如果是拼团订单,判断现在进行中的,和已完成的数量是否超出券的限制 if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { - int ordercount = this.countUserCouponGroupOrder(cUserId,coupon.getId(),coupon.getTenantId()); - if (ordercount>=coupon.getUseLimitQuantity()) { - return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF.getCode(),"您当前此券的有效拼团数量达到券的限购次数。"); + int ordercount = this.countUserCouponGroupOrder(wxCUserBasicInfo,coupon.getId(),coupon.getTenantId()); + if ((ordercount)>=coupon.getUseLimitQuantity()) { + throw new MallinkException(ErrorCode.COUPON_IS_TAKE_OFF.getCode(),premsg+"您的有效拼团数量达到限购次数。"); } } @@ -2456,7 +2719,7 @@ public class WxOrderServiceImpl implements WxOrderService { } } if (wxCouponCVo == null) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY); + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY.getCode(),premsg+"未查询到详细信息."); } //此处判断是否存在绝对保证库存不超卖的缓存,如果没有,则把当前的库存设置为最大值。如果有,则是后台设置的时候保存的,以那个为准。 @@ -2480,81 +2743,81 @@ public class WxOrderServiceImpl implements WxOrderService { } } - resultData = couponUserCheck(wxCUserBasicInfo, wxCouponCVo); - if (resultData != null) return resultData; + couponUserCheck(wxCUserBasicInfo, wxCouponCVo,premsg); Long couponId = orderSaveDto.getCouponId() == null ? wxCouponChannel.getCouponId() : orderSaveDto.getCouponId(); if (couponId == null) { logger.error("couponChannelId或者couponId不能为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId或者couponId不能为空"); + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), premsg+"couponChannelId或者couponId不能为空"); } - // 是否砍价 - boolean isPress = orderSaveDto.getPress() != null ? orderSaveDto.getPress() : false; - - try { - WxOrder order = this.saveOrderForCoupon(wxCUserBasicInfo, coupon, orderSaveDto, isPress,payWay); - return new ResultData(order); - } catch (MallinkException e) { - logger.error(e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); + + userCouponMerchantCheck(wxCUserBasicInfo, coupon,premsg); + + if (coupon.checkIsCreditCoupon()) { + //若用户剩余积分比积分售价低则不能支付 + if (wxCUserBasicInfo.getCredit() == null || wxCUserBasicInfo.getCredit() < coupon.getCreditPrice()) { + throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH.getCode(), premsg+"积分不够扣减值"); + } + } + + if (!checkCouponIsFree(coupon,null)) { + // 有价,拼团检查 + if (isOrderGroup(orderSaveDto.getOrderGroupId())) { + checkOrderGroup(wxCUserBasicInfo, orderSaveDto.getOrderGroupId(),coupon,premsg); + } } + return coupon; } - private ResultData couponChannelCheck(OrderSaveDto orderSaveDto, WxCouponChannel wxCouponChannel) { + private void couponChannelCheck(OrderSaveDto orderSaveDto, WxCouponChannel wxCouponChannel,String premsg) { if (wxCouponChannel.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) { Date now = new Date(); if (wxCouponChannel.getBeginTime().getTime() > now.getTime()) { logger.error("此券活动未开始:" + orderSaveDto.getCouponChannelId()); - return new ResultData(ErrorCode.COUPON_CHANNEL_IS_NOT_STARTED); + throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_NOT_STARTED.getCode(),premsg+"活动未开始"); } if (wxCouponChannel.getEndTime().getTime() < now.getTime()) { logger.error("此券活动已结束:" + orderSaveDto.getCouponChannelId()); - return new ResultData(ErrorCode.COUPON_CHANNEL_IS_END); + throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_END.getCode(),premsg+"活动已结束"); } } if (wxCouponChannel.getStatus() == EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) { logger.error("此券已下架:" + orderSaveDto.getCouponChannelId()); - return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); + throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF.getCode(),premsg+"已下架"); } - return null; } - private ResultData couponUserCheck(WxCUserBasicInfo user, WxCouponCVo coupon) { - if (coupon.getConditions() == null) return null; + private void couponUserCheck(WxCUserBasicInfo user, WxCouponCVo coupon,String premsg) { + if (coupon.getConditions() == null) return ; JSONObject jo = null; try { jo = JSONObject.parseObject(coupon.getConditions()); } catch (Exception e) { - logger.error("购买券条件判断错误:ID=" + coupon.getId() + e.getMessage()); + logger.error("购买券条件判断错误:ID=" + coupon.getId() + e.getMessage(),e); } if (jo != null) { if (jo.getIntValue("type") == EnumCouponConditionType.NEW_MEMBER.getCode()){ if (user != null && user.getActRecord() > 0) - return new ResultData(ErrorCode.COUPON_ONLY_FOR_NEW_MEMBER); + throw new MallinkException(ErrorCode.COUPON_ONLY_FOR_NEW_MEMBER.getCode(),premsg+"限新会员,您已经参加过新会员活动"); if (this.countCouponConditionType1(coupon.getTenantId(),user.getId()) > 0) - return new ResultData(ErrorCode.COUPON_ALREADY_IN_NEW_MEMBER); + throw new MallinkException(ErrorCode.COUPON_ALREADY_IN_NEW_MEMBER.getCode(),premsg+"限新会员,您已经不是新用户"); }else if (jo.getIntValue("type") == EnumCouponConditionType.SCORE_SCOPE.getCode()){ int max = jo.getIntValue("max"); int min = jo.getIntValue("min"); if (max!=0 && min ==0 && user.getPoins() > max) { - return new ResultData(ErrorCode.COUPON_SCORE_NOT_IN_RANGE); + throw new MallinkException(ErrorCode.COUPON_SCORE_NOT_IN_RANGE.getCode(),premsg+"您的成长值/等级与要求不符"); } if (max==0 && min !=0 && user.getPoins() < min) { - return new ResultData(ErrorCode.COUPON_SCORE_NOT_IN_RANGE); + throw new MallinkException(ErrorCode.COUPON_SCORE_NOT_IN_RANGE.getCode(),premsg+"您的成长值/等级与要求不符"); } if (max!=0 && min !=0 && (user.getPoins() < min || user.getPoins() > max)) { - return new ResultData(ErrorCode.COUPON_SCORE_NOT_IN_RANGE); + throw new MallinkException(ErrorCode.COUPON_SCORE_NOT_IN_RANGE.getCode(),premsg+"您的成长值/等级与要求不符"); } } } - - return null; } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 55634f1b1..f7f61c2f8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -18,6 +18,12 @@ import com.iformall.mapper.*; import com.iformall.pay.*; import com.iformall.service.*; import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeChildOrderShare; +import com.iformall.service.order.entity.WxComposeOrder; +import com.iformall.service.order.util.OrderHelper; import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; @@ -103,6 +109,12 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { @Autowired WxCashOutService cashOutService; + + @Autowired + WxBatchOrderMapper wxBatchOrderMapper; + + @Autowired + OrderFactory orderFactory; JSONObject errorMapQuery = JSON.parseObject("{" + "\"ORDERNOTEXIST\":{\"detail\":\"此交易订单号不存在\",\"reason\":\"查询系统中不存在此交易订单号\",\"resolution\":\"该API只能查提交支付交易返回成功的订单,请商户检查需要查询的订单号是否正确\"},\n" + @@ -111,9 +123,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { //方法必须为public AopContext.currentProxy() @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override - public void handleSuccessOrder(WxPayOrder oldRecord,WxOrder order,PayQueryAdapterResult queryResult,boolean isScheduleTask) { + public void handleSuccessOrder(WxPayOrder oldRecord,WxComposeOrder composeOrder,PayQueryAdapterResult queryResult,boolean isScheduleTask,boolean isOneChildOrder) { Date curDate = new Date(); if (oldRecord.getPayOrderStatus() != EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) { + WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy(); //因为此处是处理订单支付成功了但是订单状态为未支付成功的异常状态,库存不应该再扣减 //更新wxPayOrder oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); @@ -132,49 +145,44 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { oldRecord.setUpdateTime(curDate); wxPayOrderMapper.updateById(oldRecord); - //处理其他信息 - WxCoupon wxCoupon = wxCouponMapper.selectById(order.getProductId(),order.getTenantId()); - if(wxCoupon != null) { - if (isOrderGroupCoupon(oldRecord, wxCoupon)) { - // 如果是Coupon是拼团, 创建拼团信息, 不创建COUPON_ORDER - try { - wxOrderGroupService.createOrderGroup(order, wxCoupon,isScheduleTask); - } catch (Exception e) { - logger.error("参团失败" + e.getMessage(),e); - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); - order.setUpdateDate(new Date()); - wxOrderMapper.updateById(order); - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); - } - } else { - // 普通券, 修改订单状态 - try { - wxOrderService.couponOrderSuccess(order); - } catch (Exception e) { - logger.error(e.getMessage(),e); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); - } - - // 下订单完成,发送内部消息 - try { - wxOrderService.sendOrderSuccessActionMsg(order); - } catch (Exception e) { - logger.error("内部消息发送失败: " + e.getMessage(),e); - throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); - } - } - } - + if (!EnumComposeOrder.isSingle(composeOrder.getComposeOrderType())) { + //如果是组合订单的单独处理。如定时处理的单个订单 + if (isOneChildOrder) { + //处理其他信息 + try { + proxy.handleOrderPaySingleOrderSuccess(composeOrder.getSingleOrder(),oldRecord, transactionId,isScheduleTask); + }catch(Exception e) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); + } + }else { + List orderList = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).getChildOrders(composeOrder, oldRecord.getTenantId()); + for (WxOrder o : orderList) { + try { + proxy.handleOrderPaySingleOrderSuccess(o,oldRecord, transactionId, isScheduleTask); + }catch(Exception e) { + logger.error("handleSuccessOrder error.",e); + } + } + } + }else { + //处理其他信息 + try { + proxy.handleOrderPaySingleOrderSuccess(composeOrder.getSingleOrder(),oldRecord, transactionId,isScheduleTask); + }catch(Exception e) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); + } + } } - } + + @Override - public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay) { + public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxComposeOrder composeOrder,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay) { PayQueryAdapterResult queryResult = null; int wxpaystatus = 0; try { - queryResult = payServiceFactory.getPayAdapterService(oldRecord.getPayVendor()).queryPayStatus(oldRecord, order, appInfo, payAccount); + queryResult = payServiceFactory.getPayAdapterService(oldRecord.getPayVendor()).queryPayStatus(oldRecord, appInfo, payAccount); wxpaystatus = payServiceFactory.getPayAdapterService(oldRecord.getPayVendor()).queryPayStatus(queryResult, oldRecord.getPayOrderNo()); } catch (Exception e) { logger.error("pay order service handleWxOrderQuery error: " ,e); @@ -184,7 +192,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode()==wxpaystatus) { //直接调用不会触发事务,spring事务基于AOP代理 WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy(); - proxy.handleSuccessOrder(oldRecord,order,queryResult,false); + proxy.handleSuccessOrder(oldRecord,composeOrder,queryResult,false,false); throw new MallinkException(ErrorCode.PAY_ORDER_EXIST.getCode(),"该订单已经支付,请勿重复支付!"); }else if (EnumPayStatus.PAY_STATUS_REFUND.getCode()==wxpaystatus) { throw new MallinkException(ErrorCode.PAY_ORDER_REFUND.getCode(),"该订单已经退款,无法支付!"); @@ -211,81 +219,105 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return null; } - @Override public ResultData createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user, WxPayOrder record, EnumPayWay payWay,PayExtraParam params) { - IdWorker idworker = IdWorker.get(); - - EnumPayShare isShare = EnumPayShare.NO; - - try { - // 1. check 订单 - WxOrder order = wxOrderMapper.selectById(record.getOrderId(),appInfo.getTenantId()); - if (order == null) { - logger.error("pay order, order not allow, repaymentReq: " + record.toString() + ", payWay: " + payWay.toString()); - throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + /* + * 如果是组合订单(非拼团、砍价),则结算按照主订单来结算。 + * //如果是组合订单,则wxPayOrder对应的是WxcomposeOrder.为了兼容之前的,需要把支付相关信息也保存到子订单里面去 + * //如果是非组合订单,则wxPayOrder对应的是wxOrder + */ + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(record.getComposeOrder()); + WxComposeOrder composeOrder = orderAdapterService.getComposeOrder(record.getOrderId(),appInfo.getTenantId()); + if (null == composeOrder) { + logger.error("pay order, order not allow, repaymentReq: " + record.toString() + ", payWay: " + payWay.toString()); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + + List orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); + WxCoupon lastCoupon = null; + for (WxOrder o : orderList) { + lastCoupon = checkSinglePayOrder(o, user, payWay); + } + String productName = orderAdapterService.getPayProductName(lastCoupon); + PayAdapterResult payResult = createPayOrder(appInfo, user, record,composeOrder,productName, payWay, params); + if (payResult.isSuccess()) { + return new ResultData(Result.SUCCESS,"创建支付单成功",payResult.getData()); + }else { + return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), payResult.getMsg(), payResult.getData()); + } + } + + + private WxCoupon checkSinglePayOrder(WxOrder order,WxCUserBasicInfo user,EnumPayWay payWay) { + if (!order.getOrderGroupId().equals(0L)) { + if (order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) { + logger.error("支付时拼团已满>>" + order.getOrderGroupId()); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED); } - if (!order.getOrderGroupId().equals(0L)) { - if (order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) { - logger.error("支付时拼团已满>>" + order.getOrderGroupId()); - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED); - } - WxOrder orderParams = new WxOrder(); - orderParams.setOrderGroupId(order.getOrderGroupId()); - orderParams.setCUserId(user.getId()); - List orderstatuslist = new ArrayList(); - orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); - orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); - orderParams.setStatusS(orderstatuslist); - List olist = wxOrderMapper.findList(orderParams); - if (olist == null || olist.size() <=0 ) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); - } - if (olist.size() != 1) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团订单多条[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); - } - WxOrder orderq = olist.get(0); - if (null == orderq) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); - } - if (orderq.getOrderStatus()==EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_ATTEND.getCode(),"不能重复参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); - } + WxOrder orderParams = new WxOrder(); + orderParams.setOrderGroupId(order.getOrderGroupId()); + orderParams.setCUserId(user.getId()); + List orderstatuslist = new ArrayList(); + orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); + orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); + orderParams.setStatusS(orderstatuslist); + List olist = wxOrderMapper.findList(orderParams); + if (olist == null || olist.size() <=0 ) { + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); } - - WxCoupon wxCoupon = wxCouponMapper.selectById(order.getProductId(),order.getTenantId()); - if (wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && - wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { - logger.error("券已经下架了>>>" + order.getProductId()); - throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); + if (olist.size() != 1) { + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团订单多条[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); } + WxOrder orderq = olist.get(0); + if (null == orderq) { + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); + } + if (orderq.getOrderStatus()==EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) { + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_ATTEND.getCode(),"不能重复参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); + } + } - if (!wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && order.getPressEndDate() == null) { - // 非砍价券且非拼团券 - if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()) { + WxCoupon wxCoupon = wxCouponMapper.selectById(order.getProductId(),order.getTenantId()); + if (wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && + wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { + logger.error("券已经下架了>>>" + order.getProductId()); + throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); + } + + if (!wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && order.getPressEndDate() == null) { + // 非砍价券且非拼团券 + if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()) { + logger.error("订单已支付: " + order.toString() + " , payWay: " + payWay.toString()); + throw new MallinkException(ErrorCode.ORDER_HAD_PAY); + } else if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()) { + logger.error("订单已取消: " + order.toString() + " , payWay: " + payWay.toString()); + throw new MallinkException(ErrorCode.ORDER_HAD_CANCEL); + } else { + if (order.getOrderStatus() != EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()) { logger.error("订单已支付: " + order.toString() + " , payWay: " + payWay.toString()); - throw new MallinkException(ErrorCode.ORDER_HAD_PAY); - } else if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()) { - logger.error("订单已取消: " + order.toString() + " , payWay: " + payWay.toString()); - throw new MallinkException(ErrorCode.ORDER_HAD_CANCEL); - } else { - if (order.getOrderStatus() != EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()) { - logger.error("订单已支付: " + order.toString() + " , payWay: " + payWay.toString()); - throw new MallinkException(ErrorCode.ORDER_IS_NOT_PAY); - } - } - } else if (order.getPressEndDate() != null) { - // 砍价券,只有在过期时无法支付 - // 砍价中,原价购买 - // 砍价完成,低价购买 - if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PRESS_OVERTIME.getCode()) { - logger.error("砍价已过期: " + order.toString() + " , payWay: " + payWay.toString()); - throw new MallinkException(ErrorCode.ORDER_PRESS_IS_OVERTIME); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_PAY); } } - if (order.getPaymentType() != EnumPayType.PAY_PAYMENT.getCode()) { - return new ResultData(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); + } else if (order.getPressEndDate() != null) { + // 砍价券,只有在过期时无法支付 + // 砍价中,原价购买 + // 砍价完成,低价购买 + if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PRESS_OVERTIME.getCode()) { + logger.error("砍价已过期: " + order.toString() + " , payWay: " + payWay.toString()); + throw new MallinkException(ErrorCode.ORDER_PRESS_IS_OVERTIME); } + } + if (order.getPaymentType() != EnumPayType.PAY_PAYMENT.getCode()) { + throw new MallinkException(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); + } + return wxCoupon; + } + + private PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder,String productName, EnumPayWay payWay,PayExtraParam params) { + IdWorker idworker = IdWorker.get(); + EnumPayShare isShare = EnumPayShare.NO; + + try { WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); if (payAccount.checkShare()) { isShare = EnumPayShare.YES; @@ -294,7 +326,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { Date currentDate = new Date(); //一个订单只有一条支付记录。 WxPayOrder orderq = new WxPayOrder(); - orderq.setOrderId(record.getOrderId()); + orderq.setOrderId(composeOrder.getMainOrderId()); List list = wxPayOrderMapper.findList(orderq); WxPayOrder oldRecord = null; if (null != list && list.size() > 0) { @@ -304,11 +336,11 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if (null != oldRecord) { //如果是已经支付成功,则不能再次支付。如果是支付中的,也不能再次支付,等待微信同步结果 if (oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) { - logger.error("已支付>>>" + order); + logger.error("已支付>>>" + record); throw new MallinkException(ErrorCode.PAY_ORDER_EXIST); //如果是支付中的,则调用微信接口查询支付状态 }else if (oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_WAIT.getCode()) { - record = handleWxOrderQuery(oldRecord,order,appInfo,payAccount,idworker,true); + record = handleWxOrderQuery(oldRecord,composeOrder,appInfo,payAccount,idworker,true); if (null == record) { throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单微信查询支付状态失败!"); } @@ -334,7 +366,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } record.setId(id); - record.updateTenantInfo(order); + record.updateTenantInfo(composeOrder); record.setCUserId(user.getId()); record.setCreateTime(currentDate); record.setUpdateTime(currentDate); @@ -342,21 +374,30 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setPayTimeEnd(currentDate); // 支付单号 record.setPayOrderNo(String.valueOf(id)); - record.setPayAmount(order.getPayment()); + record.setPayAmount(composeOrder.getPayment()); record.setPayFrom(payWay.getCode()); record.setPayVendor(payWay.getCode()); record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); record.setShare(isShare.getCode()); + record.setComposeOrder(composeOrder.getComposeOrderType()); if (isShare == EnumPayShare.YES) { // 分账金额 - int iChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRate(), false); - Integer share_amount = record.getPayAmount() - iChargeFee; + int mallCharge = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); + Integer share_amount = record.getPayAmount() - mallCharge; record.setShareAmount(share_amount); - if(payAccount.getRealRate() != null) { - int iRealChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRealRate(), true); - if(iChargeFee > iRealChargeFee) { - record.setRateAmount(iChargeFee - iRealChargeFee); - } + record.setRateAmount(OrderHelper.getRateAmount(record.getPayAmount(),mallCharge, payAccount)); + //设置子订单分账金额 + Map childShares = new HashMap(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()); + List orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); + if(null != orderList && orderList.size() > 0) { + for (WxOrder o : orderList) { + int orderMallCharge = OrderHelper.getMallCharge(o.getPayment(), payAccount); + Integer orderShareAmount = o.getPayment() - orderMallCharge; + Integer orderRateAmount = OrderHelper.getRateAmount(o.getPayment(),orderMallCharge, payAccount); + childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(o.getPayment(), orderShareAmount, orderRateAmount)); + } + record.setChildOrderShare(JSON.toJSONString(childShares)); } } @@ -370,7 +411,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.debug("wxPayRecord md5 before:"+record.toString()); String beforemd5 = HashUtil.md5(record.toString()); - PayAdapterResult payResult = payServiceFactory.getPayAdapterService(payWay.getCode()).pay(payAccount, order, record,isShare,appInfo, currentDate, params); + PayAdapterResult payResult = payServiceFactory.getPayAdapterService(payWay.getCode()).pay(payAccount, record,composeOrder,productName,isShare,appInfo, currentDate, params); String aftermd5 = HashUtil.md5(record.toString()); if (beforemd5.equals(aftermd5)) { logger.error("支付方式["+payWay.getCode()+"]支付接口【pay】过程中 WxPayOrder 未做更新.record:"+record.toString()); @@ -383,12 +424,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error("pay order update error: " + record.toString()); throw new MallinkException(ErrorCode.DB_FAIL); } - - if (payResult.isSuccess()) { - return new ResultData(Result.SUCCESS, "创建支付订单成功", payResult.getData()); - }else { - return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), payResult.getMsg(), payResult.getData()); - } + return payResult; } catch (RuntimeException e) { logger.error("createwxpayorder error:",e); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); @@ -411,7 +447,12 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { try { // 1. check 订单 - WxOrder order = wxOrderMapper.selectById(record.getOrderId(),appInfo.getTenantId()); + WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(EnumComposeOrder.SINGLE.getCode()).getComposeOrder(record.getOrderId(), appInfo.getTenantId()); + if (composeOrder == null) { + logger.error("pay order, order not allow, repaymentReq: " + record.toString() + ", payWay: " + payWay.toString()); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + WxOrder order = composeOrder.getSingleOrder(); if (order == null) { logger.error("pay order, order not allow, repaymentReq: " + record.toString() + ", payWay: " + payWay.toString()); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); @@ -431,7 +472,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { // 2. check 是否有支付订单 Date currentDate = new Date(); WxPayOrder pq = new WxPayOrder(); - pq.setOrderId(record.getOrderId()); + pq.setOrderId(EnumComposeOrder.getPayOrderId(order)); List list = wxPayOrderMapper.findList(pq); String payOrderNo = ""; if (list.size() <= 0) { @@ -451,9 +492,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setPayVendor(payWay.getCode()); record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); record.setShare(isShare.getCode()); + record.setComposeOrder(EnumComposeOrder.SINGLE.getCode()); if (isShare == EnumPayShare.YES) { // 分账金额 - int iChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRate(), false); + int iChargeFee = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); Integer share_amount = record.getPayAmount() - iChargeFee; record.setShareAmount(share_amount); if(payAccount.getRealRate() != null) { @@ -473,13 +515,24 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } else { record = list.get(0); - record.setShare(isShare.getCode()); + if (null == record.getShare()) { + if (isShare == EnumPayShare.YES) { + int iChargeFee = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); + Integer share_amount = record.getPayAmount() - iChargeFee; + if (share_amount <= 0) { + isShare = EnumPayShare.NO; + } + } + record.setShare(isShare.getCode()); + }else { + isShare = EnumPayShare.getEnum(record.getShare()); + } payOrderNo = String.valueOf(record.getId()); } logger.debug("wxPayRecord md5 before:"+record.toString()); String beforemd5 = HashUtil.md5(record.toString()); - PayAdapterResult payResult = payServiceFactory.getPayAdapterService(payWay.getCode()).pay(payAccount, order, record,isShare,appInfo, currentDate, params); + PayAdapterResult payResult = payServiceFactory.getPayAdapterService(payWay.getCode()).pay(payAccount, record,composeOrder,"付款码支付",isShare,appInfo, currentDate, params); String aftermd5 = HashUtil.md5(record.toString()); if (beforemd5.equals(aftermd5)) { logger.error("支付方式["+payWay.getCode()+"]支付接口【pay】过程中 WxPayOrder 未做更新.record:"+record.toString()); @@ -496,7 +549,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setFailReason("do handleMicroOrderPaySuccess() error."+e.getMessage()); wxPayOrderMapper.updateById(record); } catch (Exception ex) { - logger.error("pay order update error: " + ex.getMessage()); + logger.error("pay order update error: " + ex.getMessage(),e); throw new MallinkException(ErrorCode.DB_FAIL); } throw new MallinkException(ErrorCode.DB_FAIL); @@ -507,15 +560,17 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setFailReason(payResult.getMsg()); wxPayOrderMapper.updateById(record); } catch (Exception e) { - logger.error("pay order update error: " + record.toString()); + logger.error("pay order update error: " + record.toString(),e); throw new MallinkException(ErrorCode.DB_FAIL); } return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), payResult.getMsg(), payResult.getData()); } } catch (RuntimeException e) { + logger.error("pay order update error: " + record.toString(),e); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); } catch (Exception e) { + logger.error("pay order update error: " + record.toString(),e); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); } } @@ -538,15 +593,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), "payOrder not found"); } - WxOrder order = wxOrderMapper.selectById(record.getOrderId(),payOrder.getTenantId()); - if (order == null) { - return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), "Order not found"); - } - WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,payWay); PayAdapterService payService = payServiceFactory.getPayAdapterService(payWay.getCode()); WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - PayQueryAdapterResult apiResult = payService.queryPayStatus(record, order, appInfo, payAccount); + PayQueryAdapterResult apiResult = payService.queryPayStatus(record, appInfo, payAccount); int status = payServiceFactory.getPayAdapterService(payWay.getCode()).queryPayStatus(apiResult, record.getPayOrderNo()); boolean isSuccess = true; String msg = ""; @@ -574,15 +624,15 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { }else if (status == EnumPayStatus.PAY_STATUS_ORDER_NOT_EXISTS.getCode().intValue()) { isSuccess = false; // 支付订单不存在, 订单失败 - WxOrder updateOrderForMicroPay = new WxOrder(); - updateOrderForMicroPay.setId(order.getId()); - updateOrderForMicroPay.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()); - try { - wxOrderMapper.updateById(updateOrderForMicroPay); - } catch (Exception e) { - logger.error(e.getMessage()); - } - msg = "订单支付渠道支付单不存在。orderId:"+order.getId(); +// WxOrder updateOrderForMicroPay = new WxOrder(); +// updateOrderForMicroPay.setId(order.getId()); +// updateOrderForMicroPay.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()); +// try { +// wxOrderMapper.updateById(updateOrderForMicroPay); +// } catch (Exception e) { +// logger.error(e.getMessage()); +// } + msg = "订单支付渠道支付单不存在。payOrder:"+payOrder.getId(); }else { isSuccess = false; msg = apiResult.getMsg(); @@ -760,8 +810,25 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void handleOrderPaySuccess(WxPayOrder record, String transactionId) { + WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(record.getComposeOrder()); + WxComposeOrder composeOrder = orderAdapterService.getComposeOrder(record.getOrderId(), record.getTenantId()); + List orderList = orderAdapterService.getChildOrders(composeOrder, record.getTenantId()); + boolean hasCompleted = proxy.handler(record,composeOrder,orderList,transactionId,null); + //如果未处理结束,则继续进行后续处理 + if (!hasCompleted) { + //组合支付的订单,循环所有子订单 + for (WxOrder o : orderList) { + proxy.handleOrderPaySingleOrderSuccess(o,record, transactionId, false); + } + } + } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder handler(WxPayOrder record, String transactionId,Long cUserId) { + public boolean handler(WxPayOrder record,WxComposeOrder composeOrder,List composeChildOrders, String transactionId,Long cUserId) { Date currentDate = new Date(); EnumPayStatus payStatus = EnumPayStatus.getEnum(record.getPayOrderStatus()); // 判断支付状态 @@ -779,29 +846,21 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL); } - return null; + return true; } if (payStatus != EnumPayStatus.PAY_STATUS_WAIT) { logger.info("pay success handle, payOrder " + record.getPayOrderNo() + "is paid success , orderId : " + record.getOrderId()); - return null; - } - WxOrder order = wxOrderMapper.selectById(record.getOrderId(),record.getTenantId()); - if (order == null) { - logger.error("pay success handle, order " + record.getOrderId() + " not found , payOrderid : " + record.getPayOrderNo()); - throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + return true; } if (null != cUserId) { - WxOrder __order = new WxOrder(); - __order.setId(order.getId()); - __order.setCUserId(cUserId); - wxOrderMapper.updateById(__order); + orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).updateChildOrdersCUserId(composeOrder, composeChildOrders, cUserId); } // 修改支付订单状态 WxPayOrder updateOrder = new WxPayOrder(); updateOrder.setId(record.getId()); - updateOrder.updateTenantInfo(order); + updateOrder.updateTenantInfo(record); updateOrder.setOrderId(record.getOrderId()); updateOrder.setUpdateTime(currentDate); if (null != cUserId) { @@ -815,24 +874,18 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error("支付订单数据库更新失败: " + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "支付订单数据库更新失败: " + e.getMessage()); } - return order; + return false; } - @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void handleOrderPaySuccess(WxPayOrder record, String transactionId) { - WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy(); - WxOrder order = proxy.handler(record,transactionId,null); - if (null == order ) { - return; - } - Long productId = order.getProductId(); + public void handleOrderPaySingleOrderSuccess(WxOrder order,WxPayOrder record, String transactionId,boolean isScheduleTask) { + Long productId = order.getProductId(); WxCoupon wxCoupon = wxCouponMapper.selectById(productId,order.getTenantId()); if(wxCoupon != null) { if (isOrderGroupCoupon(record, wxCoupon)) { // 如果是Coupon是拼团, 创建拼团信息, 不创建COUPON_ORDER try { - wxOrderGroupService.createOrderGroup(order, wxCoupon,false); + wxOrderGroupService.createOrderGroup(order, wxCoupon,isScheduleTask); } catch (Exception e) { logger.error("参团失败" + e.getMessage()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); @@ -843,11 +896,18 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } else { // 普通券, 修改订单状态 try { - wxOrderService.couponOrderSuccess(order); + WxCouponOrder couponOrder = wxOrderService.couponOrderSuccess(order); + try{ + orderFactory.getOrderAdapterService(record.getComposeOrder()).doOthersAfterPaySuccess(order, record,couponOrder); + }catch (Exception e) { + logger.error("doOthersAfterPaySuccess----error"+e.getMessage()); + } + } catch (Exception e) { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); } + // 下订单完成,发送内部消息 try { wxOrderService.sendOrderSuccessActionMsg(order); @@ -900,13 +960,20 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy(); - WxOrder order = proxy.handler(record,transcationId,basicUserId); - if (null == order) { + if (null == record.getComposeOrder()) { + record.setComposeOrder(EnumComposeOrder.SINGLE.getCode()); + } + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(record.getComposeOrder()); + WxComposeOrder composeOrder = orderAdapterService.getComposeOrder(record.getOrderId(), record.getTenantId()); + List orderList = orderAdapterService.getChildOrders(composeOrder, record.getTenantId()); + boolean hasCompleted = proxy.handler(record, composeOrder,orderList, transcationId, basicUserId); + //如果已经处理结束,则不再进行 + if (hasCompleted) { return; } // B端收银台核销券处理, 收银台支付和券支付可能不是同一个人 WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(composeOrder.getMainOrderId()); //payOrderQ.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); try { @@ -914,7 +981,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if (unPayOrder != null) { // 更新券支付状态 try { - unPayOrder.setOrderId(order.getId()); + unPayOrder.setOrderId(composeOrder.getMainOrderId()); unPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); unPayOrder.setPayVendor(payWay.getCode()); wxPayOrderMapper.updateById(unPayOrder); @@ -929,7 +996,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error(e.getMessage()); } // 更新后处理 - wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder, unPayOrder.getPosPayOrderId(), user.getId()); + wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder, unPayOrder.getPosPayOrderId(), user.getMerchantId()); } } } catch (Exception e) { @@ -937,9 +1004,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } // 修改订单状态 - order.setCUserId(basicUserId); + //order.setCUserId(basicUserId); handler方法已经处理了 + try { - int _count = wxOrderService.microPayOrderSuccess(order); + int _count = wxOrderService.microPayOrderSuccess(composeOrder.getSingleOrder()); if (_count > 1) { logger.error("order micro pay count > 1"); throw new MallinkException(ErrorCode.ORDER_IS_FAIL); @@ -962,7 +1030,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if (record.getShare().equals(EnumPayShare.NO.getCode())) { //结算记录 try { - proxy.createMerchantSubsidy(record, order, new Date(),true); + proxy.createMerchantSubsidy(record, composeOrder.getSingleOrder(), new Date(),true); } catch (Exception e) { logger.error("收银台结算记录失败,{}", e.getMessage()); } @@ -1005,7 +1073,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order,payWay); - if (record.getPayAmount().intValue() == 0 || record.getPayAmount().equals(order.getTotalPayment())) { + if (record.getPayAmount().intValue() == 0 || record.getPayAmount().equals(order.getPayment())) { doCouponPayOrder(user, record, order,payWay); } else { throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); @@ -1027,7 +1095,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { private void doCouponPayOrder(WxMerchantBUser user, WxPayOrder record, WxOrder order,EnumPayWay payWay) { // B端收银台核销券处理 WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.setOrderId(order.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrderQ.setCUserId(record.getCUserId()); payOrderQ.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); @@ -1038,7 +1106,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { try { WxPayOrder payOrderCoupon = new WxPayOrder(); payOrderCoupon.setId(unPayOrder.getId()); - payOrderCoupon.setOrderId(order.getId()); + payOrderCoupon.setOrderId(EnumComposeOrder.getPayOrderId(order)); payOrderCoupon.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); wxPayOrderMapper.updateById(payOrderCoupon); } catch (Exception e) { @@ -1052,7 +1120,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error(e.getMessage()); } // 更新后处理 - wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder, unPayOrder.getPosPayOrderId(), user.getId()); + wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder, unPayOrder.getPosPayOrderId(), user.getMerchantId()); } } } catch (Exception e) { @@ -1066,7 +1134,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); merchantSubsidy.setId(idWorker.nextId()); merchantSubsidy.updateTenantInfo(order); - merchantSubsidy.setOrderId(record.getOrderId()); + merchantSubsidy.setOrderId(order.getId()); merchantSubsidy.setOrderType(EnumOrderType.MICROPAY.getCode()); WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectById(order.getProductId()); merchantSubsidy.setMerchantId(wxMerchantBUser.getMerchantId()); @@ -1097,16 +1165,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } - @Override - @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void handlePayOrderFail(WxPayOrder record, int status) { - // 判断支付状态 - if (record.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_WAIT.getCode())) { - logger.error("pay handle, payOrder " + record.getPayOrderNo() + - "is complete, orderId : " + record.getOrderId()); - return; - } - WxOrder order = wxOrderMapper.selectById(record.getOrderId(),record.getTenantId()); + private void checkSingleOrder(WxOrder order,WxPayOrder record) { if (order == null) { logger.error("pay handle, order " + record.getOrderId() + " not found , payOrderid : " + record.getPayOrderNo()); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); @@ -1126,17 +1185,34 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); } } - + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void handlePayOrderFail(WxPayOrder record, int status) { + // 判断支付状态 + if (record.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_WAIT.getCode())) { + logger.error("pay handle, payOrder " + record.getPayOrderNo() + + "is complete, orderId : " + record.getOrderId()); + return; + } + + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(record.getComposeOrder()); + WxComposeOrder composeOrder = orderAdapterService.getComposeOrder(record.getOrderId(), record.getTenantId()); + List orderList = orderAdapterService.getChildOrders(composeOrder, record.getTenantId()); + for (WxOrder o : orderList) { + checkSingleOrder(o, record); + } if (record.getId() > 0) { // 有价券 if (EnumPayStatus.PAY_STATUS_FAIL.getCode() == status) { // 1. get appinfo - WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order,EnumPayWay.getEnum(record.getPayVendor())); + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,EnumPayWay.getEnum(record.getPayVendor())); // 前端支付取消, // 回调未返回,主动检查支付订单状态 try { WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - int payStatus = payServiceFactory.getPayAdapterService(record.getPayVendor()).queryPayStatusCode(record, order, appInfo, payAccount); + int payStatus = payServiceFactory.getPayAdapterService(record.getPayVendor()).queryPayStatusCode(record, appInfo, payAccount); if (payStatus!=EnumPayStatus.PAY_STATUS_SUCCESS.getCode().intValue() && payStatus!=EnumPayStatus.PAY_STATUS_WAIT.getCode().intValue()) { // 支付订单未成功,返回异常 record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_FAIL.getCode()); @@ -1173,10 +1249,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { */ } else if (record.getPayOrderStatus() == EnumPayStatus.PAY_STATUS_CANCEL.getCode()) { try { - int _count = wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL); - if (_count > 1) { - throw new MallinkException(ErrorCode.ORDER_IS_FAIL); - } + for (WxOrder o : orderList) { + wxOrderService.updateOrderStatus(o, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL); + } } catch (Exception e) { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index e3f3290ac..9a261c837 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -20,6 +20,7 @@ import com.iformall.pay.WxRefundOrderSP; import com.iformall.service.WxOrderService; import com.iformall.service.WxRefundOrderService; import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.order.OrderFactory; import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.service.refund.entity.RefundAdapterResult; import com.iformall.service.pay.service.refund.entity.RefundNotifyAdapterResult; @@ -85,24 +86,23 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { @Autowired PayServiceFactory payServiceFactory; - - - - - - private boolean isMerchantOrder(WxOrder wxOrder, Long merchantId) { if (wxOrder.getType().equals(EnumOrderType.COUPON.getCode())) { WxCoupon wxCoupon = wxCouponMapper.selectById(wxOrder.getProductId(),wxOrder.getTenantId()); if (wxCoupon != null) { - WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); - wxCouponMerchant.setProductId(wxCoupon.getId()); - wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); - if (couponMerchantList.stream().anyMatch(cm -> cm.getMerchantId().equals(merchantId))) { - return true; - } + //如券包就没有商户 + if (EnumCouponType.mustHasMerchant(wxCoupon.getType())) { + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.setProductId(wxCoupon.getId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); + if (couponMerchantList.stream().anyMatch(cm -> cm.getMerchantId().equals(merchantId))) { + return true; + } + }else { + return true; + } } } else if (wxOrder.getType().equals(EnumOrderType.MICROPAY.getCode())) { WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectById(wxOrder.getProductId()); @@ -128,7 +128,6 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { logger.error("券ID不存在:" + couponOrderId); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } - WxOrder wxOrder = wxOrderMapper.selectById(wxCouponOrder.getOrderId(),wxCouponOrder.getTenantId()); if (wxOrder == null) { logger.error("订单ID不存在:" + couponOrderId); @@ -178,7 +177,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(wxCouponOrder); payOrderQ.setCUserId(wxOrder.getCUserId()); - payOrderQ.setOrderId(wxOrder.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(wxOrder)); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); WxPayOrder payOrder = null; @@ -197,7 +196,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { if (null == payAccount) { throw new MallinkException(ErrorCode.PAY_ORDER_QUERY_ERROR.getCode(), "payAccount为空[payId:"+appInfo.getPayId()+"]"); } - int status = WxPayOrderServiceHelper.wxOrderPayStatus(payOrder, wxOrder, appInfo, payAccount); + int status = WxPayOrderServiceHelper.wxOrderPayStatus(payOrder, appInfo, payAccount); if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode() != status) { return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(),"该订单查询微信支付状态为未支付成功,无法退款。"); } @@ -223,6 +222,9 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); rOrder.setCreateDate(currentDate); rOrder.setUpdateDate(currentDate); + rOrder.setComposeOrderId(wxOrder.getComposeOrderId()); + rOrder.setComposeOrderType(wxOrder.getComposeOrderType()); + rOrder.setCouponNumber(wxOrder.getCouponNumber()); try { wxOrderMapper.insert(rOrder); } catch (Exception e) { @@ -279,7 +281,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setTransactionId(payOrder.getTransactionId()); record.setCUserId(payOrder.getCUserId()); record.setTotalFee(payOrder.getPayAmount()); - record.setRefundFee(payOrder.getPayAmount()); + record.setRefundFee(payOrder.getChildOrderShare(wxOrder.getId()).getRealPayMent()); record.setRefundTimeStart(currentDate); record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); record.setRefundVendor(payOrder.getPayVendor()); @@ -365,6 +367,9 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); rOrder.setCreateDate(currentDate); rOrder.setUpdateDate(currentDate); + rOrder.setComposeOrderId(0L); + rOrder.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); + rOrder.setCouponNumber(1); try { wxOrderMapper.insert(rOrder); } catch (Exception e) { @@ -376,7 +381,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(wxOrder); payOrderQ.setCUserId(wxOrder.getCUserId()); - payOrderQ.setOrderId(wxOrder.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(wxOrder)); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); WxPayOrder payOrder = null; @@ -598,7 +603,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(wxOrder); payOrderQ.setCUserId(wxOrder.getCUserId()); - payOrderQ.setOrderId(wxOrder.getId()); + payOrderQ.setOrderId(EnumComposeOrder.getPayOrderId(wxOrder)); //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); WxPayOrder payOrder = null; diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java index 0e479558a..740678eba 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java @@ -28,6 +28,9 @@ public class FmInsideCouponVerifyMsgServiceImpl implements MsgSendService { @Autowired private WxMerchantBUserService merchantBUserService; + @Autowired + private WxMerchantService merchantService; + @Override public void send(BaseMsg baseMsg) throws Exception{ FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)baseMsg; @@ -37,12 +40,12 @@ public class FmInsideCouponVerifyMsgServiceImpl implements MsgSendService { throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL.getCode(), "券包ID未找到" + msg.getCouponOrderId()); } - WxMerchantBUser user = merchantBUserService.getById(msg.getBUserId()); - if(user == null) { - logger.error("用户未找到: " + msg.getBUserId()); - throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "用户未找到" + msg.getBUserId()); + WxMerchant merchant = merchantService.selectById(msg.getMerchantId()); + if(merchant == null) { + logger.error("门店未找到: " + msg.getMerchantId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "门店未找到" + msg.getMerchantId()); } - couponOrderService.actionAfterVerify(couponOrder, user); + couponOrderService.actionAfterVerify(couponOrder, merchant); } } diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java index 9fa7e6af0..e3ae39ed4 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java @@ -47,10 +47,10 @@ public class SendWeappUniformMsgServiceImpl implements MsgSendService { public void send(BaseMsg baseMsg) throws Exception{ AppUniformMsg appUniformMsg = (AppUniformMsg)baseMsg; - TenantEntity tenantEntity = appUniformMsg.getTenantInfo(); - if (StringUtils.isBlank(tenantEntity.getTenantId())) { + String tenantId = appUniformMsg.getTenantId(); + if (StringUtils.isBlank(tenantId)) { WxAppinfo appinfo = appinfoMapper.findByAppId(appUniformMsg.getAppId()); - tenantEntity = appinfo.getTenantInfo(); + tenantId = appinfo.getTenantId(); } WxTemplateMsg msg = null; @@ -58,7 +58,7 @@ public class SendWeappUniformMsgServiceImpl implements MsgSendService { // 查询信息模板 WxTemplateMsg msgQ = new WxTemplateMsg(); - msgQ.updateTenantInfo(tenantEntity); + msgQ.setTenantId(tenantId); msgQ.setType(appUniformMsg.getTemplateType()); try { msg = wxTemplateMsgMapper.selectOne(new QueryWrapper(msgQ)); diff --git a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java new file mode 100644 index 000000000..17f8a2847 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java @@ -0,0 +1,72 @@ +package com.iformall.service.order; + +import java.util.List; + +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeOrder; + +public interface OrderAdapterService { + + /** + * 数据库创建组合主订单,不是wxOrder.单个的模式不用创建 + * @return + */ + WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay); + + /** + * 获取支付时商品名称,供服务商API使用 + * @param lastCoupon + * @return + */ + String getPayProductName(WxCoupon lastCoupon); + + /** + * 是否是一个数量一个订单。一个产品肯定是一个订单 + * @return + */ + boolean isOneNumberOneOrder(); + + /** + * 查询每一个订单的产品的真实支付价格 + * @param coupon + * @return + */ + WxComposeChildOrderPrice getChildCouponOrderPrice(OrderComposeSaveDto orderdto,WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber); + + /** + * 计算每一个子订单的补贴 + * @return + */ + Integer calcuteChildOrderSubsidy(WxCoupon coupon); + + /** + * 查询订单信息,单个模式查询WxOrder + * @param mainOrderId + * @param tenantEntity + * @return + */ + WxComposeOrder getComposeOrder(Long mainOrderId,String tenantId); + + /** + * 查询子订单 + * @return + */ + List getChildOrders(WxComposeOrder composeOrder, String tenantId); + + /** + * 更新子订单cUserId + * @param orderList + * @param cUserId + */ + void updateChildOrdersCUserId(WxComposeOrder composeOrder,List orderList,Long cUserId); + + /** + * 支付成功后,对订单进行附加的操作。 + * @param order + * @param record + */ + void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder); +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java b/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java new file mode 100644 index 000000000..65e9326cb --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java @@ -0,0 +1,41 @@ +package com.iformall.service.order; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.iformall.enums.EnumComposeOrder; +import com.iformall.service.order.impl.SingleOrderAdapterService; +import com.iformall.service.order.impl.batch.CouponPackageOrderAdapterService; +import com.iformall.service.order.impl.batch.MulityNumberOneOrderBatchOrderAdapterService; +import com.iformall.service.order.impl.batch.OneNumberOneOrderBatchOrderAdapterService; + +@Service +public class OrderFactory { + + @Autowired + OneNumberOneOrderBatchOrderAdapterService oneNumberOneOrderBatchOrderAdapterService; + + @Autowired + MulityNumberOneOrderBatchOrderAdapterService mulityNumberOneOrderBatchOrderAdapterService; + + @Autowired + SingleOrderAdapterService singleOrderAdapterService; + + @Autowired + CouponPackageOrderAdapterService couponPackageOrderAdapterService; + + public OrderAdapterService getOrderAdapterService(Integer composeOrderType) { + if (composeOrderType.intValue() == EnumComposeOrder.SINGLE.getCode().intValue()) { + return singleOrderAdapterService; + }else if (composeOrderType.intValue() == EnumComposeOrder.ONE_NUMBER_ORDER_BATCH.getCode().intValue()) { + return oneNumberOneOrderBatchOrderAdapterService; + }else if (composeOrderType.intValue() == EnumComposeOrder.PACKAGECOUPON.getCode().intValue()) { + return couponPackageOrderAdapterService; + }else if (composeOrderType.intValue() == EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH.getCode().intValue()) { + return mulityNumberOneOrderBatchOrderAdapterService; + } + return null; + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java new file mode 100644 index 000000000..89d13e080 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java @@ -0,0 +1,21 @@ +package com.iformall.service.order.entity; + +import lombok.Data; + +@Data +public class WxComposeChildOrderPrice { + + public WxComposeChildOrderPrice(Integer productSinglePrice,Integer productNumber,Integer freightPrice, Long productId) { + this.productSinglePrice = productSinglePrice; + this.productNumber = productNumber; + this.freightPrice = freightPrice; + this.productId = productId; + this.realPayMent = productSinglePrice*productNumber+freightPrice; + } + + private Integer realPayMent;//真实支付价格 + private Integer productSinglePrice;//产品单价 + private Integer productNumber;//产品数量 + private Integer freightPrice;//运费 + private Long productId;//产品编号 +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java new file mode 100644 index 000000000..9b8af6eff --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java @@ -0,0 +1,24 @@ +package com.iformall.service.order.entity; + +import lombok.Data; + +/** + * 子订单分账信息 + * @author alascor + * + */ +@Data +public class WxComposeChildOrderShare { + + public WxComposeChildOrderShare(Integer realPayMent,Integer shareAmount,Integer rateAmount) { + this.realPayMent = realPayMent; + this.shareAmount = shareAmount; + this.rateAmount = rateAmount; + } + + private Integer realPayMent; + + private Integer shareAmount; + + private Integer rateAmount; +} 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 new file mode 100644 index 000000000..2ef5c7753 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java @@ -0,0 +1,29 @@ +package com.iformall.service.order.entity; + +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.base.TenantEntity; + +import lombok.Data; + +@Data +public class WxComposeOrder extends TenantEntity{ + + public WxComposeOrder(Long mainOrderId,Integer composeOrderType,Integer payment) { + this.mainOrderId = mainOrderId; + this.composeOrderType = composeOrderType; + this.payment = payment; + } + + private Long mainOrderId; + + private Integer composeOrderType; + + private Integer payment; + + private String productName;//支付时调用服务商接口使用 + + private WxOrder singleOrder;//单个模式时不用重复查询 + + private Object mainOrder;//真正的主订单对象,批量下单时才有 + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java new file mode 100644 index 000000000..5aafceb07 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java @@ -0,0 +1,95 @@ +package com.iformall.service.order.impl; + +import java.util.ArrayList; +import java.util.List; + +import com.iformall.domain.po.*; +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.domain.dto.OrderComposeSaveDto; +import com.iformall.enums.EnumComposeOrder; +import com.iformall.enums.EnumOrderShopingType; +import com.iformall.enums.EnumPayWay; +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.util.OrderHelper; + +/** + * 购物车批量下单 + * @author alascor + * + */ +@Service +public class SingleOrderAdapterService implements OrderAdapterService { + + @Autowired + WxOrderMapper wxOrderMapper; + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay) { + return new WxComposeOrder(0L, EnumComposeOrder.SINGLE.getCode(),0); + } + + @Override + public boolean isOneNumberOneOrder() { + return true; + } + + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + 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 getChildOrders(WxComposeOrder composeOrder, String tenantId) { + List childOrders = new ArrayList(); + childOrders.add(composeOrder.getSingleOrder()); + return childOrders; + } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List orderList, Long cUserId) { + WxOrder order = composeOrder.getSingleOrder(); + order.setCUserId(cUserId); + wxOrderMapper.updateCUserId(order); + } + + @Override + public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { + return coupon.getSubsidyNum(); + } + + @Override + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { + } + + @Override + public String getPayProductName(WxCoupon lastCoupon) { + return lastCoupon.getTitle(); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java new file mode 100644 index 000000000..95413cd6b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java @@ -0,0 +1,128 @@ +package com.iformall.service.order.impl.batch; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.iformall.mapper.WxCouponMapper; +import com.iformall.mapper.WxCouponOrderMapper; +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.domain.po.WxBatchOrder; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.base.TenantEntity; +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.WxOrderService; +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.util.OrderHelper; + +/** + * 购物车批量下单 + * @author alascor + * + */ +public abstract class BaseBatchOrderAdapterService implements OrderAdapterService { + + @Autowired + WxBatchOrderMapper wxBatchOrderMapper; + @Autowired + WxOrderMapper wxOrderMapper; + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxCouponMapper wxCouponMapper; + @Autowired + WxOrderService wxOrderService; + + + @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()); + } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + protected WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay,EnumComposeOrder composeOrderType) { + WxBatchOrder order =new WxBatchOrder(); + final IdWorker idWorker = IdWorker.get(); + order.setId(idWorker.nextId()); + order.setCUserId(user.getId()); + int payment = 0; + for (OrderComposeSaveDto ocsd : orderSave) { + boolean isPress = ocsd.getSignleOrder().isPressOrder(); + WxComposeChildOrderPrice price = getChildCouponOrderPrice(ocsd,ocsd.getWxCoupon(), isPress, ocsd.getSignleOrder().getOrderGroupId(), ocsd.getCount()); + payment = payment+price.getRealPayMent(); + + } + order.setPayment(payment); + order.setCreateDate(new Date()); + wxBatchOrderMapper.insert(order); + return new WxComposeOrder(order.getId(),composeOrderType.getCode(),payment); + } + + protected WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId,EnumComposeOrder composeOrderType) { + WxBatchOrder order = wxBatchOrderMapper.selectById(mainOrderId, tenantId); + WxComposeOrder corder = new WxComposeOrder(order.getId(),composeOrderType.getCode(),order.getPayment()); + corder.updateTenantInfo(order); + corder.setMainOrder(order); + return corder; + } + + protected List getChildOrders(WxComposeOrder composeOrder, String tenantId,EnumComposeOrder composeOrderType) { + WxOrder orderq = new WxOrder(); + orderq.setComposeOrderId(composeOrder.getMainOrderId()); + orderq.setComposeOrderType(composeOrderType.getCode()); + orderq.setTenantId(tenantId); + List orderList = wxOrderMapper.findList(orderq); + return orderList; + } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List orderList, Long cUserId) { + if (null != cUserId) { + WxBatchOrder order = (WxBatchOrder) composeOrder.getMainOrder(); + order.setCUserId(cUserId); + wxBatchOrderMapper.updateCUserId(order); + + if (null != orderList) { + List ids = new ArrayList(); + for (WxOrder o : orderList) { + ids.add(o.getId()); + } + if (ids.size() > 0 ) { + WxOrder updateOrders = new WxOrder(); + updateOrders.setIds(ids); + updateOrders.setCUserId(cUserId); + updateOrders.updateTenantInfo(order); + wxOrderMapper.updateCUserId(updateOrders); + } + } + } + + } + + + + @Override + public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { + return coupon.getSubsidyNum(); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java new file mode 100644 index 000000000..95fbe28f2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java @@ -0,0 +1,68 @@ +package com.iformall.service.order.impl.batch; + +import java.util.Date; +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.enums.*; +import com.iformall.exception.MallinkException; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.service.order.entity.WxComposeOrder; +/** + * 券包批量下单 + * @author alascor + * + */ +@Service +public class CouponPackageOrderAdapterService extends BaseBatchOrderAdapterService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay) { + return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.PACKAGECOUPON); + } + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + return super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.PACKAGECOUPON); + } + + @Override + public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.PACKAGECOUPON); + } + + @Override + public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { + return coupon.getSubsidyNum(); + } + + @Override + public boolean isOneNumberOneOrder() { + return true; + } + + @Override + @Async + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = {Exception.class}) + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { + + } + + @Override + public String getPayProductName(WxCoupon lastCoupon) { + return "[券包]"+lastCoupon.getTitle(); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java new file mode 100644 index 000000000..afe134bd5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java @@ -0,0 +1,52 @@ +package com.iformall.service.order.impl.batch; + + +import java.util.List; + +import com.iformall.domain.po.*; +import org.springframework.stereotype.Service; + +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.enums.EnumComposeOrder; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; +/** + * 购物车批量下单 + * @author alascor + * + */ +@Service +public class MulityNumberOneOrderBatchOrderAdapterService extends BaseBatchOrderAdapterService { + + + @Override + public boolean isOneNumberOneOrder() { + return false; + } + + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user, List orderSave, + EnumPayWay payWay) { + return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); + } + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + return super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); + } + + @Override + public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); + } + + @Override + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { + } + + @Override + public String getPayProductName(WxCoupon lastCoupon) { + return "批量支付商品"; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java new file mode 100644 index 000000000..7ef91fe6e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java @@ -0,0 +1,52 @@ +package com.iformall.service.order.impl.batch; + +import java.util.List; + +import com.iformall.domain.po.*; +import org.springframework.stereotype.Service; + +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.enums.EnumComposeOrder; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; + +/** + * 购物车批量下单 + * @author alascor + * + */ +@Service +public class OneNumberOneOrderBatchOrderAdapterService extends BaseBatchOrderAdapterService { + + @Override + public boolean isOneNumberOneOrder() { + return true; + } + + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user, List orderSave, + EnumPayWay payWay) { + return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); + } + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + return super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); + } + + @Override + public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); + } + + @Override + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { + + } + + @Override + public String getPayProductName(WxCoupon lastCoupon) { + return "批量支付商品"; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java b/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java new file mode 100644 index 000000000..878c774e8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java @@ -0,0 +1,63 @@ +package com.iformall.service.order.util; + +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxPayAccount; +import com.iformall.enums.EnumCouponType; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.utils.PayUtils; + +public class OrderHelper { + + /** + * 砍价初始金额是price, 砍价完成会更新成salePrice + * + * @param coupon + * @param isPress + * @param orderGroupId + * @return + */ + public static int getCouponPerPayment(WxCoupon coupon,boolean isPress,Long orderGroupId) { + // 4.1 券价格 + int payment = coupon.getSalePrice(); + if (isPress || coupon.getType().equals(EnumCouponType.COUPON_PRESS.getCode())) { + // 砍价券 初始是全价即面额 + payment = coupon.getPrice(); + } + if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { + if (orderGroupId == null) { + // 拼团券 初始是全价即面额 + payment = coupon.getPrice(); + } + } + return payment; + } + + public static Integer getOrderStatusWxCoupon(WxCoupon coupon,Long orderGroupId) { + Integer orderStatus = EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode(); + if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { + if (orderGroupId == null) { + // 拼团券 初始是全价即面额 + } else { + orderStatus = EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode(); + } + } + return orderStatus; + } + + //分账金额,扣掉商场设置的手续费率 + public static int getMallCharge(Integer payment,WxPayAccount payAccount) { + int iChargeFee = PayUtils.getPayRate(payment, payAccount.getRate(), false); + return iChargeFee; + } + + //费率差,微信、支付宝交易的费率. iChargeFee:商场扣掉的手续费 + public static Integer getRateAmount(Integer payment,int mallCharge, WxPayAccount payAccount) { + if(payAccount.getRealRate() != null) { + int iRealChargeFee = PayUtils.getPayRate(payment, payAccount.getRealRate(), true); + if(mallCharge > iRealChargeFee) { + return mallCharge - iRealChargeFee; + } + } + return null; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java b/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java index e9584bb40..6e660c452 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java @@ -78,6 +78,7 @@ public class PayServiceFactory { shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_TRADE.getCode(), wxShareService); shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_PASSWD.getCode(), wxShareService); shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT.getCode(), wxShareService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST.getCode(), wxShareService); } return shareMap; } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/PayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/PayAdapterService.java index 989653a78..ba31e3d9b 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/PayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/PayAdapterService.java @@ -5,10 +5,12 @@ import java.util.Date; import java.util.Map; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumPayShare; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; @@ -27,7 +29,7 @@ public interface PayAdapterService { * @return * @throws Exception */ - public PayAdapterResult pay(WxPayAccount payAccount,WxOrder order,WxPayOrder record ,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception; + public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record ,WxComposeOrder composeOrder,String productName,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception; /** * 查询支付结果,调用对应端的API查询支付结果 @@ -38,7 +40,7 @@ public interface PayAdapterService { * @return * @throws Exception */ - public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount) throws Exception; + public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord,WxAppinfo appInfo,WxPayAccount payAccount) throws Exception; /** * 根据返回结果对象解析出支付状态 @@ -58,7 +60,7 @@ public interface PayAdapterService { * @return * @throws Exception */ - public int queryPayStatusCode(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount) throws Exception; + public int queryPayStatusCode(WxPayOrder oldRecord,WxAppinfo appInfo,WxPayAccount payAccount) throws Exception; /** * API关闭订单 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java index 5dfb38dbb..f11e1f44a 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java @@ -16,6 +16,7 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.PosCouponOrderVerify; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; @@ -50,9 +51,9 @@ import me.chanjar.weixin.open.api.WxOpenService; @Slf4j public class BaseWxPayAdapterService { - protected PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount) + protected PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - Map retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, order, appInfo, payAccount); + Map retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, appInfo, payAccount); int code = WxPayOrderServiceHelper.getPayStatusFromMap(retMap,oldRecord.getPayOrderNo()); String msg = WxPayOrderServiceHelper.getPayStatusMsg(retMap, oldRecord.getPayOrderNo()); PayQueryAdapterResult result = new PayQueryAdapterResult(code, msg, retMap,retMap.get("transaction_id"),retMap.get("time_end")); @@ -63,9 +64,9 @@ public class BaseWxPayAdapterService { return WxPayOrderServiceHelper.getPayStatusFromMap((Map) statusObject.getData(),orderOutNo); } - protected int queryPayStatusCode(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount) + protected int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, order, appInfo, payAccount); + return WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, appInfo, payAccount); } JSONObject errorMapClose = JSON.parseObject("{" + diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/h5/WxH5PayService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/h5/WxH5PayService.java index a61a5903c..ac81dfbbd 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/h5/WxH5PayService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/h5/WxH5PayService.java @@ -7,10 +7,12 @@ import java.util.Map; import org.springframework.stereotype.Service; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumPayShare; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; @@ -21,16 +23,16 @@ import com.iformall.service.pay.service.pay.wx.BaseWxPayAdapterService; public class WxH5PayService extends BaseWxPayAdapterService implements CDrivingPayService{ @Override - public PayAdapterResult pay(WxPayAccount payAccount, WxOrder order, WxPayOrder record, EnumPayShare isShare, + public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record,WxComposeOrder composeOrder,String productName, EnumPayShare isShare, WxAppinfo appInfo, Date currentDate, PayExtraParam params) throws Exception { // TODO Auto-generated method stub return null; } @Override - public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, + public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return super.queryPayStatus(oldRecord, order, appInfo, payAccount); + return super.queryPayStatus(oldRecord, appInfo, payAccount); } @Override @@ -39,9 +41,9 @@ public class WxH5PayService extends BaseWxPayAdapterService implements CDriving } @Override - public int queryPayStatusCode(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount) + public int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount); + return super.queryPayStatusCode(oldRecord, appInfo, payAccount); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/appPay/WxMiniAppPayAdapterService.java index 82f4985f5..398371659 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -13,6 +13,7 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; @@ -25,6 +26,7 @@ import com.iformall.pay.WxPay; import com.iformall.pay.WxPayOrderP; import com.iformall.pay.WxPayOrderSP; import com.iformall.pay.WxPayment; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; @@ -59,7 +61,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen "\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}"); - private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount, WxOrder order, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception { + private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception { // 统一下单 普通商户模式 String noncestr = Utility.generate32UUID(); WxPayOrderP wxPayOrderP = new WxPayOrderP(); @@ -67,14 +69,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen wxPayOrderP.setAppid(appId); wxPayOrderP.setMch_id(payAccount.getMchId()); wxPayOrderP.setNonce_str(noncestr); - wxPayOrderP.setBody(order.getDetail()); + wxPayOrderP.setBody(productName); wxPayOrderP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderP.setTotal_fee(order.getPayment()); + wxPayOrderP.setTotal_fee(composeOrder.getPayment()); wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP - wxPayOrderP.setGoods_tag(String.valueOf(order.getProductId())); + wxPayOrderP.setGoods_tag(productName); wxPayOrderP.setNotify_url(payAccount.getPayNotifyUrl()); wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderP.setProduct_id(String.valueOf(order.getId())); // 订单ID + wxPayOrderP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // 订单ID wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); @@ -133,7 +135,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen - private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxOrder order, WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { + private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { String noncestr = Utility.generate32UUID(); WxPayOrderSP wxPayOrderSP = new WxPayOrderSP(); wxPayOrderSP.setSub_openid(openId); @@ -142,14 +144,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen wxPayOrderSP.setSub_appid(appId); wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); wxPayOrderSP.setNonce_str(noncestr); - wxPayOrderSP.setBody(order.getDetail()); + wxPayOrderSP.setBody(productName); wxPayOrderSP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderSP.setTotal_fee(order.getPayment().toString()); + wxPayOrderSP.setTotal_fee(composeOrder.getPayment().toString()); wxPayOrderSP.setSpbill_create_ip(record.getIp()); // 终端IP - wxPayOrderSP.setGoods_tag(String.valueOf(order.getProductId())); // 券ID + wxPayOrderSP.setGoods_tag(productName); // 券ID wxPayOrderSP.setNotify_url(payAccount.getPayNotifyUrl()); wxPayOrderSP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderSP.setProduct_id(String.valueOf(order.getProductId())); // 券ID + wxPayOrderSP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // wxPayOrderSP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); @@ -212,7 +214,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen @Override - public PayAdapterResult pay(WxPayAccount payAccount, WxOrder order, WxPayOrder record,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception { + public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record,WxComposeOrder composeOrder,String productName,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception { if (null == params ) { throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"openId为空"); } @@ -222,7 +224,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen } //普通商户模式 if (payAccount.getType() == EnumPayMode.MCH.getCode()) { - WxPayOrderP wxPayOrderP = generateWxPayOrderP(payAccount,order,record,openId,appInfo.getAppId(),currentDate); + WxPayOrderP wxPayOrderP = generateWxPayOrderP(payAccount,composeOrder,productName,record,openId,appInfo.getAppId(),currentDate); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); @@ -230,7 +232,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen } else { // 统一下单 // 服务商模式 - WxPayOrderSP wxPayOrderSP = generateWxPayOrderSP(payAccount,order,record,appInfo,openId,appInfo.getAppId(),currentDate,isShare); + WxPayOrderSP wxPayOrderSP = generateWxPayOrderSP(payAccount,composeOrder,productName,record,appInfo,openId,appInfo.getAppId(),currentDate,isShare); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderSP)); log.info("pay order, wechat pushOrder, " + wxPayOrderSP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); @@ -239,9 +241,9 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen } @Override - public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, + public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return super.queryPayStatus(oldRecord, order, appInfo, payAccount); + return super.queryPayStatus(oldRecord,appInfo, payAccount); } @Override @@ -250,9 +252,9 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen } @Override - public int queryPayStatusCode(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount) + public int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount); + return super.queryPayStatusCode(oldRecord, appInfo, payAccount); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/maPay/WxMiniMaPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/maPay/WxMiniMaPayAdapterService.java index fec927337..828cd435e 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/maPay/WxMiniMaPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/maPay/WxMiniMaPayAdapterService.java @@ -12,6 +12,7 @@ import com.iformall.common.IdWorker; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxMall; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; @@ -29,6 +30,7 @@ import com.iformall.pay.WxMicroPayOrderSP; import com.iformall.pay.WxPay; import com.iformall.pay.WxPayment; import com.iformall.service.WxCUserService; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CPassivePayService; import com.iformall.service.pay.service.pay.entity.CreateUser; @@ -45,7 +47,7 @@ import me.chanjar.weixin.common.error.WxErrorException; @Service public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implements CPassivePayService{ - private WxMicroPayOrderP generateWxMicroPayOrderP(WxPayAccount payAccount, WxOrder order, WxPayOrder record, EnumPayShare isShare, + private WxMicroPayOrderP generateWxMicroPayOrderP(WxPayAccount payAccount, WxComposeOrder composeOrder, String productName,WxPayOrder record, EnumPayShare isShare, WxAppinfo appInfo, Date currentDate,String bAppId,String bUserPhone) throws Exception { String noncestr = Utility.generate32UUID(); WxMicroPayOrderP wxPayOrderP = new WxMicroPayOrderP(); @@ -53,7 +55,7 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement wxPayOrderP.setMch_id(payAccount.getMchId()); wxPayOrderP.setDevice_info(bUserPhone); wxPayOrderP.setNonce_str(noncestr); - wxPayOrderP.setBody(order.getDetail()); + wxPayOrderP.setBody(productName); wxPayOrderP.setOut_trade_no(record.getPayOrderNo()); wxPayOrderP.setTotal_fee(record.getPayAmount()); wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP @@ -99,7 +101,7 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement } - private WxMicroPayOrderSP generateWxMicroPayOrderSP(WxPayAccount payAccount, WxOrder order, WxPayOrder record, EnumPayShare isShare, + private WxMicroPayOrderSP generateWxMicroPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder, String productName,WxPayOrder record, EnumPayShare isShare, WxAppinfo appInfo, Date currentDate,String bUserPhone) throws Exception { String noncestr = Utility.generate32UUID(); WxMicroPayOrderSP wxPayOrderSP = new WxMicroPayOrderSP(); @@ -109,7 +111,7 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); wxPayOrderSP.setDevice_info(bUserPhone); wxPayOrderSP.setNonce_str(noncestr); - wxPayOrderSP.setBody(order.getDetail()); + wxPayOrderSP.setBody(productName); wxPayOrderSP.setOut_trade_no(record.getPayOrderNo()); wxPayOrderSP.setTotal_fee(record.getPayAmount()); wxPayOrderSP.setSpbill_create_ip(record.getIp()); @@ -161,7 +163,7 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement @Override - public PayAdapterResult pay(WxPayAccount payAccount, WxOrder order, WxPayOrder record, EnumPayShare isShare, + public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record, WxComposeOrder composeOrder,String productName, EnumPayShare isShare, WxAppinfo appInfo, Date currentDate, PayExtraParam params) throws Exception { if (payAccount.getType() == EnumPayMode.MCH.getCode()) { // 扫码支付 普通商户模式 @@ -174,12 +176,12 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"bUserPhone 不能为空"); } - WxMicroPayOrderP wxPayOrderP = generateWxMicroPayOrderP(payAccount, order, record, isShare, appInfo, currentDate, bAppId, bUserPhone); + WxMicroPayOrderP wxPayOrderP = generateWxMicroPayOrderP(payAccount, composeOrder,productName,record, isShare, appInfo, currentDate, bAppId, bUserPhone); String response = WxPay.micropay(BeanUtils.toStringMap(wxPayOrderP)); log.info("pay order, wechat micropay, " + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); returnMap.put("payOrderId", record.getPayOrderNo()); - returnMap.put("orderId", String.valueOf(order.getId())); + returnMap.put("orderId", String.valueOf(composeOrder.getMainOrderId())); return getWxMicroPayOrderPResult(returnMap, record, payAccount); } else { // 统一下单 // 服务商模式 @@ -187,12 +189,12 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement if (StringUtils.isBlank(bUserPhone)) { throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"bUserPhone 不能为空"); } - WxMicroPayOrderSP wxPayOrderSP = generateWxMicroPayOrderSP(payAccount, order, record, isShare, appInfo, currentDate, bUserPhone); + WxMicroPayOrderSP wxPayOrderSP = generateWxMicroPayOrderSP(payAccount, composeOrder,productName,record, isShare, appInfo, currentDate, bUserPhone); String response = WxPay.micropay(BeanUtils.toStringMap(wxPayOrderSP)); log.info("pay order, wechat micropay, " + wxPayOrderSP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); returnMap.put("payOrderId", record.getPayOrderNo()); - returnMap.put("orderId", String.valueOf(order.getId())); + returnMap.put("orderId", String.valueOf(composeOrder.getMainOrderId())); return getWxMicroPayOrderSPResutl(returnMap, record, payAccount); } } @@ -226,9 +228,9 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement } @Override - public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, + public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return super.queryPayStatus(oldRecord, order, appInfo, payAccount); + return super.queryPayStatus(oldRecord,appInfo, payAccount); } @Override @@ -237,9 +239,9 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement } @Override - public int queryPayStatusCode(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount) + public int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount); + return super.queryPayStatusCode(oldRecord, appInfo, payAccount); } @Override diff --git a/mallinkService/src/main/resources/mapper/UserBasicInfoAddressMapper.xml b/mallinkService/src/main/resources/mapper/UserBasicInfoAddressMapper.xml new file mode 100644 index 000000000..9fb019865 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/UserBasicInfoAddressMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`,`final_tenant_id`,`user_id`,`consignee`,`country`,`province`,`city`,`district`,`region`,`address`,`zipcode`,`mobile`, + `create_date`,`update_date`,`is_default`,`mark` + + + + where `is_del` = 0 + + + and `id` = #{id} + + + + and `final_tenant_id` = #{finalTenantId} + + + + and `user_id` = #{userId} + + order by `is_default` desc,`update_date` desc + + + + + + + update user_basic_info_address set is_del = 1, update_date=now() where id = #{id} + + + + update user_basic_info_address + set is_default = 1, update_date=now() + where id = #{id} + + + + update user_basic_info_address + set is_default = 0, update_date=now() + where user_id = #{userId} + and id != #{id} + + + + \ No newline at end of file diff --git a/mallinkService/src/main/resources/mapper/WxBatchOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxBatchOrderMapper.xml new file mode 100644 index 000000000..ce3973f82 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxBatchOrderMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`,`c_user_id`,`payment`,`create_date`,`update_date` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `c_user_id` = #{cUserId} + + + + and `payment` = #{payment} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + update wx_batch_order set `c_user_id` = #{cUserId} where id =#{id} and tenant_id=#{tenantId} + + + diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index 5351d42de..71225bccc 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -12,6 +12,7 @@ + @@ -64,6 +65,7 @@ + @@ -105,11 +107,11 @@ distinct c.`id`,c.`tenant_id`,c.`parent_tenant_id`,c.`type`,c.`cover_img`,c.`cover_picture`,c.`detail_picture`, - c.`title`,c.`sub_title`,c.`sale_price`,c.`use_price`,c.`use_limit_rule`,c.`use_limit_quantity`,c.`send_type`, + c.`title`,c.`sub_title`,c.`sale_price`,c.`freight_price`,c.`use_price`,c.`use_limit_rule`,c.`use_limit_quantity`,c.`send_type`, c.`valid_type`,c.`valid_start_date`,c.`valid_end_date`,c.pick_start_date,c.pick_end_date,c.`valid_days`,c.`detail`,c.`price`,c.tail_price,c.orig_price,c.`unit`,c.`remain_inventory`,c.`inventory`, c.`remark`,c.`status`,c.`create_date`,c.`update_date`,c.`business`,c.`sub_business`,c.`support_transfer`,c.`subsidy_num`,c.`subsidy_type`, c.`press_limit_num`, c.`press_limit_hours`, c.`auto_refund`,c.`credit_price`,c.`credit_refund`,c.`put_apply_status`,c.`stock_apply_status`,c.`cancle_apply_status`, - c.`conditions`,c.approval_type,c.content_type,c.source_type,c.password_support + c.`conditions`,c.approval_type,c.content_type,c.source_type,c.password_support,c.gift_list @@ -285,6 +287,10 @@ and `source_type` = #{sourceType} + + and JSON_CONTAINS(gift_list,json_array(#{giftList})) + + and id in @@ -355,7 +361,8 @@ - and ( c.`type` < 7 or c.`type` = 10 ) + + and c.`type` in (1,2,3,4,5,6,10,11,12) @@ -557,6 +564,10 @@ --> + + and JSON_CONTAINS(c.gift_list,json_array(#{giftList})) + + and c.id in @@ -571,6 +582,13 @@ + + and c.send_type in + + #{typesItem} + + + order by ${sortColumns} @@ -605,6 +623,7 @@ + @@ -637,6 +656,8 @@ + + + @@ -713,16 +735,26 @@ where status = 0 and tenant_id =#{tenantId} and valid_type = 1 and valid_end_date < now() - + update wx_coupon c SET c.status = 1, c.update_date = now() - where c.status = 0 and c.tenant_id =#{tenantId} and - (select count(*) from wx_coupon_merchant cm, wx_merchant m + where c.status = 0 and c.tenant_id =#{tenantId} + + and c.type != 12 + + and c.id not in + + #{idItem} + + + + + select ct.id as id,wc.id as couponId, - wc.tenant_id,wc.parent_tenant_id,wc.`type`,wc.`cover_img`,wc.`cover_picture`,wc.`detail_picture`,wc.`title`,wc.`sub_title`,wc.`sale_price`,wc.`use_price`,wc.`use_limit_rule`,wc.`use_limit_quantity`,wc.`send_type`, + wc.tenant_id,wc.parent_tenant_id,wc.`type`,wc.`cover_img`,wc.`cover_picture`,wc.`detail_picture`,wc.`title`,wc.`sub_title`,wc.`sale_price`,wc.`freight_price`,wc.`use_price`,wc.`use_limit_rule`,wc.`use_limit_quantity`,wc.`send_type`, wc.`valid_type`,wc.`valid_start_date`,wc.`valid_end_date`,wc.pick_start_date,wc.pick_end_date,wc.`valid_days`,wc.`detail`,wc.`price`,wc.tail_price,wc.orig_price,wc.`unit`,wc.`remain_inventory`,wc.`inventory`, wc.`remark`,wc.`status`,wc.`create_date`,wc.`update_date`,wc.`business`,wc.`sub_business`,wc.`support_transfer`,wc.`subsidy_num`,wc.`subsidy_type`, wc.`press_limit_num`, wc.`press_limit_hours`, wc.`auto_refund`,wc.`credit_price`,wc.`credit_refund`,wc.`conditions`, diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index a5cc0da3b..61536355e 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -22,10 +22,22 @@ + + + + + + + + + + - `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`coupon_type`,`c_user_id`,`owner_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`, `auto_refund`, `verify_type`,`verify_remark`,`pay_vendor`,`send_merchant_id`,`send_merchant_user_id` + `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`coupon_type`,`c_user_id`,`owner_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`, `auto_refund`, + `verify_type`,`verify_remark`,`pay_vendor`,`send_merchant_id`,`send_merchant_user_id`,`compose_order_type`,`compose_order_id`,`parent_coupon_order_id`,`coupon_number`, + `freight_price`,`shipping_type`,`shipping_address`,`shipping_status`,`delivery_info` @@ -101,6 +113,26 @@ and `send_merchant_user_id` = #{sendMerchantUserId} + + + and `compose_order_type` = #{composeOrderType} + + + + and `compose_order_id` = #{composeOrderId} + + + + and `parent_coupon_order_id` = #{parentCouponOrderId} + + + + and `shipping_type` = #{shippingType} + + + + and `shipping_status` = #{shippingStatus} + and id in @@ -129,6 +161,9 @@ ,`verify_remark` = #{verifyRemark} + + ,`shipping_status` = #{shippingStatus} + where id=#{id} and `b_user_id` is null and `tenant_id` = #{tenantId} @@ -147,6 +182,9 @@ ,`verify_remark` = #{verifyRemark} + + ,`shipping_status` = #{shippingStatus} + where id=#{id} and `tenant_id` = #{tenantId} @@ -171,6 +209,9 @@ ,`verify_remark` = #{verifyRemark} + + ,`shipping_status` = #{shippingStatus} + where 1=1 and `tenant_id` = #{tenantId} @@ -483,6 +524,29 @@ + + - + + @@ -715,7 +785,13 @@ - + + + + + + + @@ -761,6 +837,12 @@ + + + + + + @@ -803,7 +885,9 @@ --> co.id,co.tenant_id,co.parent_tenant_id,co.coupon_id,co.coupon_type,co.expired_time,co.coupon_order_status,co.order_id, - co.create_date,co.update_date,co.coupon_price, co.verify_type, co.verify_remark,co.pay_vendor,c.title,c.sale_price,c.use_price,c.price, + co.create_date,co.update_date,co.coupon_price, co.verify_type, co.verify_remark,co.pay_vendor, + co.`freight_price`,co.`shipping_type`,co.`shipping_address`,co.`shipping_status`,co.`delivery_info`, + c.title,c.sale_price,c.use_price,c.price, co.send_merchant_id,c.unit,c.auto_refund,c.business,c.subsidy_type,c.source_type,ms.subsidy subsidy_num, (CASE WHEN couc.mc = 1 THEN m1.name ELSE '[多商户通用]' END) AS merchant_name, (CASE WHEN couc.mc = 1 THEN m1.id ELSE 0 END) AS merchant_id, @@ -813,6 +897,7 @@ co.id,co.tenant_id,co.parent_tenant_id,co.coupon_id,co.coupon_type,co.c_user_id,co.owner_id,co.b_user_id, co.order_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price,co.verify_type,co.verify_remark, co.pay_vendor, + co.`freight_price`,co.`shipping_type`,co.`shipping_address`,co.`shipping_status`,co.`delivery_info`, c.type,c.title,c.sale_price,c.use_price,c.price,c.unit,c.auto_refund,c.business,c.subsidy_type,ms.subsidy subsidy_num, bu.name, bu.phone as bphone, cu.phone, @@ -836,7 +921,7 @@ RIGHT JOIN ( SELECT co.id,co.tenant_id,co.parent_tenant_id,co.coupon_id,co.c_user_id,co.b_user_id,co.order_id,co.coupon_type, co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price,co.auto_refund,co.verify_type,co.verify_remark,co.pay_vendor - ,co.send_merchant_id + ,co.send_merchant_id,co.`freight_price`,co.`shipping_type`,co.`shipping_address`,co.`shipping_status`,co.`delivery_info` FROM wx_coupon_order co WHERE 1=1 and co.`tenant_id` = #{tenantId} @@ -858,6 +943,10 @@ and co.coupon_type = #{couponType} + + and co.coupon_type != 11 + + and co.coupon_type < 100 @@ -874,6 +963,14 @@ and co.coupon_order_status = #{couponOrderStatus} + + + and co.`shipping_type` = #{shippingType} + + + + and co.`shipping_status` = #{shippingStatus} + @@ -951,6 +1048,92 @@ + + - co.id,co.tenant_id,co.parent_tenant_id,co.coupon_id,co.coupon_type,co.c_user_id,co.owner_id,co.b_user_id,co.order_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price,co.verify_type,co.verify_remark,co.pay_vendor + co.id,co.tenant_id,co.parent_tenant_id,co.coupon_id,co.coupon_type,co.c_user_id,co.owner_id,co.b_user_id, + co.order_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price,co.verify_type,co.verify_remark,co.pay_vendor, + co.`freight_price`,co.`shipping_type`,co.`shipping_address`,co.`shipping_status`,co.`delivery_info` + + @@ -356,12 +454,95 @@ and o.`parent_tenant_id` = #{parentTenantId} + + and o.`compose_order_id` = #{composeOrderId} + + + and o.`parent_order_id` = #{parentOrderId} + AND o.order_status = #{orderStatus} order by ${sortColumns} + +