Ver código fonte

Merge branch 'dev'

yangdamao 7 meses atrás
pai
commit
39514340f7
22 arquivos alterados com 534 adições e 3 exclusões
  1. 1 1
      .drone-dev.yml
  2. 13 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  3. 15 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java
  4. 11 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserSubscribeController.java
  5. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CommonOrderInfoBo.java
  6. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OfflineOrderBo.java
  7. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OfflineOrderCheckBo.java
  8. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java
  9. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  10. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java
  11. 82 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  12. 58 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CommonOrderInfoVo.java
  13. 48 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OfflineOrderVo.java
  14. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java
  15. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceOcrServiceImpl.java
  16. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/SubscribeOfflineBo.java
  17. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java
  18. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserSubscribeMapper.java
  19. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserSubscribeService.java
  20. 72 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  21. 96 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml
  22. 23 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

+ 1 - 1
.drone-dev.yml

@@ -28,7 +28,7 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
       host: 192.168.1.222 # 远程连接地址
       username: root # 远程连接账号
       password:
-        from_secret: ssh_password # 从Secret中读取SSH密码改变
+        from_secret: ssh_password2 # 从Secret中读取SSH密码改变
       port: 22 # 远程连接端口
       command_timeout: 5m # 远程执行命令超时时间
       script:

+ 13 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -65,6 +65,7 @@ import com.zhongzheng.modules.grade.vo.ClassPeriodStudentVo;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
 import com.zhongzheng.modules.order.bo.CommonGradeBo;
 import com.zhongzheng.modules.order.bo.CommonOrderBo;
+import com.zhongzheng.modules.order.bo.CommonOrderInfoBo;
 import com.zhongzheng.modules.order.bo.TopOldOrderRefundBo;
 import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
@@ -72,6 +73,7 @@ import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.CommonGradeVo;
+import com.zhongzheng.modules.order.vo.CommonOrderInfoVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.sdk.service.IZsBankService;
 import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
@@ -973,4 +975,15 @@ public class CommonController extends BaseController {
         List<CommonGradeVo> list = iOrderService.getCommonGrade(bo);
         return AjaxResult.success(list);
     }
+
+
+    @ApiOperation("外部获取订单信息接口")
+    @PostMapping("/common/free/order/info")
+    public AjaxResult<List<CommonOrderInfoVo>> getCommonOrderInfo(@RequestBody CommonOrderInfoBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            throw new CustomException("签名错误");
+        }
+        List<CommonOrderInfoVo> list = iOrderService.getCommonOrderInfo(bo);
+        return AjaxResult.success(list);
+    }
 }

+ 15 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -264,4 +264,19 @@ public class OrderController extends BaseController {
         iOrderService.handleRepetitionOrder(bo);
         return AjaxResult.success();
     }
+
+    @ApiOperation("补考订单列表")
+    @GetMapping("/offline/list")
+    public TableDataInfo<OfflineOrderVo> getOfflineOrderList(OfflineOrderBo bo) {
+        startPage();
+        List<OfflineOrderVo> list = iOrderService.getOfflineOrderList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("补考订单审核")
+    @PostMapping("/offline/check")
+    public AjaxResult<Void> checkOfflineOrder(@RequestBody OfflineOrderCheckBo bo) {
+        return toAjax(iOrderService.checkOfflineOrder(bo) ? 1 : 0);
+    }
+
 }

+ 11 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserSubscribeController.java

@@ -77,4 +77,15 @@ public class UserSubscribeController extends BaseController {
     }
 
 
+    /**
+     * 新增用戶線下約考次數
+     */
+    @ApiOperation("新增用戶線下約考次數")
+    @PostMapping("/save/offline")
+    public AjaxResult<Void> saveSubscribeOffline(@RequestBody SubscribeOfflineBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iUserSubscribeService.saveSubscribeOffline(bo) ? 1 : 0);
+    }
+
 }

+ 37 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CommonOrderInfoBo.java

