diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 26e1ce68b..12a8e6e6b 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) { @@ -318,7 +348,7 @@ public class WxCouponOrderController extends BaseController { } if (couponOrder != null) { - wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, wxMerchantBUser.getId()); + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, wxMerchantBUser.getMerchantId()); } return new ResultData(couponOrder); @@ -355,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/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index a26c79bf8..7e161f7f2 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; @@ -409,4 +404,87 @@ 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); + } 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()); + } + + return new ResultData(couponOrder); + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index f5359105a..ff4a729c4 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -435,4 +435,29 @@ public class WxOrderController extends BaseController { } + @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/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java index 3268e2704..703f442cf 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -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; } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index b4bd65396..850a09594 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -224,6 +224,14 @@ public enum ErrorCode{ COUPON_MANJIAN_USE_PRICE_NO_ALLOW_(4011, "满减券金额不符合条件"), COUPON_ORDER_TYPE_NOT_SUPPORTED(4012, "券类型不支持"), + /** + * 商品 + */ + 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/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java index ef959274b..7ab4c659e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -12,6 +12,7 @@ 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 @@ -156,4 +157,7 @@ public class WxCouponOrder extends TenantEntity { @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/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/WxOrderCouponVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java index 976255e97..5862cff37 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java @@ -22,6 +22,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; @@ -111,6 +116,9 @@ public class WxOrderCouponVo extends TenantEntity { @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="运费",name="freightPrice") private Integer freightPrice; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java b/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java index 0e0c0b12f..0e35883cf 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java @@ -10,7 +10,8 @@ public enum EnumComposeOrder { SINGLE(0, "单个订单类型,如拼团,砍价"), ONE_NUMBER_ORDER_BATCH(1, "购物车式组合下单,1个数量1个订单(针对同样产品)"), MULITY_NUMBER_ORDER_BATCH(2,"购物车式组合下单,多个数量1个订单(针对同样产品)"), - PACKAGECOUPON(3,"券包订单类型") + PACKAGECOUPON(3,"券包订单类型"), + PACKAGECOUPON_SUB(4,"券包子订单类型") ; public static EnumComposeOrder getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java index 5bb47c5e0..764183525 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java @@ -14,6 +14,8 @@ public enum EnumCouponVerifyType { VERIFY_POS_INDEPENDENT(1, "POS独立核销"), VERIFY_POS_PAY(2, "POS交易核销"), + + VERIFY_C(3,"用户自主核销"), ; public static EnumCouponVerifyType 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 index 71b1ce46c..59e9c74da 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java @@ -9,6 +9,11 @@ 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,"已自提"), diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index 1fa0f4d48..1fe5eba52 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -94,4 +94,6 @@ 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 face8ae1f..6d14bab25 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java @@ -66,5 +66,6 @@ public interface WxOrderMapper extends CommonMapper { void updateOrderStatusForGroup(@Param("tenantId")String tenantId); void updateCUserId(WxOrder updateOrder); - + + List listGoodsCAsPage(WxOrder record); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 65289aeb7..eeec70312 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -57,25 +57,32 @@ public interface WxCouponOrderService { */ WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser); + /** + * 根据主键couponOrderId(券码)核销 + * C端自主核销 + * + * @param couponOrder + */ + WxCouponOrder verify(WxCouponOrder couponOrder); + /** * 核销后发送消息 */ - 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端刷卡支付发券 @@ -99,9 +106,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 @@ -221,4 +228,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 48df81196..9842d0848 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -244,4 +244,5 @@ public interface WxOrderService { ResultData composeSaveOrder(boolean allowUnPayOrder,EnumComposeOrder composeOrderType,List composeOrderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity); + PageInfo listGoodsCAsPage(WxOrder wxOrder, Integer pageNum, Integer pageSize); } 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 97207d1a0..ecbb9c2b8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -462,6 +462,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { 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) { @@ -475,12 +480,108 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { doAfterVerify(couponOrder, bUser, wxCoupon); return couponOrder; } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCouponOrder verify(WxCouponOrder couponOrder) { + + // 1. 获取券信息 + WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId()); + if (wxCoupon == null) { + 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()); + 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); + } + + // 3. 券包状态检查 + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { + logger.error("已过期: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { + logger.error("已退款: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { + logger.error("已经核销过的券: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) { + 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(cm.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(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); + } + } + } + } + int num = 0; + try { + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_C.getCode()); + 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) { + logger.error("db failed: couponOrder-" + couponOrder.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + if (num != 1) { + logger.error("核销异常:updatete num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + doAfterVerify(couponOrder, wxCoupon, cm.getMerchantId()); + this.sendInsideCouponVerifyMsg(couponOrder, couponOrder.getId(), cm.getMerchantId()); + 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()); } @@ -511,6 +612,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } + /** + * 核销停车劵增加成长值,积分 + * @param couponOrder + * @param wxCoupon + * @param cuUser + */ private void doAfterVerify(WxCouponOrder couponOrder, WxCoupon wxCoupon, WxCUserBasicInfo cuUser) { // 成长值 try { @@ -542,18 +649,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); @@ -562,7 +707,7 @@ 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); @@ -572,14 +717,14 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if (EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())) { try { // 核销分账 - shareAfterVerify(couponOrder, bUser.getMerchantId(),couponOrder.getPayVendor(),false); + shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),false); } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } }else { try { // 核销分账 - shareAfterVerify(couponOrder, bUser.getMerchantId(),couponOrder.getPayVendor(),true); + shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),true); } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } @@ -588,7 +733,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { try { // 核销补贴 - subsidyAfterVerify(couponOrder, bUser.getMerchantId()); + subsidyAfterVerify(couponOrder, merchant.getId()); } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } @@ -597,14 +742,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); } @@ -800,7 +945,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) { @@ -833,7 +978,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) { @@ -846,18 +991,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){ @@ -1607,4 +1752,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/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index fd4294b38..e117b7b83 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -2519,7 +2519,22 @@ public class WxOrderServiceImpl implements WxOrderService { } - + + @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 = ""; 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 58bff9d1f..fabc0e7f5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -981,7 +981,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) { @@ -1105,7 +1105,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) { 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/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index c79bc0199..6655b24d0 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -156,6 +156,9 @@ ,`verify_remark` = #{verifyRemark} + + ,`shipping_status` = #{shippingStatus} + where id=#{id} and `b_user_id` is null and `tenant_id` = #{tenantId} @@ -174,6 +177,9 @@ ,`verify_remark` = #{verifyRemark} + + ,`shipping_status` = #{shippingStatus} + where id=#{id} and `tenant_id` = #{tenantId} @@ -198,6 +204,9 @@ ,`verify_remark` = #{verifyRemark} + + ,`shipping_status` = #{shippingStatus} + where 1=1 and `tenant_id` = #{tenantId} @@ -900,6 +909,10 @@ and co.coupon_type = #{couponType} + + and co.coupon_type != 11 + + and co.coupon_type < 100 @@ -993,6 +1006,92 @@ + + @@ -393,6 +450,80 @@ order by ${sortColumns} + +