3 Коміти f473e4a9b4 ... 02bfc672d7

Автор SHA1 Опис Дата
  yangdamao 02bfc672d7 submit 7 місяців тому
  yangdamao ab4e597c08 Merge branch 'dev' 7 місяців тому
  yangdamao a31c97fe7f submit 7 місяців тому

+ 0 - 39
run-prod.sh

@@ -1,42 +1,3 @@
-#!/usr/bin/env bash
-# 定义应用组名
-group_name='zhongzheng'
-# 定义应用名称
-app_name='zhongzheng-saas-api'
-# 定义应用版本
-app_version='1.0-SNAPSHOT'
-# 定义应用环境
-profile_active='prod'
-echo '----copy jar----'
-docker stop ${app_name}
-echo '----stop container----'
-docker rm ${app_name}
-echo '----rm container----'
-docker rmi ${group_name}/${app_name}:${app_version}
-echo '----rm image----'
-# 打包编译docker镜像
-docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
-echo '----build image----'
-docker run -p 5055:5055 --name ${app_name} \
---restart=always \
--e 'spring.profiles.active'=${profile_active} \
--e TZ="Asia/Shanghai" \
--m 10240m \
---cpus=3 \
---log-opt max-size=50m \
---log-opt max-file=3 \
--v /etc/localtime:/etc/localtime \
--v /usr/share/fonts:/usr/share/fonts \
--v /data/logs/prod_api:/logs \
--v /mydata/app/${app_name}/logs:/var/logs \
--d ${group_name}/${app_name}:${app_version}
-echo '----start container----'
-
-echo "开始等待20秒..."
-# 1-10秒内随机
-sleep 5
-echo "等待后继续"
-
 #!/usr/bin/env bash
 # 定义应用组名
 group_admin_name='zhongzheng'

+ 11 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java

@@ -4,10 +4,7 @@ import java.util.List;
 import java.util.Arrays;
 
 import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
-import com.zhongzheng.modules.order.bo.OrderGoodsRefundAddBo;
-import com.zhongzheng.modules.order.bo.OrderGoodsRefundEditBo;
-import com.zhongzheng.modules.order.bo.OrderGoodsRefundQueryBo;
-import com.zhongzheng.modules.order.bo.TopOldOrderRefundBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
 import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund;
@@ -122,4 +119,14 @@ public class OrderGoodsRefundController extends BaseController {
     public AjaxResult<Void> confirmPeriod(@RequestBody List<OrderGoodsRefundEditBo> bo) {
         return toAjax(iOrderGoodsRefundService.confirmPeriod(bo) ? 1 : 0);
     }
+
+
+    /**
+     * 接口订单退款审核
+     */
+    @ApiOperation("接口订单退款审核")
+    @PostMapping("/api/check")
+    public AjaxResult<Void> apiOrderCheck(@RequestBody List<ApiOrderCheckBo> bo) {
+        return toAjax(iOrderGoodsRefundService.apiOrderCheck(bo) ? 1 : 0);
+    }
 }

+ 17 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/ApiOrderCheckBo.java

@@ -0,0 +1,17 @@
+package com.zhongzheng.modules.order.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ApiOrderCheckBo implements Serializable {
+
+    private String orderSn;
+
+    private Long orderGoodsId;
+
+    private Integer checkResult;
+
+    private String checkMsg;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderHandleMapper.java

@@ -8,6 +8,7 @@ import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderHandleOverVo;
 import com.zhongzheng.modules.order.vo.OrderHandleVo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -25,4 +26,5 @@ public interface OrderHandleMapper extends BaseMapper<OrderHandle> {
     @InterceptorIgnore(tenantLine = "true")
     List<OrderHandleOverVo> selectOverTimeOrderList(OrderHandleQueryBo bo);
 
+    BigDecimal getorderTotalPrice(String handleOrderSn);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java

@@ -92,4 +92,6 @@ public interface OrderMapper extends BaseMapper<Order> {
     @InterceptorIgnore(tenantLine = "true")
     String getOrderSnByXY(UserStudyConditionVo item);
 
+    @InterceptorIgnore(tenantLine = "true")
+    String getOrderSnByYW(String orderSn);
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java

@@ -77,4 +77,5 @@ public interface IOrderGoodsRefundService extends IService<OrderGoodsRefund> {
 
 	boolean handleRefundOrder(List<OrderGoodsVo> orderGoodsVos);
 
+	boolean apiOrderCheck(List<ApiOrderCheckBo> bo);
 }

+ 107 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -19,6 +19,7 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.activity.domain.ActivityOrder;
@@ -56,6 +57,8 @@ import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareToOldVo;
+import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheck;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog;
@@ -136,6 +139,8 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
     private ITopOldOrderCheckService topOldOrderCheckService;
     @Autowired
     private ITopOldOrderCheckLogService topOldOrderCheckLogService;
+    @Autowired
+    private ISysTenantService sysTenantService;
     @Value("${oldStudySys.shareCanclePath}")
     private String SHARE_CANCLE_PATH;
 
@@ -196,12 +201,16 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         }
         OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderSn,bo.getOrderSn())
                 .eq(OrderGoods::getGoodsId, bo.getGoodsId()).eq(OrderGoods::getOrderGoodsId, bo.getOrderGoodsId()));