@@ -0,0 +1,37 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月06日 15:23
+ */
+@Data
+public class CommonOrderInfoBo implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    @ApiModelProperty("商户ID")
+    private String tenantId;
+
+    @ApiModelProperty("业务层次")
+    private String businessName;
+
+    @ApiModelProperty("专业名称")
+    private String majorName;
+
+    @ApiModelProperty("订单号集合")
+    private List<String> orderSnList;
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OfflineOrderBo.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class OfflineOrderBo implements Serializable {
+
+    private String userName;
+
+    @ApiModelProperty("审核结果:1通过 2不通过 3撤销")
+    private Integer checkStatus;
+}

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OfflineOrderCheckBo.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月26日 9:25
+ */
+@Data
+public class OfflineOrderCheckBo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private List<String> orderSnList;
+    @ApiModelProperty("审核结果:1通过 2不通过 3撤销")
+    private Integer checkResult;
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java

@@ -124,6 +124,9 @@ private static final long serialVersionUID=1L;
     /** 补考用的订单商品ID */
     private Long replenishSign;
 
+    /** 预约考试ID */
+    private Long examSign;
+
     /** 完成日期 */
     @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long finishTime;

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

@@ -79,4 +79,8 @@ public interface OrderMapper extends BaseMapper<Order> {
     Long getGoodsIdByBusiness(GoodsByBusinessQuery query);
 
     List<CommonGradeVo> getGradeByBusiness(CommonGradeBo bo);
+
+    List<OfflineOrderVo> getOfflineOrderList(OfflineOrderBo bo);
+
+    List<CommonOrderInfoVo> getCommonOrderInfo(CommonOrderInfoBo bo);
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java

@@ -140,4 +140,10 @@ public interface IOrderService extends IService<Order> {
     String commonWithoutOrder(CommonOrderBo bo);
 
 	List<CommonGradeVo> getCommonGrade(CommonGradeBo bo);
+
+	List<OfflineOrderVo> getOfflineOrderList(OfflineOrderBo bo);
+
+	boolean checkOfflineOrder(OfflineOrderCheckBo bo);
+
+    List<CommonOrderInfoVo> getCommonOrderInfo(CommonOrderInfoBo bo);
 }

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

@@ -79,6 +79,7 @@ import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderInvoiceVo;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
+import com.zhongzheng.modules.user.bo.UserSubscribeAddBo;
 import com.zhongzheng.modules.user.domain.*;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.vo.UserVo;
@@ -3635,6 +3636,87 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return list;
     }
 
