jyy
2021-05-10 f12b519702e4c4c246238f79f95215f8cd26dea7
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
@@ -2,13 +2,11 @@
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.component.tools.WxUtils;
import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.constance.Dictionary;
@@ -91,7 +89,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult createGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) throws Exception {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        ShopActivitiesGroupPrice groupPrice = shopActivitiesGroupPriceDao.selectById(createGroupBuyDTO.getGpId());
        ShopActivitiesGroupInfo groupInfo = shopActivitiesGroupInfoDao.selectGroupInfoByActId(groupPrice.getActId());
@@ -103,7 +101,7 @@
        // 判断最大开团数量
        if (groupInfo.getGiHeadDiscount() != null && groupInfo.getGiHeadDiscount() != 0) {
            int createCnt = shopActivitiesGroupJoinDao.selectCreateGroupBuyCount(shopActivities.getId(), bizUser.getOpenId());
            int createCnt = shopActivitiesGroupJoinDao.selectCreateGroupBuyCount(shopActivities.getId(), sysVipInfo.getOpenId());
            if (createCnt > groupInfo.getGiHeadDiscount()) {
                return AjaxResult.buildFailInstance("达到最大开团数量");
            }
@@ -114,14 +112,14 @@
                return AjaxResult.buildFailInstance("达到最大限购数量");
            }
            int count = shopActivitiesGroupJoinUserDao.selectCountHasBuy(groupInfo.getId(), bizUser.getOpenId());
            int count = shopActivitiesGroupJoinUserDao.selectCountHasBuy(groupInfo.getId(), sysVipInfo.getOpenId());
            if (count + createGroupBuyDTO.getCount() > groupInfo.getGiLimitBuy()) {
                return AjaxResult.buildFailInstance("达到最大限购数量");
            }
        }
        // 判断该用户在这个活动中是否存在拼团,并判断该拼团订单是否已付款
        ShopActivitiesGroupJoin existGroupJoin = shopActivitiesGroupJoinDao.selectExistGroupingJoinByUser(groupPrice.getActId(), bizUser.getOpenId());
        ShopActivitiesGroupJoin existGroupJoin = shopActivitiesGroupJoinDao.selectExistGroupingJoinByUser(groupPrice.getActId(), sysVipInfo.getOpenId());
        if (existGroupJoin != null) {
            if (existGroupJoin.getGjStatus() == ShopActivitiesGroupJoin.ACTIVITIES_JOIN_WAIT_PAY) {
                return new AjaxResult(AjaxResult.STATUS_FAIL, "您该活动有个订单未付款");
@@ -129,7 +127,7 @@
            return new AjaxResult(AjaxResult.STATUS_FAIL, "该活动已存在拼团");
        }
        boolean isOld = isOldUser(bizUser.getPhoneNumber());
        boolean isOld = isOldUser(sysVipInfo.getPhone());
        // 老用户和老带新的开团都必须是老用户
        if (ShopActivitiesGroupInfo.GROUP_TYPE_ALL_OLD == groupInfo.getGiType() || ShopActivitiesGroupInfo.GROUP_TYPE_OLD_AND_NEW == groupInfo.getGiType()) {
            if (!isOld) {
@@ -146,7 +144,7 @@
        createGroupBuyDTO.setPrice(groupPrice.getGpPrice());
        createGroupBuyDTO.setGoodsId(groupInfo.getGoodsId().intValue());
        createGroupBuyDTO.setOpenId(bizUser.getOpenId());
        createGroupBuyDTO.setUserId(sysVipInfo.getId());
        ShopOrder shopOrder = createOrderByGroupBuy(createGroupBuyDTO);
        ShopActivitiesGroupJoin groupJoin = new ShopActivitiesGroupJoin();
@@ -158,19 +156,19 @@
        groupJoin.setGjEndTime(gjEndTime.getTime());
        groupJoin.setGiId(groupInfo.getId());
        groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_WAIT_PAY);
        groupJoin.setCreateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        groupJoin.setUpdateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        groupJoin.setGjHeadId(bizUser.getOpenId());
        groupJoin.setCreateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        groupJoin.setUpdateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        groupJoin.setGjHeadId(sysVipInfo.getId());
        groupJoin.setCompanyId(shopActivities.getCompanyId());
        shopActivitiesGroupJoinDao.insert(groupJoin);
        ShopActivitiesGroupJoinUser joinUser = new ShopActivitiesGroupJoinUser();
        joinUser.setGjId(groupJoin.getId());
        joinUser.setGiId(groupInfo.getId());
        joinUser.setUserId(bizUser.getOpenId());
        joinUser.setUserId(sysVipInfo.getId());
        joinUser.setIsHead(ShopActivitiesGroupJoinUser.USER_IS_HEAD_Y);
        joinUser.setCreateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        joinUser.setUpdateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        joinUser.setCreateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        joinUser.setUpdateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        joinUser.setIsHasPay(ShopActivitiesGroupJoinUser.IS_HAS_PAY_N);
        joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_N);
        Calendar payEndTime = Calendar.getInstance();
@@ -193,7 +191,7 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public AjaxResult joinGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) throws Exception {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        // TODO 需判断拼团结束时间以及当前拼团是否已满员
@@ -202,7 +200,7 @@
            return AjaxResult.buildFailInstance("该拼团不存在");
        }
        if (groupJoin.getGjHeadId().equals(bizUser.getOpenId())) {
        if (groupJoin.getGjHeadId().equals(sysVipInfo.getOpenId())) {
            return AjaxResult.buildFailInstance("您是拼团团长,无法加入拼团");
        }
@@ -210,7 +208,7 @@
            return AjaxResult.buildFailInstance("该拼团时间已结束");
        }
        ShopActivitiesGroupJoinUser groupJoinUser = shopActivitiesGroupJoinUserDao.selectGroupJoinUserByUserIdAndGjId(bizUser.getOpenId(), groupJoin.getId());
        ShopActivitiesGroupJoinUser groupJoinUser = shopActivitiesGroupJoinUserDao.selectGroupJoinUserByUserIdAndGjId(sysVipInfo.getOpenId(), groupJoin.getId());
        if (groupJoinUser != null) {
            return AjaxResult.buildFailInstance("您已加入了该拼团");
        }
