| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- package com.tzy.controller.mall;
- import com.tzy.annotation.ApiLimitRule;
- import com.tzy.annotation.ApiLog;
- import com.tzy.common.config.handle.ApiVersion;
- import com.tzy.common.constant.Constants;
- import com.tzy.common.constant.MqConstans;
- import com.tzy.common.core.controller.BaseController;
- import com.tzy.common.dto.InDto;
- import com.tzy.common.dto.OutDTO;
- import com.tzy.common.enums.BusinessType;
- import com.tzy.common.exception.ServiceException;
- import com.tzy.common.utils.DateUtils;
- import com.tzy.common.utils.bean.JSONTools;
- import com.tzy.dto.EvaluationDTO;
- import com.tzy.dto.OrderReq;
- import com.tzy.framework.util.RedisUtils;
- import com.tzy.framework.web.domain.LimitRule;
- import com.tzy.member.benefits.mapper.MemberBenefitsRecordMapper;
- import com.tzy.pojo.item.EvaluationRecord;
- import com.tzy.pojo.item.OrderList;
- import com.tzy.pojo.item.Sku;
- import com.tzy.service.MallOrderService;
- import com.tzy.sportcard.api.domain.AppUserInfoDto;
- import com.tzy.sportcard.api.service.AsyncAppService;
- import com.tzy.sportcard.api.service.MineApiService;
- import com.tzy.sportcard.group.domain.CardGroupOrderInfo;
- import com.tzy.sportcard.group.service.ICardGroupOrderInfoService;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.logging.log4j.util.Strings;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.web.bind.annotation.*;
- import org.teasoft.bee.osql.Condition;
- import org.teasoft.bee.osql.FunctionType;
- import org.teasoft.bee.osql.Op;
- import org.teasoft.bee.osql.SuidRich;
- import org.teasoft.honey.osql.core.ConditionImpl;
- import javax.annotation.Resource;
- import java.util.List;
- import java.util.Objects;
- /**
- * @author by po'yi
- * @Classname MallOrderController
- * @Description 订单
- * @Date 2022/3/18 11:56
- */
- @Slf4j
- @Api("订单")
- @RestController
- @RequestMapping("/api/{version}/order")
- public class MallOrderController extends BaseController {
- @Autowired
- private MineApiService mineApiService;
- @Autowired
- private MallOrderService mallOrderService;
- @Autowired
- private ICardGroupOrderInfoService cardGroupOrderInfoService;
- @Autowired
- private SuidRich suidRich;
- @Autowired
- private RedisUtils redisUtils;
- @Autowired
- @Lazy
- private AsyncAppService asyncAppService;
- @Resource
- private MemberBenefitsRecordMapper memberBenefitsRecordMapper;
- @Resource
- private RabbitTemplate rabbitTemplate;
- @ApiLog(title = "提交订单", businessType = BusinessType.SEARCH)
- @ResponseBody
- @ApiVersion(1.0)
- @ApiOperation("提交订单")
- @ApiLimitRule(seconds = 2,limitCount=10,type= LimitRule.ACT,msg="抱歉,抢购人数太多,请稍后再试!")
- @PostMapping("/submit")
- public OutDTO submitOrder(@RequestBody OrderReq inDto ){
- return OutDTO.error500("请更新app最新版本");
- }
- @ApiLog(title = "预支付2", businessType = BusinessType.SEARCH)
- @ResponseBody
- @ApiVersion(1.0)
- @ApiOperation("预支付2")
- @PostMapping("/prePayNew")
- public OutDTO orderPrePayNew(@RequestBody InDto inDto ){
- return OutDTO.error500("请先升级app");
- }
- @ApiLog(title = "积分兑换", businessType = BusinessType.SEARCH)
- @ResponseBody
- @ApiVersion(1.0)
- @ApiOperation("积分兑换 ")
- @ApiLimitRule(seconds = 1,limitCount=1,type= LimitRule.USER,msg="操作拼豆,请稍后再试!")
- @PostMapping("/buyOfPoint")
- public OutDTO buyOfPoint(@RequestBody InDto inDto ){
- return OutDTO.error500("请更新app最新版本");
- }
- @ApiLog(title = "积分兑换优惠劵", businessType = BusinessType.SEARCH)
- @ResponseBody
- @ApiVersion(1.0)
- @ApiOperation("积分兑换优惠劵,根据spuId兑换")
- @ApiLimitRule(seconds = 2,limitCount=10,type= LimitRule.ACT_TOKEN,msg="抱歉,抢购人数太多,请稍后再试!")
- @PostMapping("/exchangeCouponByPoint")
- public OutDTO exchangeCouponByPoint(@RequestBody InDto inDto ){
- Object spuId = inDto.get("spuId");
- if(spuId==null){
- return OutDTO.error500("参数skuId为空");
- }
- Integer skuId=getCouponSkuId(Long.valueOf(spuId.toString()));
- Integer purchaseCount=1;
- if(inDto.get("purchaseCount")!=null){
- //购买数量
- purchaseCount = (Integer) inDto.get("purchaseCount");
- if(purchaseCount<1 ){
- return OutDTO.error500("请选择兑换数量");
- }
- }
- AppUserInfoDto userInfo = mineApiService.checkUserNew(inDto);
- return mallOrderService.buyOfPoint(userInfo.getId(),skuId,inDto.get("addressId"),purchaseCount);
- }
- private Integer getCouponSkuId(Long spuId){
- Object o = redisUtils.get(Constants.SKU_COUPON_ID_CACHE + spuId);
- Integer skuId;
- if(o==null){
- Sku sku = new Sku();
- sku.setSpuId(spuId);
- sku.setStatus(201L);
- List<Sku> skus = suidRich.select(sku);
- if(skus.isEmpty()||skus.size()!=1){
- throw new ServiceException(500, "优惠劵数量异常,请联系管理员!");
- }
- skuId = skus.get(0).getId().intValue();
- redisUtils.set(Constants.SKU_COUPON_ID_CACHE + spuId,skuId,Constants.ONE_HOUR);
- }else{
- skuId=(Integer)o;
- }
- return skuId;
- }
- @ApiLog(title = "取消订单",businessType = BusinessType.UPDATE,indto = "{{inDto}}")
- @ApiOperation("取消订单")
- @ResponseBody
- @PostMapping(value = "/cancelOrder")
- public OutDTO cancelOrder(@RequestBody InDto inDto){
- mineApiService.checkUserNew(inDto);
- Integer orderId = (Integer) inDto.get("orderId");
- CardGroupOrderInfo cardGroupOrderInfo = cardGroupOrderInfoService.selectCardGroupOrderInfoById(orderId.longValue());
- if(null == cardGroupOrderInfo ){
- return OutDTO.error500("未找到订单信息");
- }
- //判断是否符合取消订单的条件
- Long status = cardGroupOrderInfo.getStatus();
- if(status != 100){
- return OutDTO.error500("不符合取消订单的条件!");
- }
- // 唤起支付前做一个查询
- if(cardGroupOrderInfoService.checkOrderIsPay(orderId.longValue())){
- return OutDTO.error500("订单支付中,无法取消!");
- }
- // 抢拍订单不允许取消
- String orderSubType = cardGroupOrderInfo.getOrderSubType();
- if(Strings.isNotEmpty(orderSubType) && Constants.AUCTION_ORDER_COMMON_AMOUNT.equals(orderSubType)){
- return OutDTO.error500("抢拍订单不能取消!");
- }
- //用户取消
- cardGroupOrderInfo.setStatus(202L);
- // 释放库存
- if (Constants.ORDER_TYPE_SHOP.equals(cardGroupOrderInfo.getOrderType())) {
- mallOrderService.cancelOrder(cardGroupOrderInfo);
- // 如果是权益兑换订单 删除权益兑换记录
- String prop3 = cardGroupOrderInfo.getProp3();
- if (Constants.MEMBER_BENEFITS.equals(cardGroupOrderInfo.getOrderSubType()) && Strings.isNotEmpty(prop3)) {
- // 根据权益兑换记录id删除权益兑换记录
- memberBenefitsRecordMapper.deleteMemberBenefitsRecordById(Long.parseLong(prop3));
- }
- if (cardGroupOrderInfo.getGiveOrderId() != null) {
- rabbitTemplate.convertAndSend(MqConstans.EXCHANGE_DELAYED_ORDER_EXPIRED, MqConstans.ROUTING_KEY_ORDER_EXPIRED, cardGroupOrderInfo.getGiveOrderId());
- }
- } else if (Constants.ORDER_TYPE_GIFT_CARD.equals(cardGroupOrderInfo.getOrderType())) {
- CardGroupOrderInfo updateOrder = new CardGroupOrderInfo();
- updateOrder.setId(orderId.longValue());
- updateOrder.setStatus(202L);
- cardGroupOrderInfoService.updateCardGroupOrderInfo(updateOrder);
- } else {
- cardGroupOrderInfoService.cancelOrder(cardGroupOrderInfo);
- }
- cardGroupOrderInfoService.returnCouponByOrderId(orderId.longValue());
- //回退积分
- mineApiService.addUserPoint(cardGroupOrderInfo, true, Constants.POINT_TYPE_COMMON_RETURN);
- return OutDTO.ok();
- }
- @ApiLog(title = "用户申请售后",businessType = BusinessType.UPDATE,indto = "{{inDto}}")
- @ApiOperation("用户申请售后,退款,换货")
- @ResponseBody
- @PostMapping(value = "/afterSale")
- public OutDTO refundOrder(@RequestBody InDto inDto){
- AppUserInfoDto userInfo = mineApiService.checkUserNew(inDto);
- Integer orderId = (Integer) inDto.get("orderId");
- CardGroupOrderInfo cardGroupOrderInfo = cardGroupOrderInfoService.getOrderByUserAndId(userInfo.getId(),orderId.longValue());
- if(null == cardGroupOrderInfo ){
- return OutDTO.error(500,"未找到订单信息");
- }
- if(cardGroupOrderInfo.getPoint()!=null&&cardGroupOrderInfo.getPoint()>0){
- return OutDTO.error500("积分订单无法申请,请联系客服!");
- }
- //判断是否符合取消订单的条件
- Long status = cardGroupOrderInfo.getStatus();
- if(!Constants.refundOrderStatus.contains(status.intValue())){
- return OutDTO.error500("订单不符合申请退款的条件");
- }
- // 抢拍订单不允许退款
- String orderSubType = cardGroupOrderInfo.getOrderSubType();
- if(Strings.isNotEmpty(orderSubType) && Constants.AUCTION_ORDER_COMMON_AMOUNT.equals(orderSubType)){
- return OutDTO.error500("抢拍订单不能退款!");
- }
- OrderList orderList = new OrderList();
- orderList.setOrderId(cardGroupOrderInfo.getId());
- Condition beeCondition = new ConditionImpl();
- beeCondition.op("liveId", Op.gt,0);
- String living = suidRich.selectWithFun(orderList, FunctionType.COUNT, "*", beeCondition);
- if(Integer.valueOf(living)>0){
- return OutDTO.error500("订单正在直播中,不符合申请退款的条件");
- }
- String refundType =inDto.getString("refundType");
- String refundReason =inDto.getString("refundReason");
- String refundDesc =inDto.getString("refundDesc");
- CardGroupOrderInfo updateOrder = new CardGroupOrderInfo();
- updateOrder.setId(cardGroupOrderInfo.getId());
- updateOrder.setUserRefundTime(DateUtils.getTimestampNow());
- updateOrder.setRefundType(refundType);
- updateOrder.setRefundReason(refundReason);
- updateOrder.setRefundDesc(refundDesc);
- updateOrder.setRefundStatus(1);
- cardGroupOrderInfoService.updateCardGroupOrderInfo(updateOrder);
- asyncAppService.sendMerchantRefundNotice(cardGroupOrderInfo);
- return OutDTO.ok();
- }
- @ApiLog(title = "用户评价订单",businessType = BusinessType.UPDATE,indto = "{{inDto}}")
- @ApiOperation("用户评价订单")
- @ResponseBody
- @PostMapping(value = "/evaluation")
- public OutDTO evaluateOrder(@RequestBody InDto inDto){
- AppUserInfoDto appUserInfoDto = mineApiService.checkUserNew(inDto);
- Integer orderId = (Integer) inDto.get("orderId");
- CardGroupOrderInfo cardGroupOrderInfo = cardGroupOrderInfoService.selectCardGroupOrderInfoById(orderId.longValue());
- if(null == cardGroupOrderInfo ){
- return OutDTO.error(10040,"未找到订单信息");
- }
- if(cardGroupOrderInfo.getStatus()!=301){
- return OutDTO.error(500,"订单未签收!");
- }
- //json
- String evaluation =inDto.getString("evaluation");
- CardGroupOrderInfo updateOrder = new CardGroupOrderInfo();
- updateOrder.setId(cardGroupOrderInfo.getId());
- updateOrder.setEvaluation(evaluation);
- cardGroupOrderInfoService.updateCardGroupOrderInfo(updateOrder);
- EvaluationDTO evaluationDTO = JSONTools.jsonStr2obj(evaluation, EvaluationDTO.class);
- EvaluationRecord evaluationRecord = new EvaluationRecord();
- evaluationRecord.setCreateUserId(appUserInfoDto.getId());
- evaluationRecord.setAvatar(appUserInfoDto.getAvatar());
- evaluationRecord.setNickName(appUserInfoDto.getNickname());
- evaluationRecord.setAnonymous(evaluationDTO.getAnonymous()?1:0);
- evaluationRecord.setContent(evaluationDTO.getContent());
- evaluationRecord.setImgUrl(evaluationDTO.getImgArrAll());
- evaluationRecord.setValue(evaluationDTO.getValue());
- evaluationRecord.setType("spu");
- List<OrderList> orderLists = mallOrderService.getOrderListByOrderId(cardGroupOrderInfo.getId());
- evaluationRecord.setRefId(orderLists.get(0).getSpuId());
- evaluationRecord.setCreateTime(DateUtils.getTimestampNow());
- suidRich.insert(evaluationRecord);
- return OutDTO.ok();
- }
- @ApiLog(title = "用户填写退换货物流",businessType = BusinessType.UPDATE,indto = "{{inDto}}")
- @ApiOperation("用户填写退换货物流")
- @ResponseBody
- @PostMapping(value = "/refundShip")
- public OutDTO refundShip(@RequestBody InDto inDto){
- mineApiService.checkUserNew(inDto);
- Integer orderId = (Integer) inDto.get("orderId");
- CardGroupOrderInfo cardGroupOrderInfo = cardGroupOrderInfoService.selectCardGroupOrderInfoById(orderId.longValue());
- if(null == cardGroupOrderInfo ){
- return OutDTO.error(10040,"未找到订单信息");
- }
- if(cardGroupOrderInfo.getRefundStatus()!=2){
- return OutDTO.error(500,"请等待商家同意!");
- }
- String refundCurierCompany =inDto.getString("refundCurierCompany");
- String refundCurierNum =inDto.getString("refundCurierNum");
- CardGroupOrderInfo updateOrder = new CardGroupOrderInfo();
- updateOrder.setId(cardGroupOrderInfo.getId());
- updateOrder.setRefundCurierCompany(refundCurierCompany);
- updateOrder.setRefundCourierNum(refundCurierNum);
- updateOrder.setRefundShipTime(DateUtils.getTimestampNow());
- updateOrder.setRefundStatus(4);
- cardGroupOrderInfoService.updateCardGroupOrderInfo(updateOrder);
- return OutDTO.ok();
- }
- @ApiLog(title = "售后客服介入或接受商家拒绝退款操作",businessType = BusinessType.UPDATE,indto = "{{inDto}}")
- @ApiOperation("售后客服介入或接受商家拒绝退款操作")
- @ResponseBody
- @PostMapping(value = "/saleCustomerServiceOrNot")
- public OutDTO saleCustomerService(@RequestBody InDto inDto) {
- mineApiService.checkUserNew(inDto);
- Integer orderId = (Integer) inDto.get("orderId");
- CardGroupOrderInfo cardGroupOrderInfo = cardGroupOrderInfoService.selectCardGroupOrderInfoById(orderId.longValue());
- if (null == cardGroupOrderInfo) {
- return OutDTO.error(10040, "未找到订单信息");
- }
- if (cardGroupOrderInfo.getRefundStatus() != 3) {
- return OutDTO.error(500, "请等待商家操作!");
- }
- CardGroupOrderInfo updateOrder = new CardGroupOrderInfo();
- updateOrder.setId(cardGroupOrderInfo.getId());
- if (inDto.get("refundStatus") == null) {
- updateOrder.setRefundStatus(6);
- } else {
- updateOrder.setRefundStatus((Integer) inDto.get("refundStatus"));
- }
- cardGroupOrderInfoService.updateCardGroupOrderInfo(updateOrder);
- return OutDTO.ok();
- }
- }
|