+    @Override
+    public List<OfflineOrderVo> getOfflineOrderList(OfflineOrderBo bo) {
+        return baseMapper.getOfflineOrderList(bo);
+    }
+
+    @Override
+    public boolean checkOfflineOrder(OfflineOrderCheckBo bo) {
+        if (CollectionUtils.isEmpty(bo.getOrderSnList())){
+            throw new CustomException("订单号不能为空");
+        }
+        bo.getOrderSnList().forEach(item -> {
+            Order order = getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, item));
+            if (ObjectUtils.isNull(order)){
+                throw new CustomException("订单号不存在,请检查!");
+            }
+            switch (bo.getCheckResult()){
+                case 1://通过
+                    order.setOrderStatus(1);
+                    order.setStatus(1);
+                    order.setFinishStatus(1);
+                    order.setPayStatus(2);
+                    order.setCheckStatus(1);
+                    order.setFinishTime(DateUtils.getNowTime());
+                    order.setPayType(8);
+                    order.setPayTime(DateUtils.getNowTime());
+                    List<OrderGoods> list = iOrderGoodsService.list(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderSn, order.getOrderSn()));
+                    if (CollectionUtils.isNotEmpty(list)){
+                        list.forEach(orderGoods -> {
+                            orderGoods.setStatus(1);
+                            orderGoods.setPayStatus(3);
+                            iOrderGoodsService.updateById(orderGoods);
+                            //补充补考次数
+                            if (ObjectUtils.isNotNull(orderGoods.getReplenishSign())){
+                                UserExamGoods examGoods = userExamGoodsService.getOne(new LambdaQueryWrapper<UserExamGoods>().eq(UserExamGoods::getOrderGoodsId, orderGoods.getReplenishSign()).last("limit 1"));
+                                if (ObjectUtils.isNotNull(examGoods)){
+                                    examGoods.setExamNumber(examGoods.getExpendNumber() + 1);
+                                    userExamGoodsService.updateById(examGoods);
+                                }
+                            }
+                            //新增考试预约
+                            if (ObjectUtils.isNotNull(orderGoods.getExamSign())){
+                                UserSubscribeAddBo addBo = new UserSubscribeAddBo();
+                                OrderGoods two = iOrderGoodsService.getById(orderGoods.getReplenishSign());
+                                addBo.setOrderGoodsId(two.getOrderGoodsId());
+                                addBo.setGoodsId(two.getGoodsId());
+                                addBo.setUserId(order.getUserId());
+                                addBo.setApplyId(orderGoods.getExamSign());
+                                try {
+                                    iUserSubscribeService.saveByAddBo(addBo);
+                                }catch (Exception e){
+                                    throw new CustomException(e.getMessage());
+                                }
+                            }
+                        });
+                    }
+                    updateById(order);
+                    break;
+                case 2://不通过
+                    order.setCheckStatus(2);
+                    updateById(order);
+                    break;
+                case 3://撤销
+                    order.setCheckStatus(3);
+                    updateById(order);
+                    break;
+            }
+        });
+        return true;
+    }
+
+    @Override
+    public List<CommonOrderInfoVo> getCommonOrderInfo(CommonOrderInfoBo bo) {
+        SysTenant tenant = iSysTenantService.getById(bo.getTenantId());
+        if (ObjectUtils.isNull(tenant)){
+            throw new CustomException("商户ID有误!请检查");
+        }
+        ServletUtils.getResponse().setHeader("TenantId",bo.getTenantId());
+        List<CommonOrderInfoVo> infoVos = baseMapper.getCommonOrderInfo(bo);
+        return infoVos;
+    }
+
     /**
      * 根据身份证号码判断性别
      *

+ 58 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CommonOrderInfoVo.java

@@ -0,0 +1,58 @@
+package com.zhongzheng.modules.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月06日 15:23
+ */
+@Data
+public class CommonOrderInfoVo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private Long orderSn;
+
+    @ApiModelProperty("下单时间")
+    private String orderTime;
+
+    @ApiModelProperty("学员姓名")
+    private String userName;
+
+    @ApiModelProperty("身份证号码")
+    private String userCard;
+
+    @ApiModelProperty("手机号码")
+    private String userPhone;
+
+    @ApiModelProperty("公司名称")
+    private String companyName;
+
+    @ApiModelProperty("课程名称")
+    private String goodsName;
+
+    @ApiModelProperty("年份")
+    private String sevenYear;
+
+    @ApiModelProperty("业务层次")
+    private String businessName;
+
+    @ApiModelProperty("专业")
+    private String majorName;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("班级状态")
+    private String classStatus;
+
+    @ApiModelProperty("班级结束时间")
+    private String classEndTime;
+
+    @ApiModelProperty("学习进度")
+    private String studySchedule;
+
+
+}

+ 48 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OfflineOrderVo.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.modules.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class OfflineOrderVo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private String OrderSn;
+
+    @ApiModelProperty("订单时间")
+    private Long createTime;
+
+    @ApiModelProperty("学员ID")
+    private Long userId;
+
+    @ApiModelProperty("学员名称")
+    private String userName;
+
+    @ApiModelProperty("手机号码")
+    private String userPhone;
+
+    @ApiModelProperty("身份证")
+    private String userCard;
+
+    @ApiModelProperty("公司名")
+    private String companyName;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("业务层次")
+    private String businessName;
+
+    @ApiModelProperty("预约考试名称")
+    private String examApplyName;
+
+    @ApiModelProperty("订单价格")
+    private BigDecimal orderPrice;
+
+    @ApiModelProperty("审核状态:0待审核,1已通过,2未通过,3已撤销")
+    private Integer checkStatus;
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java

@@ -135,4 +135,6 @@ private static final long serialVersionUID=1L;
     private Integer detectLiveSign;
     /** 是否检测快进标识:1开启 0关闭*/
     private Integer fastForwardSign;
+    /** 培训学校名称*/
+    private String schoolName;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceOcrServiceImpl.java

@@ -31,6 +31,7 @@ import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
 import com.zhongzheng.modules.tencentcloud.bo.InvoiceQueryBo;
 import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
+import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserDeviceWhite;
 import com.zhongzheng.modules.user.domain.UserPhotoDevice;
 import com.zhongzheng.modules.user.service.IUserDeviceWhiteService;