+        Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, bo.getOrderSn()).last("limit 1"));
+        if (order.getOrderType() != 3 && order.getOrderFrom() != 7){
+            if(orderGoods.getPayStatus()!=3){
+                throw new CustomException("订单商品尚未完全收费");
+            }
+        }
         if(Validator.isEmpty(orderGoods)){
             throw new CustomException("订单商品数据错误");
         }
-        if(orderGoods.getPayStatus()!=3){
-            throw new CustomException("订单商品尚未完全收费");
-        }
+
         if(orderGoods.getRefundStatus()==2){
             throw new CustomException("订单商品已退款");
         }
@@ -213,12 +222,13 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
             throw new CustomException("该订单已参与红包活动,无法退款!");
         }
         //订单商品
-        Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn,bo.getOrderSn()));
         if(order.getStatus()==0){
             throw new CustomException("订单无效");
         }
-        if(order.getOrderFrom()!=2&&order.getOrderFrom()!=3){
-            throw new CustomException("不支持非客户端订单退款");
+        if (order.getOrderType() != 3 && order.getOrderFrom() != 7){
+            if(order.getOrderFrom()!=2&&order.getOrderFrom()!=3){
+                throw new CustomException("不支持非客户端订单退款");
+            }
         }
         //是否分销订单退款
         if (StringUtils.isNotBlank(orderGoods.getDistributionCode())){
@@ -632,8 +642,18 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
             lqw.eq( ClassGradeUser::getUserId, userId);
             iClassGradeUserService.remove(lqw);
             //班级人数变动通知旧系统
-            Goods goods = iGoodsService.getById(goodsId);
-            iClassGradeService.gradeChangeEjjjPeople(goods.getBusinessId(),gradeId);
+            Boolean flag = true;
+            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+            if (StringUtils.isNotBlank(tenantId)){
+                SysTenant tenant = sysTenantService.getById(Long.valueOf(tenantId));
+                if (ObjectUtils.isNotNull(tenant.getSevenClass()) && tenant.getSevenClass() == 0){
+                    flag = false;
+                }
+            }
+            if (flag){
+                Goods goods = iGoodsService.getById(goodsId);
+                iClassGradeService.gradeChangeEjjjPeople(goods.getBusinessId(),gradeId);
+            }
             //清除课程所有历史
             iUserStudyRecordService.delUserCourseHistory(userId,goodsId,gradeId,orderGoodsId);
         }
@@ -854,6 +874,85 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         return iOrderService.updateById(order);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean apiOrderCheck(List<ApiOrderCheckBo> bo) {
+        if (CollectionUtils.isEmpty(bo)){
+            throw new CustomException("退款信息不能为空!");
+        }
+        bo.forEach(item -> {
+            OrderGoodsRefund goodsRefund = getOne(new LambdaQueryWrapper<OrderGoodsRefund>()
+                    .eq(OrderGoodsRefund::getOrderSn, item.getOrderSn())
+                    .eq(OrderGoodsRefund::getOrderGoodsId, item.getOrderGoodsId())
+                    .eq(OrderGoodsRefund::getStatus, 1)
+                    .last("limit 1"));
+            if (ObjectUtils.isNull(goodsRefund)){
+                throw new CustomException(String.format("【%s】此订单没有退款信息,请检查!",item.getOrderSn()));
+            }
+            //退款审核
+            switch (item.getCheckResult()){
+                case 1://审核通过
+                    goodsRefund.setPeriodStatus(3);
+                    goodsRefund.setPeriodReviewTime(DateUtils.getNowTime());
+                    goodsRefund.setPeriodReviewUsername("接口订单退款系统审核");
+                    this.updateById(goodsRefund);
+                    //修改订单商品退款状态
+                    OrderGoods orderGoods = iOrderGoodsService.getById(item.getOrderGoodsId());
+                    orderGoods.setRefundStatus(2); //已退款
+                    orderGoods.setUpdateTime(DateUtils.getNowTime());
+                    iOrderGoodsService.updateById(orderGoods);
+
+                    Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, item.getOrderSn()));
+                    OrderGoodsQueryBo queryBo = new OrderGoodsQueryBo();
+                    queryBo.setOrderSn(order.getOrderSn());
+                    List<OrderGoodsVo> orderGoodsVoList = iOrderGoodsService.selectList(queryBo);
+                    boolean allRefund = true;
+                    for (OrderGoodsVo g : orderGoodsVoList) {
+                        if(g.getRefundStatus()!=2){
+                            allRefund = false;
+                        }
+                    }
+                    //都退款
+                    if(allRefund){
+                        order.setStatus(0);
+                        order.setUpdateTime(DateUtils.getNowTime());
+                        order.setOrderStatus(Order.REFUND_FULL);
+                    }else {
+                        //部分退款
+                        order.setUpdateTime(DateUtils.getNowTime());
+                        order.setOrderStatus(Order.REFUND_PART);
+                    }
+                    order.setOrderRefundStatus(3);
+                    iOrderService.updateById(order);
+                    Goods goods = iGoodsService.getById(orderGoods.getGoodsId());
+                    ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                            .eq(ClassGradeUser::getOrderGoodsId, item.getOrderGoodsId())
+                            .eq(ClassGradeUser::getStatus, 1)
+                            .eq(ClassGradeUser::getChangeGrade, 0)
+                            .last("limit 1"));
+                    //清除数据
+                    clearData(ObjectUtils.isNotNull(gradeUser)?gradeUser.getGradeId():0,order.getUserId(),item.getOrderGoodsId(),orderGoods.getGoodsId(),goods.getGoodsType());
+                    break;
+                case 2://审核不通过
+                    goodsRefund.setPeriodStatus(-2);
+                    goodsRefund.setPeriodReviewTime(DateUtils.getNowTime());
+                    goodsRefund.setPeriodReviewUsername("接口订单退款系统审核");
+                    this.updateById(goodsRefund);
+                    //修改订单商品退款状态
+                    OrderGoods orderGoods2 = iOrderGoodsService.getById(item.getOrderGoodsId());
+                    orderGoods2.setRefundStatus(3); //已退款
+                    orderGoods2.setUpdateTime(DateUtils.getNowTime());
+                    iOrderGoodsService.updateById(orderGoods2);
+                    Order order2 = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, item.getOrderSn()));
+                    order2.setUpdateTime(DateUtils.getNowTime());
+                    order2.setOrderRefundStatus(4);
+                    iOrderService.updateById(order2);
+            }
+
+        });
+        return true;
+    }
+
 //    public Boolean topOrderRefund(){
 //        if (ObjectUtils.isNull(bo.getRealRefundFee())){
 //            //如果实际退款金额为空 则默认全部退款

