From c7cb86db957dc7fbf6ca30270a71a43f5b31eccf Mon Sep 17 00:00:00 2001 From: huanghongfa <huanghongfa123456> Date: 星期三, 13 四月 2022 09:29:03 +0800 Subject: [PATCH] 电动车商城-拼团活动接口开发 --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderCollageTeamServiceImpl.java | 226 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 223 insertions(+), 3 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderCollageTeamServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderCollageTeamServiceImpl.java index 726fa4c..4fa3e88 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderCollageTeamServiceImpl.java +++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderCollageTeamServiceImpl.java @@ -1,14 +1,30 @@ package com.panzhihua.service_community.service.impl; -import com.panzhihua.service_community.entity.ComBatteryCommodityOrderCollageTeam; -import com.panzhihua.service_community.dao.ComBatteryCommodityOrderCollageTeamMapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.panzhihua.common.constants.PayCpmstant; +import com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderCollageTeamPeopleVo; +import com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderCollageTeamVo; +import com.panzhihua.common.utlis.Snowflake; +import com.panzhihua.common.utlis.WxPayUtils; +import com.panzhihua.service_community.dao.*; +import com.panzhihua.service_community.entity.*; import com.panzhihua.service_community.service.ComBatteryCommodityOrderCollageTeamService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.panzhihua.service_community.service.ComBatteryTradeOrderService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import com.panzhihua.common.model.dtos.common.*; import com.panzhihua.common.model.vos.R; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * title: 电动车商城-拼团订单团队表表服务实现类 @@ -20,8 +36,40 @@ * @author lyq * @date 2022-03-29 16:06:58 */ +@Slf4j @Service("comBatteryCommodityOrderCollageTeamService") public class ComBatteryCommodityOrderCollageTeamServiceImpl extends ServiceImpl<ComBatteryCommodityOrderCollageTeamMapper, ComBatteryCommodityOrderCollageTeam> implements ComBatteryCommodityOrderCollageTeamService { + + @Resource + private ComBatteryCommodityActivityMapper commodityActivityMapper; + @Resource + private ComBatteryCommodityOrderCollageTeamMapper orderCollageTeamMapper; + @Resource + private ComBatteryCommodityOrderCollageTeamPeopleMapper orderCollageTeamPeopleMapper; + @Resource + private ComBatteryUserAddressMapper userAddressMapper; + @Resource + private SysUserMapper userMapper; + @Resource + private ComBatteryTradeOrderService tradeOrderService; + @Value("${min.app.isTest}") + private Boolean isTest; + @Value("${min.app.isRefundTest}") + private Boolean isRefundTest; + @Value("${min.app.appid}") + private String appid; + @Value("${min.app.payKey}") + private String payKey; + @Value("${min.app.mchId}") + private String mchId; + @Value("${min.app.currencyNotifyUrl}") + private String currencyNotifyUrl; + @Resource + private ComBatteryCommodityMapper commodityMapper; + @Resource + private ComBatteryCommoditySpecsMapper commoditySpecsMapper; + @Resource + private ComBatteryCommodityOrderMapper commodityOrderMapper; /** * description queryByPage 分页查询 @@ -101,7 +149,12 @@ */ @Override public R detailById(Long id) { - return R.ok(this.baseMapper.queryById(id)); + ComBatteryCommodityOrderCollageTeamVo orderCollageTeamVo = this.baseMapper.queryById(id); + if(orderCollageTeamVo != null){ + List<ComBatteryCommodityOrderCollageTeamPeopleVo> collageTeamPeopleList = orderCollageTeamPeopleMapper.queryAllByTeamId(id); + orderCollageTeamVo.setOrderCollageTeamPeopleList(collageTeamPeopleList); + } + return R.ok(orderCollageTeamVo); } /** @@ -116,4 +169,171 @@ public R queryByList(PageComBatteryCommodityOrderCollageTeamDto comBatteryCommodityOrderCollageTeam) { return R.ok(this.baseMapper.queryAllByList(comBatteryCommodityOrderCollageTeam)); } + + /** + * 创建拼团订单 + * @param orderDto 请求参数 + * @return 创建订单结果 + */ + @Override + public synchronized R startFight(StartFightOrderDto orderDto) { + //查询拼团活动 + ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(orderDto.getActivityId()); + if(commodityActivity == null){ + return R.fail("未查询到拼团活动"); + } + if(commodityActivity.getStatus().equals(ComBatteryCommodityActivity.Status.YXJ)){ + return R.fail("该活动已下架"); + } + if(commodityActivity.getEndTime().getTime() - System.currentTimeMillis() <= 0 + || commodityActivity.getStatus().equals(ComBatteryCommodityActivity.Status.YJS)){ + return R.fail("该活动已结束"); + } + if(commodityActivity.getCommodityNum() <= commodityActivity.getCommoditySaleNum()){ + return R.fail("活动商品已售空"); + } + if(orderDto.getType().equals(StartFightOrderDto.Type.PT)){ + //判断该团队人数是否已满 + Integer count = orderCollageTeamPeopleMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrderCollageTeamPeople>().lambda() + .eq(ComBatteryCommodityOrderCollageTeamPeople::getTeamId,orderDto.getTeamId())); + if(count >= commodityActivity.getCollagePeopleNum()){ + return R.fail("拼团人数已满"); + } + //查询拼团团队 + ComBatteryCommodityOrderCollageTeam orderCollageTeam = orderCollageTeamMapper.selectById(orderDto.getTeamId()); + if(orderCollageTeam == null){ + return R.fail("该拼团不存在"); + } + if(!orderCollageTeam.getStatus().equals(ComBatteryCommodityOrderCollageTeam.Status.DDPT)){ + return R.fail("该拼团已成功"); + } + }else{ + Integer count = orderCollageTeamMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrderCollageTeam>().lambda() + .eq(ComBatteryCommodityOrderCollageTeam::getActivityId,orderDto.getActivityId()) + .eq(ComBatteryCommodityOrderCollageTeam::getStatus,ComBatteryCommodityOrderCollageTeam.Status.DDPT)); + if(count >= commodityActivity.getCollageNum()){ + return R.fail("当前正在拼团的数量已达到最大值,不可在开团"); + } + } + //查询商品 + ComBatteryCommodity commodity = commodityMapper.selectById(orderDto.getCommodityId()); + if(commodity == null){ + return R.fail("未查询到商品信息"); + } + //查询用户信息 + SysUser user = userMapper.selectById(orderDto.getUserId()); + if(user == null){ + return R.fail("未查询到用户信息"); + } + //查询商品规格信息 + ComBatteryCommoditySpecs commoditySpecs = commoditySpecsMapper.selectById(commodityActivity.getSpecsId()); + if(commoditySpecs == null){ + return R.fail("未查询到商品规格信息"); + } + if(commoditySpecs.getStock() < orderDto.getCount()){ + return R.fail("该商品库存不足,无法下单"); + } + //查询用户收货地址 + ComBatteryUserAddress userAddress = userAddressMapper.selectById(orderDto.getAddressId()); + if(userAddress == null){ + return R.fail("未查询到用户收货地址"); + } + Date nowDate = new Date(); + //初始化订单数据 + ComBatteryCommodityOrder commodityOrder = getCreateOrder(commodity,userAddress,user,commoditySpecs,orderDto,nowDate,commodityActivity); + Map<String,Object> resultMap = new HashMap<>(2); + if(commodityOrderMapper.insert(commodityOrder) > 0){ + //更新商品库存 + commoditySpecs.setStock(commoditySpecs.getStock() - orderDto.getCount()); + commoditySpecsMapper.updateById(commoditySpecs); + + //微信支付需要调取小程序微信支付 + String result = getWxPayResult(commodityOrder.getFinalAmount(),commodityOrder.getOpenId() + ,commodityOrder.getOrderNo(),"购买商品",orderDto.getType().toString()); + resultMap.put("payResult",result); + resultMap.put("orderId",commodityOrder.getId()); + // 添加微信支付交易流水 + String wxTradeOrderNo = "wx" + Snowflake.getId(); + tradeOrderService.addOrderTradeRecord(user.getUserId(), user.getOpenid(), wxTradeOrderNo, ComBatteryTradeOrder.PayType.WX, + commodityOrder.getFinalAmount(), ComBatteryTradeOrder.TradeType.DDC_SHOP, commodityOrder.getId(), + commodityOrder.getOrderNo(), user.getUserId(), nowDate); + } + return R.ok(resultMap); + } + + /** + * 小程序唤起微信支付 + * + * @param money + * 需要支付的金额 + * @param openId + * 用户唤起微信支付的openid + * @param orderNo + * 业务订单号 + * @param remark + * 交易备注 + * @return 小程序支付参数 + */ + private String getWxPayResult(BigDecimal money, String openId, String orderNo, String remark,String type) { + String result = ""; + // 将剩余金额调起微信支付 + if (isTest) { + money = BigDecimal.valueOf(0.01); + } + // 调用wx支付 + result = WxPayUtils.getUnifiedorder(appid, mchId, payKey, currencyNotifyUrl + PayCpmstant.BATTERY_STORE_ACTIVITY_PAY_NOTIFY_URL + , remark, openId, orderNo, money,type); + log.info("用户购买商品微信支付返回参数:" + result); + return result; + } + + /** + * 初始化订单数据 + * @param commodity 商品数据 + * @param userAddress 用户收货地址信息 + * @param user 用户数据 + * @param commoditySpecs 商品规格数据 + * @param orderDto 用户请求参数 + * @param nowDate 操作时间 + * @param commodityActivity 拼团活动数据 + * @return 初始化订单数据 + */ + public static ComBatteryCommodityOrder getCreateOrder(ComBatteryCommodity commodity, ComBatteryUserAddress userAddress + , SysUser user, ComBatteryCommoditySpecs commoditySpecs, StartFightOrderDto orderDto, Date nowDate + ,ComBatteryCommodityActivity commodityActivity){ + ComBatteryCommodityOrder commodityOrder = new ComBatteryCommodityOrder(); + commodityOrder.setUserId(user.getUserId()); + commodityOrder.setOpenId(user.getOpenid()); + commodityOrder.setStoreId(commodity.getStoreId()); + commodityOrder.setActivityId(commodityActivity.getId()); + commodityOrder.setCommodityId(commodity.getId()); + commodityOrder.setSpecsId(commoditySpecs.getId()); + commodityOrder.setOrderNo("PT" + Snowflake.getId()); + commodityOrder.setActivityType(commodityActivity.getType()); + commodityOrder.setStatus(ComBatteryCommodityOrder.Status.DFK); + commodityOrder.setPayStatus(ComBatteryCommodityOrder.PayStatus.WZF); + commodityOrder.setIsDel(ComBatteryCommodityOrder.IsDel.NO); + commodityOrder.setPayType(ComBatteryCommodityOrder.PayType.WX); + commodityOrder.setCount(orderDto.getCount()); + commodityOrder.setPrice(commodityActivity.getPrice()); + commodityOrder.setAmount(commodityActivity.getPrice().multiply(BigDecimal.valueOf(orderDto.getCount()))); + commodityOrder.setFreight(commodity.getPostage()); + commodityOrder.setFinalAmount(commodityOrder.getAmount().add(commodityOrder.getFreight())); + commodityOrder.setCreateAt(nowDate); + commodityOrder.setCreateBy(user.getUserId()); + commodityOrder.setRemark(orderDto.getRemark()); + //收货地址 + commodityOrder.setAddressId(userAddress.getId()); + commodityOrder.setReceivingName(userAddress.getName()); + commodityOrder.setReceivingPhone(userAddress.getPhone()); + commodityOrder.setReceivingRegionCode(userAddress.getProvinceAdcode() + "-" + userAddress.getCityAdcode() + "-" + userAddress.getDistrictAdcode()); + commodityOrder.setReceivingRegion(userAddress.getProvinceName() + userAddress.getCityName() + userAddress.getDistrictName()); + commodityOrder.setReceivingAddress(userAddress.getAddress()); + if(orderDto.getTeamId() != null){ + commodityOrder.setTeamId(orderDto.getTeamId()); + } + return commodityOrder; + } + + } -- Gitblit v1.7.1