@@ -147,6 +148,11 @@ public class FaceOcrServiceImpl implements IFaceOcrService {
     }
 
     private void detectLiveFaceCheck(FaceQueryBo bo) {
+        User user = iUserService.getById(bo.getUserId());
+        if (ObjectUtils.isNotNull(user) && user.getDetectLiveSign() == 0){
+            //不需要活体检测
+            return;
+        }
         Credential cred = new Credential(SecretId, SecretKey);
         ClientProfile clientProfile = new ClientProfile();
         clientProfile.setSignMethod(clientProfile.SIGN_TC3_256);

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/SubscribeOfflineBo.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SubscribeOfflineBo implements Serializable {
+
+    private Long userId;
+
+    private Long appId;
+
+    private Long orderGoodsId;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java

@@ -237,4 +237,6 @@ private static final long serialVersionUID=1L;
     private String graduationTime;
 
     private String passwordAes;
+
+    private Integer detectLiveSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserSubscribeMapper.java

@@ -84,4 +84,7 @@ public interface UserSubscribeMapper extends BaseMapper<UserSubscribe> {
 
     List<UserPromiseRecordVo> listPromise(UserPromiseRecordBo bo);
 
+    Long getReplenishmentExam(Long goodsId);
+
+    Long getCountOfflineOrder(Long orderGoodsId);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserSubscribeService.java

@@ -131,4 +131,6 @@ public interface IUserSubscribeService extends IService<UserSubscribe> {
 	List<UserPromiseRecordVo> listPromise(UserPromiseRecordBo bo);
 
 	void updateStudentImageSpin(UpdateStudentImageBo bo);
+
+	boolean saveSubscribeOffline(SubscribeOfflineBo bo);
 }

+ 72 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -59,6 +59,7 @@ import com.zhongzheng.modules.exam.vo.ExamApplyVo;
 import com.zhongzheng.modules.exam.vo.ExamSessionVo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsQuestionRel;
+import com.zhongzheng.modules.goods.domain.QuestionMerchant;
 import com.zhongzheng.modules.goods.service.IGoodsQuestionRelService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
@@ -71,8 +72,10 @@ import com.zhongzheng.modules.inform.service.IInformRemindService;
 import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.inform.vo.InformRemindBusinessVo;
 import com.zhongzheng.modules.inform.vo.InformRemindVo;
+import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
+import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysTask;
 import com.zhongzheng.modules.system.domain.SysTenant;
@@ -180,6 +183,8 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
     @Autowired
     private IMajorService majorService;
 
+    @Autowired
+    private IOrderService iOrderService;
     @Autowired
     private IOrderGoodsService iOrderGoodsService;
     @Autowired
@@ -2836,6 +2841,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
     public String subRecordUserExport(SubUserExportBo bo) {
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
         SysTenant sysTenant = iSysTenantService.getById(Long.valueOf(tenantId));
+        String schoolName = ObjectUtils.isNotNull(sysTenant.getSchoolName()) ? sysTenant.getSchoolName() : "广东省祥粤建设职业培训学校";
         if (ObjectUtils.isNotNull(sysTenant.getExamRoom()) && sysTenant.getExamRoom() == 1) {
             //公用祥粤考场
             List<SysTenant> list = iSysTenantService
@@ -2866,7 +2872,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             if (!dirw.exists()) {
                 dirw.mkdirs();
             }
-            String photoPath = majorPath + "/" + "广东省祥粤建设职业培训学校";
+            String photoPath = majorPath + "/" + schoolName;
             File dirw2 = new File(photoPath);
             if (!dirw2.exists()) {
                 dirw2.mkdirs();
@@ -2932,7 +2938,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 examApplyExports.add(export);
             });
             //打包zip
-            String zipPath = majorPath + "/" + "广东省祥粤建设职业培训学校.zip";
+            String zipPath = majorPath + "/" + String.format("%s.zip",schoolName);
             FileUtils.toZip(zipPath, photoPath, true);
             //删除本地资源
             Path pathStr = Paths.get(photoPath);
@@ -3062,6 +3068,70 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
         }
     }
 
+    @Override
+    public boolean saveSubscribeOffline(SubscribeOfflineBo bo) {
+        OrderGoods orderGoods = iOrderGoodsService.getById(bo.getOrderGoodsId());
+        if (ObjectUtils.isNull(orderGoods)){
+            throw new CustomException("訂單獲取失敗!");
+        }
+        //校验是否已申请
+        Long count = baseMapper.getCountOfflineOrder(bo.getOrderGoodsId());
+        if (count > 0){
+            throw new CustomException("您已申请补考次数,正在等待审核,请勿重复申请!");
+        }
+        User user = iUserService.getById(bo.getUserId());
+        if (ObjectUtils.isNull(user)){
+            throw new CustomException("用戶獲取失敗!");
+        }
+        //判斷是否喲補充考試的商品
+        Long goodsId = baseMapper.getReplenishmentExam(orderGoods.getGoodsId());
+        if (ObjectUtils.isNull(goodsId)){
+            throw new CustomException("请先配置补考商品");
+        }
+        Goods goods = iGoodsService.getById(goodsId);
+        //创建补考待审订单
+        Order order = new Order();
+        //生成订单号
+        String out_trade_no = DateUtils.getDateOrderSn();
+        order.setOrderSn(out_trade_no);
+        //学员预约信息
+        order.setUserId(user.getUserId());
+        order.setOrderPrice(orderGoods.getGoodsRealPrice());
+        order.setOrderStatus(0);
+        order.setCreateTime(DateUtils.getNowTime());
+        order.setUpdateTime(DateUtils.getNowTime());
+        order.setOrderType(6);
+        order.setPayPrice(goods.getStandPrice());
+        order.setOrderFrom(12);
+        order.setStatus(0);
+        order.setOrderBase(1);
+        order.setPayStatus(0);
+        order.setCheckStatus(0);
+        order.setOrderRefundStatus(1);
+        order.setInvoiceStatus(0);
+        order.setFinishStatus(0);
+        order.setOperationType(1);
+        iOrderService.save(order);
+        //订单商品
+        OrderGoods add = new OrderGoods();
+        add.setOrderSn(out_trade_no);
+        add.setGoodsId(goods.getGoodsId());
+        add.setGoodsYear(goods.getYear().toString());
+        add.setGoodsRealPrice(goods.getStandPrice());
+        add.setGoodsPrice(goods.getStandPrice());
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setStatus(0);
+        add.setGoodsReceived(goods.getStandPrice());
+        add.setRefundStatus(0);
+        add.setPayStatus(1);
+        add.setReplenishSign(orderGoods.getOrderGoodsId());
+        add.setExamSign(bo.getAppId());
+        iOrderGoodsService.save(add);
+
+        return true;
+    }
+
     private String applyTimeTransition(String time) {
         List<String> collect = Arrays.stream(time.split(":")).collect(Collectors.toList());
         StringBuffer result = new StringBuffer();

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

@@ -945,4 +945,100 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           ORDER BY cg.create_time DESC
     </select>
 
+    <select id="getOfflineOrderList" parameterType="com.zhongzheng.modules.order.bo.OfflineOrderBo" resultType="com.zhongzheng.modules.order.vo.OfflineOrderVo">
+        SELECT
+            o.order_sn,
+            og.create_time,
+            u.user_id,
+            u.realname AS userName,
+            AES_DECRYPT(UNHEX(u.telphone),'base20230213zzkj') AS userPhone,
+            AES_DECRYPT(UNHEX(u.id_card),'base20230213zzkj') AS userCard,
+            u.company_name,
+            g.goods_name,
+            CONCAT(cet.education_name,'-',cb.business_name,'-',cpt.project_name) AS businessName,
+            og.goods_price AS orderPrice,
+            o.check_status,
+            ea.apply_name AS examApplyName
+        FROM
+            `order` o
+                LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+                LEFT JOIN `user` u ON o.user_id = u.user_id
+                LEFT JOIN goods g ON og.goods_id = g.goods_id
+                LEFT JOIN course_business cb ON g.business_id = cb.id
+                LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+                LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+                LEFT JOIN exam_apply ea ON og.exam_sign = ea.apply_id
+        WHERE
+            o.order_type = 6
+            AND o.order_from = 12
+            <if test="userName != null and userName != ''">
+                AND u.realname like concat('%', #{userName}, '%')
+            </if>
+            <if test="checkStatus != null and checkStatus != ''">
+                AND o.check_status = #{checkStatus}
+            </if>
+            ORDER BY og.create_time DESC
+    </select>
+
+    <select id="getCommonOrderInfo" parameterType="com.zhongzheng.modules.order.bo.CommonOrderInfoBo" resultType="com.zhongzheng.modules.order.vo.CommonOrderInfoVo">
+        SELECT
+            o.order_sn,
+            FROM_UNIXTIME( og.create_time, '%Y-%m-%d %H:%i:%s' ) AS orderTime,
+            u.realname AS userName,
+            AES_DECRYPT(UNHEX(u.id_card),'base20230213zzkj') AS userCard,
+            AES_DECRYPT(UNHEX(u.telphone),'base20230213zzkj') AS userPhone,
+            u.company_name AS companyName,
+            g.goods_name AS goodsName,
+            g.seven_year AS sevenYear,
+            CONCAT(cet.education_name,cb.business_name,cpt.project_name) AS businessName,
+            m.category_name AS majorName,
+            cg.class_name AS className,
+            CASE
+                WHEN cg.class_status = 1 THEN '已开班'
+                WHEN cg.class_status = 0 THEN '未开班'
+                ELSE '其他' END AS classStatus,
+            FROM_UNIXTIME( cg.class_end_time, '%Y-%m-%d %H:%i:%s' ) AS classEndTime,
+            CONCAT((
+                ((SELECT COUNT(DISTINCT ubr.module_id,ubr.chapter_id,ubr.exam_id) FROM user_bank_record ubr  where ubr.`status`=1 and ubr.report_status=1 and ubr.grade_id = og.grade_id and ubr.order_goods_id = og.order_goods_id and ubr.user_id = cgu.user_id and ubr.current_status = 1) +
+                 (
+                     SELECT
+                         COUNT( DISTINCT course_id, module_id, chapter_id, section_id )
+                     FROM
+                         user_study_record
+                     WHERE
+                         current_status = 1
+                       AND grade_id = og.grade_id
+                       AND order_goods_id = og.order_goods_id
+                       AND user_id = o.user_id
+                       AND status = 1
+                       AND goods_id = og.goods_id
+                 ))
+                ),"/",og.course_num + og.exam_num) AS studySchedule
+        FROM
+            `order` o
+                LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+                LEFT JOIN goods g ON og.goods_id = g.goods_id
+                LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+                LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+                LEFT JOIN course_business cb ON g.business_id = cb.id
+                LEFT JOIN major m ON g.major_id = m.id
+                LEFT JOIN `user` u ON o.user_id = u.user_id
+                LEFT JOIN class_grade_user cgu ON og.order_goods_id = cgu.order_goods_id
+                LEFT JOIN class_grade cg ON cgu.grade_id = cg.grade_id
+        WHERE
+            1=1
+            AND o.tenant_id = #{tenantId}
+            AND og.pay_status != 1
+	        AND og.refund_status != 2
+	        AND o.`status` = 1
+	        AND og.`status` = 1
+	        AND cgu.`status` = 1
+            <if test="orderSnList != null and orderSnList.size()!=0">
+                AND o.order_sn in
+                <foreach collection="orderSnList" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+    </select>
+
 </mapper>

+ 23 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

@@ -917,5 +917,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND g.goods_name LIKE concat('%',#{goodsName},'%')
         </if>
     </select>
+    <select id="getReplenishmentExam" parameterType="java.lang.Long" resultType="java.lang.Long">
+        SELECT
+            g.goods_id
+        FROM
+            goods g
+                LEFT JOIN ( SELECT * FROM goods WHERE goods_id = #{goodsId} ) a ON g.business_id = a.business_id AND g.project_id = a.project_id AND g.education_type_id = a.education_type_id
+        WHERE
+            g.`status` = 1
+            AND g.goods_status = 1
+            AND g.goods_type = 3
+            LIMIT 1
+    </select>
+
+    <select id="getCountOfflineOrder" parameterType="java.lang.Long" resultType="java.lang.Long">
+        SELECT
+            COUNT(*)
+        FROM
+            order_goods og
+                LEFT JOIN `order` o ON og.order_sn = o.order_sn
+        WHERE
+            og.replenish_sign = #{orderGoodsId}
+          AND o.check_status = 0
+    </select>
 
 </mapper>