935090232@qq.com
2022-02-22 bbe0a2fd03063316e50cf141986bda984599bbda
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
@@ -2,8 +2,8 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.matrix.biz.bean.BizUser;
import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.system.hive.bean.SysVipInfo;
import com.matrix.system.common.init.UserCacheManager;
import com.matrix.component.tools.WxUtils;
import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
import com.matrix.core.exception.GlobleException;
@@ -55,13 +55,13 @@
    @Autowired
    private ShopOrderDetailsDao shopOrderDetailsDao;
    @Autowired
    private RedisUserLoginUtils redisUserLoginUtils;
    private UserCacheManager userCacheManager;
    @Autowired
    private ShopActivitiesSeckillRecordDao shopActivitiesSeckillRecordDao;
    @Override
    public AjaxResult createSecKillOrder(CreateSecKillDTO secKillDTO) throws Exception {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
        ShopActivitiesSeckillInfo seckillInfo = shopActivitiesSeckillInfoDao.selectById(secKillDTO.getId());
        if (seckillInfo == null) {
            return AjaxResult.buildFailInstance("秒杀不存在");
@@ -86,7 +86,7 @@
                return AjaxResult.buildFailInstance("购买数量超过最大限购数量");
            }
            int count = shopActivitiesSeckillRecordDao.selectCountSecKill(seckillInfo.getId(), bizUser.getOpenId());
            int count = shopActivitiesSeckillRecordDao.selectCountSecKill(seckillInfo.getId(), sysVipInfo.getOpenId());
            if (secKillDTO.getCount() + count > seckillInfo.getSiLimitCnt()) {
                return AjaxResult.buildFailInstance("购买数量超过最大限购数量");
            }
@@ -94,15 +94,15 @@
        secKillDTO.setPrice(seckillInfo.getSiPrice());
        secKillDTO.setGoodsId(seckillInfo.getGoodsId().intValue());
        secKillDTO.setOpenId(bizUser.getOpenId());
        secKillDTO.setOpenId(sysVipInfo.getOpenId());
        ShopOrder shopOrder = createOrder(secKillDTO);
        ShopActivitiesSeckillRecord seckillRecord = new ShopActivitiesSeckillRecord();
        seckillRecord.setOrderId(shopOrder.getId().longValue());
        seckillRecord.setSiId(seckillInfo.getId());
        seckillRecord.setUserId(bizUser.getOpenId());
        seckillRecord.setCreateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        seckillRecord.setUpdateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        seckillRecord.setUserId(sysVipInfo.getId());
        seckillRecord.setCreateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        seckillRecord.setUpdateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        seckillRecord.setCompanyId(seckillInfo.getCompanyId());
        // 同步锁
@@ -126,6 +126,7 @@
    }
    private ShopOrder createOrder(CreateSecKillDTO secKillDTO) {
        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
        ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(secKillDTO.getAddressId());
        if (shopReceiveAddress == null) {
            throw new GlobleException("请选择正确的收获地址");
@@ -172,11 +173,12 @@
        //TODO 更新库存和销量 更新库存和销量[考虑和erp库存联动]
        wxShopOrderUtil.updateProductAndSkuInfo(details);
        shopOrder.setUserId(secKillDTO.getOpenId());
        shopOrder.setUserId(secKillDTO.getId());
        shopOrder.setCreateBy("微信小程序生成");
        shopOrder.setUpdateBy("微信小程序生成");
        shopOrder.setCommodityPrice(secKillDTO.getPrice());
        shopOrder.setPurchaseQuantity(1);
        shopOrder.setCompanyId(sysVipInfo.getCompanyId());
        //购买方式
        shopOrder.setShippingMethod(secKillDTO.getShippingMethod());
        //生成订单号
@@ -201,15 +203,15 @@
        shopOrder.setPayResult(ShopOrder.ORDER_WX_STATUS_WAIT_PAY);
        //如果没有提交购买方式或配送方式不是物流
        //获取邮费
        BigDecimal postPrice = wxShopOrderService.calculationPostage(secKillDTO.getAddressId(), secKillDTO.getPrice());
        BigDecimal postPrice = wxShopOrderService.calculationPostage(secKillDTO.getPrice(),sysVipInfo.getCompanyId());
        shopOrder.setPostage(postPrice);
        BigDecimal payPrice = secKillDTO.getPrice().multiply(BigDecimal.valueOf(secKillDTO.getCount())).add(shopOrder.getPostage());
        shopOrder.setOrderMoney(payPrice);
        DiscountExplain discountExplain = new DiscountExplain();
        discountExplain.setPayPrice(payPrice);
        discountExplain.setPostage(postPrice);
        discountExplain.setActivity(BigDecimal.ZERO);
        discountExplain.setCoupon(BigDecimal.ZERO);
        discountExplain.setActivityPrice(BigDecimal.ZERO);
        discountExplain.setCouponPrice(BigDecimal.ZERO);
        discountExplain.setBillPrice(payPrice);
        Gson g = new GsonBuilder().create();
        shopOrder.setDiscountExplain(g.toJson(discountExplain));