3 Commits f473e4a9b4 ... 02bfc672d7

Tác giả SHA1 Thông báo Ngày
  yangdamao 02bfc672d7 submit 10 tháng trước cách đây
  yangdamao ab4e597c08 Merge branch 'dev' 10 tháng trước cách đây
  yangdamao a31c97fe7f submit 10 tháng trước cách đây

+ 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>