+ 11 - 9
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -64,7 +64,6 @@ import com.zhongzheng.modules.grade.vo.ClassPeriodVo;
 import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
-import com.zhongzheng.modules.order.domain.OrderInput;
 import com.zhongzheng.modules.order.mapper.OrderGoodsMapper;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderInputService;
@@ -74,7 +73,6 @@ import com.zhongzheng.modules.polyv.bo.PolyvLiveQueryBo;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysTenantService;
-import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
 import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
@@ -87,14 +85,12 @@ import com.zhongzheng.modules.user.domain.UserExamGoods;
 import com.zhongzheng.modules.user.domain.UserExamGoodsSupplement;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.*;
-import com.zhongzheng.modules.user.vo.SubjectStudyRecordVo;
 import net.polyv.common.v1.util.StringUtils;
 import net.polyv.live.v1.entity.channel.operate.LiveChannelBasicInfoResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -264,12 +260,18 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
             throw new CustomException("参数错误");
         }
         OrderGoods orderGoods = this.baseMapper.selectById(bo.getOrderGoodsId());
-        if(orderGoods.getStatus()==0||orderGoods.getRefundStatus()>0||orderGoods.getPayStatus()==1){
-            throw new CustomException("无法操作");
-        }
         OrderListVo order = iOrderService.queryDetailByOrderSn(orderGoods.getOrderSn());
