| package com.matrix.system.shopXcx.api.service.impl; | 
|   | 
| 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.StringUtils; | 
| import com.matrix.system.common.constance.AppConstance; | 
| import com.matrix.system.constance.Dictionary; | 
| import com.matrix.system.hive.bean.ShoppingGoods; | 
| import com.matrix.system.hive.bean.SysVipInfo; | 
| import com.matrix.system.hive.dao.ShoppingGoodsDao; | 
| import com.matrix.system.hive.dao.SysVipInfoDao; | 
| import com.matrix.system.shopXcx.api.service.WXShopOrderService; | 
| import com.matrix.system.shopXcx.api.service.WxShopActivitiesGroupService; | 
| import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil; | 
| import com.matrix.system.shopXcx.bean.*; | 
| import com.matrix.system.shopXcx.dao.*; | 
| import com.matrix.system.shopXcx.dto.CreateGroupBuyDTO; | 
| import com.matrix.system.shopXcx.dto.DiscountExplain; | 
| import org.apache.commons.collections.CollectionUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.math.BigDecimal; | 
| import java.util.*; | 
|   | 
| /** | 
|  * @author wzy | 
|  */ | 
| @Service | 
| public class WxShopActivitiesGroupServiceImpl implements WxShopActivitiesGroupService { | 
|     @Autowired | 
|     private WxShopOrderUtil wxShopOrderUtil; | 
|   | 
|     @Autowired | 
|     private ShopActivitiesGroupInfoDao shopActivitiesGroupInfoDao; | 
|   | 
|     @Autowired | 
|     private RedisUserLoginUtils redisUserLoginUtils; | 
|   | 
|     @Autowired | 
|     private ShopActivitiesGroupPriceDao shopActivitiesGroupPriceDao; | 
|   | 
|     @Autowired | 
|     private ShopActivitiesGroupJoinDao shopActivitiesGroupJoinDao; | 
|   | 
|     @Autowired | 
|     private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao; | 
|   | 
|     @Autowired | 
|     private ShopReceiveAddressDao shopReceiveAddressDao; | 
|   | 
|     @Autowired | 
|     private ShopProductDao shopProductDao; | 
|   | 
|     @Autowired | 
|     private ShopSkuDao shopSkuDao; | 
|   | 
|     @Autowired | 
|     private ShoppingGoodsDao shoppingGoodsDao; | 
|   | 
|     @Autowired | 
|     private ShopOrderDao shopOrderDao; | 
|   | 
|     @Autowired | 
|     private ShopOrderDetailsDao shopOrderDetailsDao; | 
|   | 
|     @Autowired | 
|     private WXShopOrderService wxShopOrderService; | 
|   | 
|     @Autowired | 
|     private ShopActivitiesDao shopActivitiesDao; | 
|   | 
|     @Autowired | 
|     private SysVipInfoDao sysVipInfoDao; | 
|   | 
|     @Value("${activities.groupBuy.limit}") | 
|     private String groupBuyLimit; | 
|   | 
|     @Value("${groupBuy.pay.timeLimit}") | 
|     private String payTimeLimit; | 
|   | 
|     @Override | 
|     @Transactional(rollbackFor = Exception.class) | 
|     public AjaxResult createGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) throws Exception { | 
|         BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); | 
|   | 
|         ShopActivitiesGroupPrice groupPrice = shopActivitiesGroupPriceDao.selectById(createGroupBuyDTO.getGpId()); | 
|         ShopActivitiesGroupInfo groupInfo = shopActivitiesGroupInfoDao.selectGroupInfoByActId(groupPrice.getActId()); | 
|         ShopActivities shopActivities = shopActivitiesDao.selectById(groupPrice.getActId()); | 
|         // 判断拼团是否已经结束 | 
|         if (shopActivities.getActEndTime().getTime() < new Date().getTime() || shopActivities.getActStatus() == ShopActivities.ACTIVITIES_STATUS_CLOSE) { | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "该拼团已结束"); | 
|         } | 
|   | 
|         // 判断最大开团数量 | 
|         if (groupInfo.getGiHeadDiscount() != null && groupInfo.getGiHeadDiscount() != 0) { | 
|             int createCnt = shopActivitiesGroupJoinDao.selectCreateGroupBuyCount(shopActivities.getId(), bizUser.getOpenId()); | 
|             if (createCnt > groupInfo.getGiHeadDiscount()) { | 
|                 return AjaxResult.buildFailInstance("达到最大开团数量"); | 
|             } | 
|         } | 
|         // 限制购买数量 | 
|         if (groupInfo.getGiLimitBuy() != null && groupInfo.getGiLimitBuy() != 0) { | 
|             if (createGroupBuyDTO.getCount() > groupInfo.getGiLimitBuy()) { | 
|                 return AjaxResult.buildFailInstance("达到最大限购数量"); | 
|             } | 
|   | 
|             int count = shopActivitiesGroupJoinUserDao.selectCountHasBuy(groupInfo.getId(), bizUser.getOpenId()); | 
|             if (count + createGroupBuyDTO.getCount() > groupInfo.getGiLimitBuy()) { | 
|                 return AjaxResult.buildFailInstance("达到最大限购数量"); | 
|             } | 
|         } | 
|   | 
|         // 判断该用户在这个活动中是否存在拼团,并判断该拼团订单是否已付款 | 
|         ShopActivitiesGroupJoin existGroupJoin = shopActivitiesGroupJoinDao.selectExistGroupingJoinByUser(groupPrice.getActId(), bizUser.getOpenId()); | 
|         if (existGroupJoin != null) { | 
|             if (existGroupJoin.getGjStatus() == ShopActivitiesGroupJoin.ACTIVITIES_JOIN_WAIT_PAY) { | 
|                 return new AjaxResult(AjaxResult.STATUS_FAIL, "您该活动有个订单未付款"); | 
|             } | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "该活动已存在拼团"); | 
|         } | 
|   | 
|         boolean isOld = isOldUser(bizUser.getPhoneNumber()); | 
|         // 老用户和老带新的开团都必须是老用户 | 
|         if (ShopActivitiesGroupInfo.GROUP_TYPE_ALL_OLD == groupInfo.getGiType() || ShopActivitiesGroupInfo.GROUP_TYPE_OLD_AND_NEW == groupInfo.getGiType()) { | 
|             if (!isOld) { | 
|                 return AjaxResult.buildFailInstance("该活动需由老用户开团"); | 
|             } | 
|         } | 
|   | 
|         // 新用户 -- 开团必须是新用户 | 
|         if (ShopActivitiesGroupInfo.GROUP_TYPE_ALL_NEW == groupInfo.getGiType()) { | 
|             if (isOld) { | 
|                 return AjaxResult.buildFailInstance("该活动仅新用户参与"); | 
|             } | 
|         } | 
|   | 
|         createGroupBuyDTO.setPrice(groupPrice.getGpPrice()); | 
|         createGroupBuyDTO.setGoodsId(groupInfo.getGoodsId().intValue()); | 
|         createGroupBuyDTO.setOpenId(bizUser.getOpenId()); | 
|         ShopOrder shopOrder = createOrderByGroupBuy(createGroupBuyDTO); | 
|   | 
|         ShopActivitiesGroupJoin groupJoin = new ShopActivitiesGroupJoin(); | 
|         groupJoin.setGpId(createGroupBuyDTO.getGpId()); | 
|         groupJoin.setActId(groupPrice.getActId()); | 
|         groupJoin.setGjBeginTime(new Date()); | 
|         Calendar gjEndTime = Calendar.getInstance(); | 
|         gjEndTime.add(Calendar.HOUR_OF_DAY, Integer.parseInt(groupBuyLimit)); | 
|         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.setCompanyId(shopActivities.getCompanyId()); | 
|         shopActivitiesGroupJoinDao.insert(groupJoin); | 
|   | 
|         ShopActivitiesGroupJoinUser joinUser = new ShopActivitiesGroupJoinUser(); | 
|         joinUser.setGjId(groupJoin.getId()); | 
|         joinUser.setGiId(groupInfo.getId()); | 
|         joinUser.setUserId(bizUser.getOpenId()); | 
|         joinUser.setIsHead(ShopActivitiesGroupJoinUser.USER_IS_HEAD_Y); | 
|         joinUser.setCreateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName()); | 
|         joinUser.setUpdateBy(bizUser.getNickName() == null ? "游客" : bizUser.getNickName()); | 
|         joinUser.setIsHasPay(ShopActivitiesGroupJoinUser.IS_HAS_PAY_N); | 
|         joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_N); | 
|         Calendar payEndTime = Calendar.getInstance(); | 
|         payEndTime.add(Calendar.MINUTE, Integer.parseInt(payTimeLimit)); | 
|         joinUser.setPayEndTime(payEndTime.getTime()); | 
|         joinUser.setOrderId(shopOrder.getId().longValue()); | 
|         joinUser.setIsNewUser(isOld ? 2 : 1); | 
|         joinUser.setCompanyId(shopActivities.getCompanyId()); | 
|         int i = shopActivitiesGroupJoinUserDao.insert(joinUser); | 
|   | 
|   | 
|         BrandWCPayRequestData payData = wxShopOrderService.startPayment(shopOrder); | 
|         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData)); | 
|         result.putInMap("orderId", shopOrder.getId()); | 
|         return result; | 
|   | 
| //        return new AjaxResult(AjaxResult.STATUS_SUCCESS, "拼团成功"); | 
|     } | 
|   | 
|     @Transactional(rollbackFor = Exception.class) | 
|     @Override | 
|     public AjaxResult joinGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) throws Exception { | 
|         BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); | 
|   | 
|         // TODO 需判断拼团结束时间以及当前拼团是否已满员 | 
|   | 
|         ShopActivitiesGroupJoin groupJoin = shopActivitiesGroupJoinDao.selectById(createGroupBuyDTO.getGjId()); | 
|         if (groupJoin == null) { | 
|             return AjaxResult.buildFailInstance("该拼团不存在"); | 
|         } | 
|   | 
|         if (groupJoin.getGjHeadId().equals(bizUser.getOpenId())) { | 
|             return AjaxResult.buildFailInstance("您是拼团团长,无法加入拼团"); | 
|         } | 
|   | 
|         if (groupJoin.getGjEndTime().getTime() < new Date().getTime()) { | 
|             return AjaxResult.buildFailInstance("该拼团时间已结束"); | 
|         } | 
|   | 
|         ShopActivitiesGroupJoinUser groupJoinUser = shopActivitiesGroupJoinUserDao.selectGroupJoinUserByUserIdAndGjId(bizUser.getOpenId(), groupJoin.getId()); | 
|         if (groupJoinUser != null) { | 
|             return AjaxResult.buildFailInstance("您已加入了该拼团"); | 
|         } | 
|   | 
|         List<ShopActivitiesGroupJoinUser> isExsitNoPay = shopActivitiesGroupJoinUserDao.selectGroupJoinUserByPayingAndUnCancel(groupJoin.getId()); | 
|         if (CollectionUtils.isNotEmpty(isExsitNoPay)) { | 
|             return AjaxResult.buildFailInstance("该拼团有未支付的用户,暂不能参加"); | 
|         } | 
|   | 
|         ShopActivitiesGroupInfo groupInfo = shopActivitiesGroupInfoDao.selectById(groupJoin.getGiId()); | 
|   | 
|         // 限制购买数量 | 
|         if (groupInfo.getGiLimitBuy() != null && groupInfo.getGiLimitBuy() != 0) { | 
|             if (createGroupBuyDTO.getCount() > groupInfo.getGiLimitBuy()) { | 
|                 return AjaxResult.buildFailInstance("达到最大限购数量"); | 
|             } | 
|   | 
|             int count = shopActivitiesGroupJoinUserDao.selectCountHasBuy(groupInfo.getId(), bizUser.getOpenId()); | 
|             if (count + createGroupBuyDTO.getCount() > groupInfo.getGiLimitBuy()) { | 
|                 return AjaxResult.buildFailInstance("达到最大限购数量"); | 
|             } | 
|         } | 
|   | 
|         ShopActivitiesGroupPrice groupPrice = shopActivitiesGroupPriceDao.selectById(groupJoin.getGpId()); | 
|         groupJoinUser = new ShopActivitiesGroupJoinUser(); | 
|         groupJoinUser.setGjId(groupJoin.getId()); | 
|         groupJoinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_N); | 
|         List<ShopActivitiesGroupJoinUser> groupJoinUsers = shopActivitiesGroupJoinUserDao.selectByModel(groupJoinUser); | 
|         if (groupPrice.getGpCount() <= groupJoinUsers.size()) { | 
|             return AjaxResult.buildFailInstance("该拼团已满员"); | 
|         } | 
|   | 
|         boolean isOld = isOldUser(bizUser.getPhoneNumber()); | 
|         // 老用户 -- 加入拼团的都必须是老用户 | 
|         if (ShopActivitiesGroupInfo.GROUP_TYPE_ALL_OLD == groupInfo.getGiType()) { | 
|             if (!isOld) { | 
|                 return AjaxResult.buildFailInstance("该活动仅老用户参与"); | 
|             } | 
|         } | 
|   | 
|         // 新用户 -- 加入拼团的都必须是新用户 | 
|         if (ShopActivitiesGroupInfo.GROUP_TYPE_ALL_NEW == groupInfo.getGiType()) { | 
|             if (isOld) { | 
|                 return AjaxResult.buildFailInstance("该活动仅新用户参与"); | 
|             } | 
|         } | 
|   | 
|         // 老带新 -- 成团的时候必须有一名新用户 | 
|         if (ShopActivitiesGroupInfo.GROUP_TYPE_OLD_AND_NEW == groupInfo.getGiType()) { | 
|             if (isOld) { | 
|                 List<ShopActivitiesGroupJoinUser> hasNewUsers = shopActivitiesGroupJoinUserDao.selectNewUserRecordByGjId(groupJoin.getId()); | 
|                 if (CollectionUtils.isEmpty(hasNewUsers)) { | 
|                     if (groupPrice.getGpCount() == (groupJoinUsers.size() + 1)) { | 
|                         return AjaxResult.buildFailInstance("该活动必须有一位新用户"); | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|         createGroupBuyDTO.setPrice(groupPrice.getGpPrice()); | 
|         createGroupBuyDTO.setGoodsId(groupInfo.getGoodsId().intValue()); | 
|         createGroupBuyDTO.setOpenId(bizUser.getOpenId()); | 
|         ShopOrder shopOrder = createOrderByGroupBuy(createGroupBuyDTO); | 
|   | 
|         ShopActivitiesGroupJoinUser joinUser = new ShopActivitiesGroupJoinUser(); | 
|         joinUser.setOrderId(shopOrder.getId().longValue()); | 
|         joinUser.setIsHasPay(ShopActivitiesGroupJoinUser.IS_HAS_PAY_N); | 
|         Calendar calendar = Calendar.getInstance(); | 
|         calendar.set(Calendar.MINUTE, Integer.parseInt(payTimeLimit)); | 
|         joinUser.setPayEndTime(calendar.getTime()); | 
|         joinUser.setUserId(bizUser.getOpenId()); | 
|         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.setIsNewUser(isOld ? 2 : 1); | 
|         joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_N); | 
|         joinUser.setCompanyId(groupJoin.getCompanyId()); | 
|   | 
|         // 同步锁,处理拼团中最后一个位置同时多个人加入的情况 | 
|         synchronized (this) { | 
|             List<ShopActivitiesGroupJoinUser> users = shopActivitiesGroupJoinUserDao.selectByModel(groupJoinUser); | 
|             if (groupPrice.getGpCount() <= users.size()) { | 
|                 return AjaxResult.buildFailInstance("该拼团已满员或正等待其他用户支付"); | 
|             } | 
|             shopActivitiesGroupJoinUserDao.insert(joinUser); | 
|         } | 
|         BrandWCPayRequestData payData = wxShopOrderService.startPayment(shopOrder); | 
|         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData)); | 
|         result.putInMap("orderId", shopOrder.getId()); | 
|         return result; | 
|   | 
| //        return new AjaxResult(AjaxResult.STATUS_SUCCESS, "参团成功"); | 
|     } | 
|   | 
|     /** | 
|      * 创建拼团订单 | 
|      * | 
|      * @param createGroupBuyDTO | 
|      * @return | 
|      */ | 
|     private ShopOrder createOrderByGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) { | 
|         ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(createGroupBuyDTO.getAddressId()); | 
|         if (shopReceiveAddress == null) { | 
|             throw new GlobleException("请选择正确的收获地址"); | 
|         } | 
|         BizUser user=redisUserLoginUtils.getLoginUser(BizUser.class); | 
|         ShopOrder shopOrder = new ShopOrder(); | 
|         shopOrder.setCompanyId(user.getCompanyId()); | 
|         shopOrder.setStoreId(Integer.parseInt(createGroupBuyDTO.getShopId().toString())); | 
|         shopOrder.setOrderType(ShopOrder.ORDER_TYPE_SERVICE); | 
|   | 
|         List<ShopSku> shopSkus = shopSkuDao.selectByPid(createGroupBuyDTO.getGoodsId()); | 
|   | 
|         List<ShopOrderDetails> details = new ArrayList<>(); | 
|         ShopOrderDetails shopOrderDetails = new ShopOrderDetails(); | 
|         shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER); | 
|         shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER); | 
|         shopOrderDetails.setpId(createGroupBuyDTO.getGoodsId()); | 
|         shopOrderDetails.setsId(shopSkus.get(0).getId()); | 
|         shopOrderDetails.setPrice(createGroupBuyDTO.getPrice()); | 
|         shopOrderDetails.setCount(createGroupBuyDTO.getCount()); | 
|         shopOrderDetails.setsTitle(shopSkus.get(0).getName()); | 
|         shopOrderDetails.setDiscountAmount(BigDecimal.ZERO); | 
|         shopOrderDetails.setTotalPrice(shopOrderDetails.getPrice().multiply(BigDecimal.valueOf(shopOrderDetails.getCount()))); | 
|         details.add(shopOrderDetails); | 
|   | 
|         //查询绑定的产品是否为家居产品,如果已经含家具产品则不再比较 | 
|         if (ShopOrder.ORDER_TYPE_GOODS != shopOrder.getOrderType()) { | 
|             ShopSku shopSku = shopSkuDao.selectById(shopSkus.get(0).getId().intValue()); | 
|             String stokCode = shopSku.getStockCode(); | 
|             if (StringUtils.isNotBlank(stokCode)) { | 
|                 ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(Long.parseLong(stokCode)); | 
|                 if (shoppingGoods != null) { | 
|                     //根据购买的产品设置订单类型 | 
|                     if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) { | 
|                         shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS); | 
|                     } else { | 
|   | 
|                     } | 
|                 } else { | 
|                     shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         //TODO 更新库存和销量 更新库存和销量[考虑和erp库存联动] | 
|         wxShopOrderUtil.updateProductAndSkuInfo(details); | 
|   | 
|         shopOrder.setUserId(createGroupBuyDTO.getOpenId()); | 
|         shopOrder.setCreateBy("微信小程序生成"); | 
|         shopOrder.setUpdateBy("微信小程序生成"); | 
|         shopOrder.setCommodityPrice(createGroupBuyDTO.getPrice()); | 
|         shopOrder.setPurchaseQuantity(1); | 
|         //购买方式 | 
|         shopOrder.setShippingMethod(createGroupBuyDTO.getShippingMethod()); | 
|         //生成订单号 | 
|         shopOrder.setOrderNo(WxUtils.getOrderNum()); | 
|         //设置支付状态 | 
|         shopOrder.setPayStatus(ShopOrder.ORDER_STATUS_WAIT_PAY); | 
|         //设置订单状态 | 
|         shopOrder.setOrderStatus(ShopOrder.ORDER_PAY_STATUS_WAIT); | 
|   | 
|         //设置退款费用(注:下次优化从数据字典表获取) | 
|         shopOrder.setRefundCharge(BigDecimal.ZERO); | 
|         //客户电话 | 
|         shopOrder.setUserTel(shopReceiveAddress.getAddrTelephone()); | 
|         //客户姓名 | 
|         shopOrder.setUserName(shopReceiveAddress.getAddrLiaisonman()); | 
|         //删除标识 | 
|         shopOrder.setDelFlag(AppConstance.DATA_USEABLE); | 
|         shopOrder.setActivityType(ShopOrder.ACTIVITY_TYPE_GROUP); | 
|         //微信订单号 | 
|         shopOrder.setWxOrderNo(""); | 
|         //微信支付结果 | 
|         shopOrder.setPayResult(ShopOrder.ORDER_WX_STATUS_WAIT_PAY); | 
|         //如果没有提交购买方式或配送方式不是物流 | 
|         //获取邮费 | 
|         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.setBillPrice(payPrice); | 
|         Gson g = new GsonBuilder().create(); | 
|         shopOrder.setDiscountExplain(g.toJson(discountExplain)); | 
|         shopOrderDao.insert(shopOrder); | 
|   | 
|         wxShopOrderUtil.insertSendPackageInfo(shopOrder, createGroupBuyDTO.getShippingMethod(), shopReceiveAddress); | 
|         //给订单详情表添加订单ID | 
|         for (ShopOrderDetails detail : details) { | 
|             detail.setOrderId(shopOrder.getId()); | 
|         } | 
|         if (CollectionUtils.isNotEmpty(details)) { | 
|             shopOrderDetailsDao.batchInsert(details); | 
|         } | 
|         return shopOrder; | 
|     } | 
|   | 
|     /** | 
|      * 根据手机号判断用户是否为老用户 true--老用户 false--新用户 | 
|      * | 
|      * @param telphone | 
|      * @return | 
|      */ | 
|     private boolean isOldUser(String telphone) { | 
|         SysVipInfo sysVipInfo = sysVipInfoDao.selectOldUserByTelphone(telphone); | 
|         if (sysVipInfo != null) { | 
|             return true; | 
|         } | 
|         return false; | 
|     } | 
| } |