@@ -228,7 +226,7 @@
                return AjaxResult.buildFailInstance("达到最大限购数量");
            }
            int count = shopActivitiesGroupJoinUserDao.selectCountHasBuy(groupInfo.getId(), bizUser.getOpenId());
            int count = shopActivitiesGroupJoinUserDao.selectCountHasBuy(groupInfo.getId(), sysVipInfo.getOpenId());
            if (count + createGroupBuyDTO.getCount() > groupInfo.getGiLimitBuy()) {
                return AjaxResult.buildFailInstance("达到最大限购数量");
            }
@@ -243,7 +241,7 @@
            return AjaxResult.buildFailInstance("该拼团已满员");
        }
        boolean isOld = isOldUser(bizUser.getPhoneNumber());
        boolean isOld = isOldUser(sysVipInfo.getPhone());
        // 老用户 -- 加入拼团的都必须是老用户
        if (ShopActivitiesGroupInfo.GROUP_TYPE_ALL_OLD == groupInfo.getGiType()) {
            if (!isOld) {
@@ -272,7 +270,7 @@
        createGroupBuyDTO.setPrice(groupPrice.getGpPrice());
        createGroupBuyDTO.setGoodsId(groupInfo.getGoodsId().intValue());
        createGroupBuyDTO.setOpenId(bizUser.getOpenId());
        createGroupBuyDTO.setUserId(sysVipInfo.getId());
        ShopOrder shopOrder = createOrderByGroupBuy(createGroupBuyDTO);
        ShopActivitiesGroupJoinUser joinUser = new ShopActivitiesGroupJoinUser();
@@ -281,12 +279,12 @@
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MINUTE, Integer.parseInt(payTimeLimit));
        joinUser.setPayEndTime(calendar.getTime());
        joinUser.setUserId(bizUser.getOpenId());
        joinUser.setUserId(sysVipInfo.getId());
        joinUser.setGiId(groupInfo.getId());
        joinUser.setGjId(groupJoin.getId());
        joinUser.setIsHead(ShopActivitiesGroupJoinUser.USER_IS_HEAD_N);
        joinUser.setCreateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        joinUser.setUpdateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName());
        joinUser.setCreateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        joinUser.setUpdateBy(sysVipInfo.getNickName() == null ? "游客" : sysVipInfo.getNickName());
        joinUser.setIsNewUser(isOld ? 2 : 1);
        joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_N);
        joinUser.setCompanyId(groupJoin.getCompanyId());
@@ -318,8 +316,9 @@
        if (shopReceiveAddress == null) {
            throw new GlobleException("请选择正确的收获地址");
        }
        SysVipInfo user=redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        ShopOrder shopOrder = new ShopOrder();
        shopOrder.setCompanyId(user.getCompanyId());
        shopOrder.setStoreId(Integer.parseInt(createGroupBuyDTO.getShopId().toString()));
        shopOrder.setOrderType(ShopOrder.ORDER_TYPE_SERVICE);
@@ -360,7 +359,7 @@
        //TODO 更新库存和销量 更新库存和销量[考虑和erp库存联动]
        wxShopOrderUtil.updateProductAndSkuInfo(details);
        shopOrder.setUserId(createGroupBuyDTO.getOpenId());
        shopOrder.setUserId(createGroupBuyDTO.getUserId());
        shopOrder.setCreateBy("微信小程序生成");
        shopOrder.setUpdateBy("微信小程序生成");
        shopOrder.setCommodityPrice(createGroupBuyDTO.getPrice());
@@ -389,15 +388,15 @@
        shopOrder.setPayResult(ShopOrder.ORDER_WX_STATUS_WAIT_PAY);
        //如果没有提交购买方式或配送方式不是物流
        //获取邮费
        BigDecimal postPrice = wxShopOrderService.calculationPostage(createGroupBuyDTO.getAddressId(), createGroupBuyDTO.getPrice());
        BigDecimal postPrice = wxShopOrderService.calculationPostage(createGroupBuyDTO.getPrice(),user.getCompanyId());
        shopOrder.setPostage(postPrice);
        BigDecimal payPrice = createGroupBuyDTO.getPrice().multiply(BigDecimal.valueOf(createGroupBuyDTO.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));