-        if(order.getOrderFrom()>1&&order.getOrderFrom()<5){
-            throw new CustomException("线上订单无法操作");
+        if (order.getOrderType() == 3 && order.getOrderFrom() == 7 ){
+            if(orderGoods.getStatus()==0){
+                throw new CustomException("无法操作");
+            }
+        }else {
+            if(orderGoods.getStatus()==0||orderGoods.getRefundStatus()>0||orderGoods.getPayStatus()==1){
+                throw new CustomException("无法操作");
+            }
+            if(order.getOrderFrom()>1&&order.getOrderFrom()<5){
+                throw new CustomException("线上订单无法操作");
+            }
         }
         //关闭订单
         if(bo.getStatus()==0){

+ 8 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java

@@ -627,7 +627,14 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
                     //微信支付
                     goodsRefundList.forEach(refund -> {
                         Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, refund.getOrderSn()));
-                        Map<String, String> payResult = iWxPayService.refund(refund.getRefundSn(), order.getTransid(), refund.getRealRefundFee(), order.getPayPrice());
+                        BigDecimal payPrice = BigDecimal.ZERO;
+                        //计算订单总额
+                        if (ObjectUtils.isNotNull(order.getHandleOrderSn())){
+                            payPrice = payPrice.add(baseMapper.getorderTotalPrice(order.getHandleOrderSn()));
+                        }else {
+                            payPrice = payPrice.add(order.getPayPrice());
+                        }
+                        Map<String, String> payResult = iWxPayService.refund(refund.getRefundSn(), order.getTransid(), refund.getRealRefundFee(), payPrice);
                         if ("OK".equals(payResult.get("return_msg")) && Validator.isNotEmpty(payResult.get("refund_id"))) {
                             OrderGoods orderGoods = iOrderGoodsService.getById(refund.getOrderGoodsId());
                             Goods goods = iGoodsService.getById(orderGoods.getGoodsId());

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -3764,6 +3764,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 //查询学校订单号
                 String orderSn = baseMapper.getOrderSnByXY(item);
                 item.setOrderSnXY(orderSn);
+
+                //查询业务系统订单号
+                String orderSnYW = baseMapper.getOrderSnByYW(item.getOrderSn());
+                item.setOrderSnYW(orderSnYW);
             });
         }
         return userStudyCondition;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/UserStudyConditionVo.java

@@ -56,4 +56,7 @@ public class UserStudyConditionVo implements Serializable {
 
     @ApiModelProperty("学校订单号")
     private String orderSnXY;
+
+    @ApiModelProperty("业务系统订单号")
+    private String orderSnYW;
 }

+ 13 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderHandleMapper.xml

@@ -199,4 +199,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order_handle oh
         where 1=1 and oh.pay_status = 0 and  #{overTime} > oh.over_time
     </select>
+    <select id="getorderTotalPrice" parameterType="java.lang.String" resultType="java.math.BigDecimal">
+        SELECT
+            SUM(o.pay_price)
+        FROM
+            `order` o
+                LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+        WHERE
+            o.handle_order_sn = #{handleOrderSn}
+            AND og.pay_status != 1
+	        AND og.refund_status != 2
+	        AND o.`status` = 1
+	        AND og.`status` = 1
+    </select>
 </mapper>

+ 11 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

@@ -1082,6 +1082,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN major m ON g.major_id = m.id
         WHERE 1=1
             AND o.order_type = 3
+            AND og.status = 1
         <if test="educationTypeId != null and educationTypeId != ''">
             AND g.education_type_id = #{educationTypeId}
         </if>
@@ -1276,4 +1277,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LIMIT 1
     </select>
 
+    <select id="getOrderSnByYW" parameterType="java.lang.String" resultType="java.lang.String">
+        SELECT
+            ( SELECT too.order_sn FROM top_old_order too WHERE too.input_order_sn = o.input_order_sn AND too.`status` = 1 LIMIT 1 ) AS order_sn
+        FROM
+            `order` o
+        WHERE
+            o.order_sn = #{orderSn}
+          AND o.input_order_sn IS NOT NULL
+    </select>
+
 </mapper>