he2802 1 yıl önce
ebeveyn
işleme
75e7274967
39 değiştirilmiş dosya ile 1248 ekleme ve 174 silme
  1. 1 0
      run-prod.sh
  2. 21 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  3. 10 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java
  4. 10 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  5. 6 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsController.java
  6. 16 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInputController.java
  7. 4 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/constant/Constants.java
  8. 10 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java
  9. 88 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/poi/ExcelUtil.java
  10. 22 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  11. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java
  12. 87 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserAccountBo.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  14. 92 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  15. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  16. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  17. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeUserService.java
  18. 128 112
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  19. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  20. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInputQueryBo.java
  21. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderSubjectUserBuyBo.java
  22. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInput.java
  23. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  24. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsService.java
  25. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderInputService.java
  26. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  27. 229 31
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInputServiceImpl.java
  28. 36 9
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  29. 80 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInputImpotVo.java
  30. 143 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderListImportVo.java
  31. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserQueryBo.java
  32. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  33. 28 10
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  34. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyExportVo.java
  35. 114 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  36. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  37. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderInputMapper.xml
  38. 18 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml
  39. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

+ 1 - 0
run-prod.sh

@@ -32,3 +32,4 @@ docker run \
 -v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
+

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

@@ -21,6 +21,7 @@ import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUploadUtils;
 import com.zhongzheng.common.utils.file.FileUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.config.ServerConfig;
 import com.zhongzheng.framework.web.service.WxLoginService;
@@ -80,12 +81,14 @@ import com.zhongzheng.modules.system.vo.SysTenantVo;
 import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
 import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.tencentcloud.service.IVodService;
+import com.zhongzheng.modules.top.order.bo.TopOldOrderCustomerBo;
 import com.zhongzheng.modules.top.user.bo.TopSysTenantRegisterAddBo;
 import com.zhongzheng.modules.top.user.service.ITopSysTenantRegisterService;
 import com.zhongzheng.modules.user.bo.UserBusinessGoodsBo;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
 import com.zhongzheng.modules.user.vo.UserBusinessGoodsVo;
+import com.zhongzheng.modules.user.vo.UserStudyExportVo;
 import com.zhongzheng.modules.user.vo.UserStudyTimeVo;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
@@ -318,6 +321,17 @@ public class CommonController extends BaseController {
         return AjaxResult.success(url);
     }
 
+
+    @ApiOperation("创建用户账号")
+    @PostMapping("common/create/account")
+    public AjaxResult createUserAccount(@RequestBody UserAccountBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        String url = iGoodsService.createUserAccount(bo);
+        return AjaxResult.success(url);
+    }
+
     @ApiOperation("七大员学员资料批量变更")
     @PostMapping("common/apply/user/profile")
     public AjaxResult updateExamUserProfile(MultipartFile file) {
@@ -915,4 +929,11 @@ public class CommonController extends BaseController {
         return toAjax(iGoodsService.updateExamBusiness() ? 1 : 0);
     }
 
+    @ApiOperation("获取用户同专业下课程")
+    @PostMapping("/common/free/studyRecord")
+    public AjaxResult<Void> studyRecord(MultipartFile file) {
+        List<UserStudyExportVo> customerBos = EasyPoiUtil.importExcel(file,0,1,UserStudyExportVo.class);
+        return AjaxResult.success(iUserService.studyRecord(customerBos));
+    }
+
 }

+ 10 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java

@@ -235,10 +235,16 @@ public class CourseController extends BaseController {
             return  AjaxResult.success(listVos);
         }
         for(CourseProgressQueryBo queryBo : bo.getTelphoneList()){
-            User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .and(x -> x.eq(StringUtils.isNotBlank(queryBo.getTelphone()),User::getTelphone,EncryptHandler.encrypt(queryBo.getTelphone())).or()
-                    .eq(StringUtils.isNotBlank(queryBo.getIdCard()),User::getIdCard,EncryptHandler.encrypt(queryBo.getIdCard())))
-                    .last("limit 1"));
+            User user = null;
+            if (ObjectUtils.isNotNull(queryBo.getIdCard())){
+                user = iUserService.getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getIdCard,EncryptHandler.encrypt(queryBo.getIdCard()))
+                        .last("limit 1"));
+            }else if (ObjectUtils.isNotNull(queryBo.getTelphone())){
+                user = iUserService.getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getTelphone,EncryptHandler.encrypt(queryBo.getTelphone()))
+                        .last("limit 1"));
+            }
             if(Validator.isEmpty(user)){
                 continue;
             }

+ 10 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -30,6 +30,7 @@ import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.order.bo.OrderQueryBo;
 import com.zhongzheng.modules.order.vo.OrderListExportVo;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.models.auth.In;
 import lombok.RequiredArgsConstructor;
@@ -207,6 +208,15 @@ public class ClassGradeController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 统计班级学员学时推送数量
+     */
+    @ApiOperation("统计班级学员学时推送数量")
+    @GetMapping("/count/periodPlush")
+    public AjaxResult getPeriodPlush(ClassGradeUserQueryBo bo) {
+        HashMap<String, Object> plush = iClassGradeService.getPlush(bo);
+        return AjaxResult.success(plush);
+    }
     /**
      * 查询所有班级用户列表
      */

+ 6 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsController.java

@@ -205,4 +205,10 @@ public class OrderGoodsController extends BaseController {
     public AjaxResult<List<OrderUserGoodsVo>> listUserSubjectGoods(OrderSubjectUserBuyBo bo) {
         return AjaxResult.success(iOrderGoodsService.listUserSubjectGoods(bo));
     }
+
+    @ApiOperation("业务层次,科目查询用户的购买商品列表")
+    @PostMapping("/listUserSubjectGoods/new")
+    public AjaxResult<List<OrderUserGoodsVo>> listUserSubjectGoodsNew(@RequestBody OrderSubjectUserBuyBo bo) {
+        return AjaxResult.success(iOrderGoodsService.listUserSubjectGoodsNew(bo));
+    }
 }

+ 16 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInputController.java

@@ -1,7 +1,11 @@
 package com.zhongzheng.controller.order;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Arrays;
+import java.util.Map;
 
 import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.core.domain.model.LoginUser;
@@ -11,6 +15,8 @@ import com.zhongzheng.framework.web.service.TokenService;
 import com.zhongzheng.modules.order.bo.OrderInputAddBo;
 import com.zhongzheng.modules.order.bo.OrderInputEditBo;
 import com.zhongzheng.modules.order.bo.OrderInputQueryBo;
+import com.zhongzheng.modules.order.bo.OrderInputWrongImportBo;
+import com.zhongzheng.modules.order.domain.OrderInput;
 import com.zhongzheng.modules.order.service.IOrderInputService;
 import com.zhongzheng.modules.order.vo.OrderInputVo;
 import lombok.RequiredArgsConstructor;
@@ -119,5 +125,14 @@ public class OrderInputController extends BaseController {
         List<OrderInputVo> list = iOrderInputService.getUserGoodsList(bo);
         return getDataTable(list);
     }
-
+    /**
+     * 导出后台订单
+     */
+    @ApiOperation("导出错误录入订单")
+    @PreAuthorize("@ss.hasPermi('system:profile:export')")
+    @Log(title = "导出错误录入订单", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportInputOrder")
+    public AjaxResult exportInputOrder(@RequestBody List<String> ids) {
+        return AjaxResult.success(iOrderInputService.excelImport(ids));
+    }
 }

+ 4 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/constant/Constants.java

@@ -160,4 +160,8 @@ public class Constants
      * 资源映射路径 前缀
      */
     public static final String RESOURCE_PREFIX = "/profile";
+    /**
+     * 序号
+     */
+    public static final Integer NUMBER = 1;
 }

+ 10 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java

@@ -63,6 +63,16 @@ public class EncryptHandler  implements TypeHandler<String> {
         return SecureUtil.aes(KEYS).decryptStr(value);
     }
 
+    public static String decryptTwo(String value) {
+        if (null == value) {
+            return null;
+        }
+        if (value.length()<=20 ) {
+            return value;
+        }
+        return SecureUtil.aes(KEYS).decryptStr(value);
+    }
+
     public static String encrypt(String value){
         if (null == value) {
             return null;

+ 88 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/poi/ExcelUtil.java

@@ -18,7 +18,9 @@ import com.zhongzheng.common.utils.DictUtils;
 import com.zhongzheng.common.utils.file.FileTypeUtils;
 import com.zhongzheng.common.utils.file.ImageUtils;
 import com.zhongzheng.common.utils.reflect.ReflectUtils;
+import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellRangeAddressList;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
@@ -30,6 +32,8 @@ import java.io.*;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -552,6 +556,29 @@ public class ExcelUtil<T>
         return sheetsList;
     }
 
+
+    public List<Map<String, Object>> exportEasyData2(List<T> list,List<T> list1)
+    {
+        List<Map<String, Object>> sheetsList = new ArrayList<>();
+        ExportParams deptExportParams = new ExportParams();
+        deptExportParams.setSheetName("表1");
+        Map<String, Object> deptExportMap = new HashMap<>();
+        deptExportMap.put("title", deptExportParams);
+        deptExportMap.put("entity", clazz);
+        // sheet中要填充得数据
+        deptExportMap.put("data", list);
+
+        ExportParams deptExportParams1 = new ExportParams();
+        deptExportParams.setSheetName("表2");
+        Map<String, Object> deptExportMap1 = new HashMap<>();
+        deptExportMap1.put("title", deptExportParams1);
+        deptExportMap1.put("entity", clazz);
+        // sheet中要填充得数据
+        deptExportMap1.put("data", list1);
+        sheetsList.add(deptExportMap);
+        sheetsList.add(deptExportMap1);
+        return sheetsList;
+    }
     public String userProfileExport(String filePath, String sheetName)
     {
         OutputStream out = null;
@@ -1236,6 +1263,66 @@ public class ExcelUtil<T>
         }
     }
 
+    public void exportEasyExcelUtil(List<T> list,Class<T> clazz,String path)
+    {
+        OutputStream out = null;
+        //     Workbook workbook = null;
+        ExportParams deptExportParams = new ExportParams();
+        // 设置sheet得名称
+        deptExportParams.setSheetName("表1");
+        String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        Map<String, Object> deptExportMap = new HashMap<>();
+        deptExportMap.put("title", deptExportParams);
+        deptExportMap.put("entity", clazz);
+        // sheet中要填充得数据
+        deptExportMap.put("data", list);
+        List<Map<String, Object>> sheetsList = new ArrayList<>();
+        sheetsList.add(deptExportMap);
+        try
+        {
+            Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
+            File desc = new File(path);
+            if (!desc.getParentFile().exists())
+            {
+                desc.getParentFile().mkdirs();
+            }
+            out = new FileOutputStream(path);
+            workbook.write(out);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            log.error("导出Excel异常{}", e.getMessage());
+            throw new CustomException("导出Excel失败,请联系网站管理员!");
+        }
+        finally
+        {
+
+            if (wb != null)
+            {
+                try
+                {
+                    wb.close();
+                }
+                catch (IOException e1)
+                {
+                    e1.printStackTrace();
+                }
+            }
+            if (out != null)
+            {
+                try
+                {
+                    out.close();
+                }
+                catch (IOException e1)
+                {
+                    e1.printStackTrace();
+                }
+            }
+        }
+    }
+
     /**
      * 编码文件名
      */
@@ -1392,6 +1479,7 @@ public class ExcelUtil<T>
         this.wb = new SXSSFWorkbook(500);
     }
 
+
     /**
      * 创建工作表
      *

+ 22 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -28,6 +28,7 @@ import com.zhongzheng.common.utils.*;
 import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.service.OssService;
 import com.zhongzheng.modules.alisms.service.IAliSmsService;
@@ -55,6 +56,7 @@ import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.impl.ClassGradeServiceImpl;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderListVo;
 import com.zhongzheng.modules.system.domain.SysTask;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysConfigService;
@@ -1769,6 +1771,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return baseMapper.getByCardNoTenant(idCard);
     }
 
+    @Override
+    public User getByCardTenant(String idCard,String tenantId) {
+        return baseMapper.getByCardTenant(idCard,tenantId);
+    }
+
     @Override
     public Map<String, Object> importSevenUser(List<UserPeriodImportBo> userList) {
         if (CollectionUtils.isEmpty(userList)) {
@@ -2112,6 +2119,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return goodsBoList;
     }
 
+    @Override
+    public String studyRecord(List<UserStudyExportVo> customerBos) {
+        customerBos.forEach(x -> {
+            x.setUserCard(EncryptHandler.decrypt(x.getUserCard()));
+            x.setUserPhone(EncryptHandler.decrypt(x.getUserPhone()));
+        });
+
+        ExcelUtil<UserStudyExportVo> util2 = new ExcelUtil<>(UserStudyExportVo.class);
+        String zhiyuan = System.getProperty("user.dir");
+        String toPath = zhiyuan + "/zhongzheng-admin/src/main/resources/zhiliao"+DateUtils.getNowTime();
+        String path2 = toPath + "/"+"学员学习记录.xlsx";
+        util2.exportEasyExcelUtil(customerBos, UserStudyExportVo.class,path2);
+        return "";
+    }
+
     @Override
     public Map<String, Object> accountLogin(UserAppAccountLoginBo bo) {
         if(Validator.isEmpty(bo.getAccount())){

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java

@@ -1392,9 +1392,9 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             ossRequest.setFile(multipartFile);
             try {
                 String upload = ossService.upload(ossRequest);
-                subscribe.setCertificateUrl(ALIYUN_OSS_ENDPOINT+upload);
+                subscribe.setCertificateUrl(upload);
                 ExamApplyCertificateBo examAp = new ExamApplyCertificateBo();
-                examAp.setCertificateUrl(upload);
+                examAp.setCertificateUrl(ALIYUN_OSS_ENDPOINT+upload);
                 examAp.setCertificateEndTime(timeTwo);
                 examAp.setCertificateStartTime(time);
                 examAp.setCertificateCode(collect.get(2));

+ 87 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserAccountBo.java

@@ -0,0 +1,87 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2022年12月22日 9:35
+ */
+@Data
+public class UserAccountBo implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    @ApiModelProperty("手机号")
+    private String telphone;
+
+    @ApiModelProperty("身份证")
+    private String idCard;
+
+    @ApiModelProperty("密码")
+    private String password;
+
+    @ApiModelProperty("昵称")
+    private String nickname;
+
+    @ApiModelProperty("真实姓名")
+    private String realname;
+
+    @ApiModelProperty("性别 1男 2女")
+    private Integer sex;
+
+    @ApiModelProperty("学历")
+    private String eduLevel;
+
+    @ApiModelProperty("专业")
+    private String major;
+
+    @ApiModelProperty("身份证人像照")
+    private String idCardImg1;
+
+    @ApiModelProperty("身份证国徽照")
+    private String idCardImg2;
+
+    @ApiModelProperty("6旧云学堂")
+    private String registerPlat;
+
+    @ApiModelProperty("一寸照片")
+    private String oneInchPhotos;
+
+    @ApiModelProperty("工作年限")
+    private String workYear;
+
+    @ApiModelProperty("公司名称")
+    private String companyName;
+
+    @ApiModelProperty("工作岗位")
+    private String job;
+
+    @ApiModelProperty("单位联系人")
+    private String unitContact;
+
+    @ApiModelProperty("单位联系电话")
+    private String unitTel;
+
+    @ApiModelProperty("毕业院校")
+    private String school;
+
+    @ApiModelProperty("毕业时间")
+    private String graduationTime;
+
+    @ApiModelProperty("端口标识:1web 2H5")
+    private Integer postSign;
+
+    @ApiModelProperty("旧系统机构ID")
+    private Integer orgId;
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -170,4 +170,6 @@ public interface IGoodsService extends IService<Goods> {
 
     Boolean updateExamBusiness();
 
+	String createUserAccount(UserAccountBo bo);
+
 }

+ 92 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -24,6 +24,7 @@ import com.zhongzheng.common.utils.*;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.activity.domain.ActivityGoodsPrice;
 import com.zhongzheng.modules.activity.service.IActivityGoodsPriceService;
+import com.zhongzheng.modules.alioss.service.OssService;
 import com.zhongzheng.modules.bank.domain.*;
 import com.zhongzheng.modules.bank.mapper.QuestionMapper;
 import com.zhongzheng.modules.bank.service.*;
@@ -71,9 +72,11 @@ import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
 import com.zhongzheng.modules.system.bo.GoodsCopyEnum;
 import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysGoodsCopyRecord;
+import com.zhongzheng.modules.system.domain.SysOldOrg;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysGoodsCopyRecordService;
+import com.zhongzheng.modules.system.service.ISysOldOrgService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserPhoneBo;
@@ -93,9 +96,13 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -276,11 +283,16 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Autowired
     private ISysTenantService iSysTenantService;
 
+    @Autowired
+    private ISysOldOrgService iSysOldOrgService;
+
     @Autowired
     private ISysGoodsCopyRecordService iGoodsCopyRecordService;
 
     @Autowired
     private IActivityGoodsPriceService iActivityGoodsPriceService;
+    @Autowired
+    private OssService ossService;
 
 
     @Value("${oldStudySys.educationalInspector}")
@@ -5243,6 +5255,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             if (ObjectUtils.isNull(user)) {
                 return null;
             }
+        }else {
+            user = users.get(0);
         }
 
         //新系统有账号
@@ -5389,6 +5403,84 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return true;
     }
 
+    @Override
+    public String createUserAccount(UserAccountBo bo) {
+        if (ObjectUtils.isNull(bo.getIdCard())){
+            throw new CustomException("身份证不能为空");
+        }
+        SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>()
+                .eq(SysOldOrg::getOrgId, bo.getOrgId())
+                .last("limit 1"));
+        Long tenantId = oldOrg.getTenantId();
+        User user = iUserService.getByCardTenant(bo.getIdCard(),tenantId.toString());
+        if (ObjectUtils.isNull(user)){
+            //用户不存在
+            User u = BeanUtil.toBean(bo, User.class);
+            //雪花算法产生账号ID
+            SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
+            u.setUserAccount(String.valueOf(idWorker.nextId()));
+            u.setCreateTime(DateUtils.getNowTime());
+            u.setUpdateTime(DateUtils.getNowTime());
+            u.setStatus(1);
+            //设置默认密码
+            if (ObjectUtils.isNotNull(bo.getPassword())){
+                u.setPasswordAes(EncryptHandler.encrypt(bo.getPassword()));
+                u.setPassword(SecurityUtils.encryptPassword(bo.getPassword()));
+            }else {
+                String substring = bo.getIdCard().substring(bo.getIdCard().length() - 6);
+                u.setPasswordAes(EncryptHandler.encrypt(substring));
+                u.setPassword(SecurityUtils.encryptPassword(substring));
+            }
+
+            //处理身份证照片
+            if (ObjectUtils.isNotNull(bo.getIdCardImg1()) && ObjectUtils.isNotNull(bo.getIdCardImg2())){
+                try {
+                    URL url = new URL(bo.getIdCardImg1());
+                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+                    int responseCode = connection.getResponseCode();
+                    if (responseCode == HttpURLConnection.HTTP_OK) {
+                        InputStream inputStream = connection.getInputStream();
+                        String s = ossService.uploadInputStream(inputStream, 5);
+                        u.setIdCardImg1(s);
+                    }
+                    URL url2 = new URL(bo.getIdCardImg2());
+                    HttpURLConnection connection2 = (HttpURLConnection) url2.openConnection();
+                    int responseCode2 = connection2.getResponseCode();
+                    if (responseCode2 == HttpURLConnection.HTTP_OK) {
+                        InputStream inputStream = connection2.getInputStream();
+                        String s = ossService.uploadInputStream(inputStream, 5);
+                        u.setIdCardImg2(s);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+            }
+            u.setTenantId(tenantId);
+            iUserService.save(u);
+            user = u;
+        }
+
+        //缓存用户信息key
+        String key = String.format("KQTZ%s", user.getUserId());
+        SysTenant sysTenant = iSysTenantService.getById(tenantId);
+        //跳转路径
+        String url = "";
+        if (ObjectUtils.isNotNull(bo.getPostSign()) && bo.getPostSign() == 2){
+            url = String.format("%s%s/pages/learn/index?skipPort=%s", URL_PREFIX, sysTenant.getHostH5(), key);
+        }else {
+            url = String.format("%s%s/person-center/my-course?skipPort=%s", URL_PREFIX, sysTenant.getHostPc(), key);
+        }
+        UserPhoneBo phoneBo = new UserPhoneBo();
+        phoneBo.setTelphone(EncryptHandler.decryptTwo(user.getTelphone()));
+        phoneBo.setTenantId(tenantId);
+        phoneBo.setIdNum(EncryptHandler.decryptTwo(user.getIdCard()));
+
+        //缓存用户信息
+        redisCache.setCacheObjectTenant(tenantId + ":" + key, JSONObject.toJSONString(phoneBo), 12, TimeUnit.HOURS);
+        return url;
+    }
+
     private void updateHandoutsId(Long goodsId, Long tenantId, Long handoutsId) {
         baseMapper.updateHandoutsId(goodsId, tenantId, handoutsId);
     }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java

@@ -28,6 +28,7 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
 //    @InterceptorIgnore(tenantLine = "true")
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
+    Integer getPlush(ClassGradeUserQueryBo bo);
 
     List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo);
 

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java

@@ -8,6 +8,7 @@ import com.zhongzheng.modules.grade.vo.*;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -55,6 +56,7 @@ public interface IClassGradeService extends IService<ClassGrade> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
+    HashMap<String,Object> getPlush(ClassGradeUserQueryBo bo);
 
 	List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo);
 

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeUserService.java

@@ -32,6 +32,7 @@ public interface IClassGradeUserService extends IService<ClassGradeUser> {
 	 */
 	List<ClassGradeUserVo> queryList(ClassGradeUserQueryBo bo);
 
+
 	/**
 	 * 根据新增业务对象插入学员记录
 	 * @param bo 学员记录新增业务对象

+ 128 - 112
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -193,10 +193,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
         classGradeQueryBo.setGradeId(gradeId);
         ClassGradeVo vo = entity2Vo(baseMapper.queryList(classGradeQueryBo)).get(0);
-        if (ObjectUtil.isNotNull(vo) && StringUtils.isNotBlank(vo.getSevenCode())){
+        if (ObjectUtil.isNotNull(vo) && StringUtils.isNotBlank(vo.getSevenCode())) {
             //七大员继教班级 获取年份
             List<String> years = baseMapper.getSevenYearByCode(vo.getSevenCode());
-            if (CollectionUtils.isNotEmpty(years)){
+            if (CollectionUtils.isNotEmpty(years)) {
                 vo.setSevenYear(years.stream().collect(Collectors.joining(",")));
             }
 
@@ -234,11 +234,11 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public List<ClassGradeGoodsVo> listGoodsBatch(ClassGradeQueryBo bo) {
         List<ClassGradeGoodsVo> classGradeGoodsVos = baseMapper.listGoodsBatch(bo);
-        if (CollectionUtils.isEmpty(classGradeGoodsVos)){
+        if (CollectionUtils.isEmpty(classGradeGoodsVos)) {
             return new ArrayList<>();
         }
         classGradeGoodsVos.forEach(item -> {
-            if (CollectionUtils.isNotEmpty(item.getGradeList())){
+            if (CollectionUtils.isNotEmpty(item.getGradeList())) {
                 List<ClassGradeVo> collect = item.getGradeList().stream().filter(gradeVo -> {
                     //班级人数是否满人
                     if (ObjectUtil.isNotNull(gradeVo.getSevenCode())) {
@@ -250,24 +250,24 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
                     //二建/二造继教班级过滤
                     String businessName = iGoodsService.getGoodsBusinessName(item.getGoodsId());
-                    if (businessName.contains("继续教育二级建造师") || businessName.contains("继续教育二级造价师")){
-                        if (Validator.isNotEmpty(gradeVo.getClassStatus())&&gradeVo.getClassStatus() == 1 &&
-                                (gradeVo.getClassStartTime() > DateUtils.getNowTime() || gradeVo.getClassEndTime() < DateUtils.getNowTime())){
+                    if (businessName.contains("继续教育二级建造师") || businessName.contains("继续教育二级造价师")) {
+                        if (Validator.isNotEmpty(gradeVo.getClassStatus()) && gradeVo.getClassStatus() == 1 &&
+                                (gradeVo.getClassStartTime() > DateUtils.getNowTime() || gradeVo.getClassEndTime() < DateUtils.getNowTime())) {
                             //过期班级
                             return false;
                         }
                         //班级人数
                         Goods goods = iGoodsService.getById(item.getGoodsId());
                         SysTenant tenant = iSysTenantService.getById(goods.getTenantId());
-                        if (tenant.getSevenClass() == 1){
+                        if (tenant.getSevenClass() == 1) {
                             Integer numAll = getClassUserNumAll(gradeVo.getGradeId());
-                            if (gradeVo.getStudentUpper() <= numAll){
+                            if (gradeVo.getStudentUpper() <= numAll) {
                                 //班级人数已满
                                 return false;
                             }
-                        }else {
+                        } else {
                             Long num = baseMapper.getClassUserNumByTenant(gradeVo.getGradeId());
-                            if (gradeVo.getStudentUpper() <= num){
+                            if (gradeVo.getStudentUpper() <= num) {
                                 //班级人数已满
                                 return false;
                             }
@@ -325,11 +325,11 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         List<ClassGradeInterface> list = iClassGradeInterfaceService.list(new LambdaQueryWrapper<ClassGradeInterface>()
                 .eq(ClassGradeInterface::getStatus, 1)
                 .in(ClassGradeInterface::getType, Arrays.asList(1, 3)));
-        if (CollectionUtils.isNotEmpty(list)){
+        if (CollectionUtils.isNotEmpty(list)) {
             list.forEach(item -> {
-                if (item.getType() == 1){
+                if (item.getType() == 1) {
                     add.setInterfacePushId(item.getId());
-                }else if(item.getType() == 3){
+                } else if (item.getType() == 3) {
                     add.setInterfacePeriodId(item.getId());
                 }
             });
@@ -337,38 +337,37 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         Boolean erJfalg = false;
         Boolean ezJfalg = false;
         //七大员继教班级默认学时推送和报名推送
-        if (bo.getClassGradeGoodsAddBos() != null ) {
+        if (bo.getClassGradeGoodsAddBos() != null) {
             Long goodsId = bo.getClassGradeGoodsAddBos()[0];
             Goods goods = iGoodsService.getById(goodsId);
             String businessName = iGoodsService.getGoodsBusinessName(goodsId);
             if (businessName.contains("继续教育") && businessName.contains("施工现场专业人员")) {
                 String sevenYear = goods.getSevenYear();
-                    List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
-                            .list(new LambdaQueryWrapper<ClassGradeInterface>()
-                                    .in(ClassGradeInterface::getType, Arrays.asList(1, 3))
-                                    .eq(ClassGradeInterface::getStatus, 1));
-                    if (CollectionUtils.isNotEmpty(interfaceList)){
-                        interfaceList.forEach(item -> {
-                            if (item.getType() == 1){
-                                //官方信息推送
-                                add.setInterfacePushId(item.getId());
-                            }else if (item.getType() == 3){
-                                //学时推送
-                                add.setInterfacePeriodId(item.getId());
-                            }
-                        });
-                    }
-                if (StringUtils.isNotBlank(bo.getOfficialName()) && ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1){
+                List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
+                        .list(new LambdaQueryWrapper<ClassGradeInterface>()
+                                .in(ClassGradeInterface::getType, Arrays.asList(1, 3))
+                                .eq(ClassGradeInterface::getStatus, 1));
+                if (CollectionUtils.isNotEmpty(interfaceList)) {
+                    interfaceList.forEach(item -> {
+                        if (item.getType() == 1) {
+                            //官方信息推送
+                            add.setInterfacePushId(item.getId());
+                        } else if (item.getType() == 3) {
+                            //学时推送
+                            add.setInterfacePeriodId(item.getId());
+                        }
+                    });
+                }
+                if (StringUtils.isNotBlank(bo.getOfficialName()) && ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1) {
                     add.setSevenCode(ServletUtils.getEncoded("SEV"));
-                }else {
-                    String sevenCode = getSevenCode(goodsId,add.getStudentUpper());
+                } else {
+                    String sevenCode = getSevenCode(goodsId, add.getStudentUpper());
                     add.setSevenCode(sevenCode);
                 }
-            }
-            else if (("继续教育二级建造师".equals(businessName)|| ("继续教育二级造价师".equals(businessName))) && sysTenant.getShareClass() == 1){
+            } else if (("继续教育二级建造师".equals(businessName) || ("继续教育二级造价师".equals(businessName))) && sysTenant.getShareClass() == 1) {
                 erJfalg = true;
                 ezJfalg = "继续教育二级造价师".equals(businessName);
-                if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 0){
+                if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 0) {
                     //预开班
                     add.setOfficialName(ServletUtils.getEncoded("PIY"));
                 }
@@ -500,29 +499,29 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             classGradeSysService.save(classGradeSys);
         }
 
-        if (erJfalg && bo.getClassGradeGoodsAddBos() != null){
+        if (erJfalg && bo.getClassGradeGoodsAddBos() != null) {
             //二建继教班级创建,所有共享班级机构同步创建
-            synchronousCreation(add,sysTenant,bo.getClassGradeGoodsAddBos()[0]);
+            synchronousCreation(add, sysTenant, bo.getClassGradeGoodsAddBos()[0]);
             //通知旧系统
             CreateSameClassBo classBo = new CreateSameClassBo();
-            if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1){
+            if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1) {
                 classBo.setClassNo(add.getOfficialName());
                 classBo.setOpenclassState(1);
-                classBo.setBeginTime(DateUtils.timestampToDateFormat(add.getClassStartTime(),"yyyy-MM-dd HH:mm:ss"));
-                classBo.setEndTime(DateUtils.timestampToDateFormat(add.getClassEndTime(),"yyyy-MM-dd HH:mm:ss"));
-            }else {
+                classBo.setBeginTime(DateUtils.timestampToDateFormat(add.getClassStartTime(), "yyyy-MM-dd HH:mm:ss"));
+                classBo.setEndTime(DateUtils.timestampToDateFormat(add.getClassEndTime(), "yyyy-MM-dd HH:mm:ss"));
+            } else {
                 classBo.setClassNo(add.getOfficialName());
                 classBo.setOpenclassState(0);
             }
             classBo.setCategoryName(add.getClassName());
-            classBo.setPlatformId(ezJfalg?8:5);
+            classBo.setPlatformId(ezJfalg ? 8 : 5);
             Goods goods = iGoodsService.getById(bo.getClassGradeGoodsAddBos()[0]);
             Major major = iMajorService.getById(goods.getMajorId());
-            if (ObjectUtils.isNotNull(major)){
+            if (ObjectUtils.isNotNull(major)) {
                 classBo.setMajorName(major.getCategoryName());
             }
             Long nowTime = DateUtils.getNowTime();
-            String sign = ToolsUtils.EncoderByMd5(classBo.getClassNo()+nowTime.toString() + "pubilc2022");
+            String sign = ToolsUtils.EncoderByMd5(classBo.getClassNo() + nowTime.toString() + "pubilc2022");
             classBo.setSign(sign);
             classBo.setStamp(nowTime);
             JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(classBo));
@@ -540,14 +539,14 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return save;
     }
 
-    public void createSameClass(){
+    public void createSameClass() {
 
     }
 
 
-    private void synchronousCreation(ClassGrade classGrade, SysTenant sysTenant,Long goodsId) {
+    private void synchronousCreation(ClassGrade classGrade, SysTenant sysTenant, Long goodsId) {
         List<SysTenant> tenantList = sysTenantService.getListNoTenant(0L);
-        if (CollectionUtils.isEmpty(tenantList)){
+        if (CollectionUtils.isEmpty(tenantList)) {
             return;
         }
         Goods goods = iGoodsService.getById(goodsId);
@@ -555,19 +554,19 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         Major major = iMajorService.getById(goods.getMajorId());
         tenantList.forEach(tenant -> {
             //是否存在对应课程商品
-            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(businessName,major.getCategoryName(),tenant.getTenantId());
-            if (CollectionUtils.isEmpty(relGoods)){
+            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(businessName, major.getCategoryName(), tenant.getTenantId());
+            if (CollectionUtils.isEmpty(relGoods)) {
                 return;
             }
             //班级是否存在
-            ClassGrade grade = baseMapper.getCodeNoTenant(classGrade.getOfficialName(),tenant.getTenantId());
-            if (ObjectUtils.isNotNull(grade)){
+            ClassGrade grade = baseMapper.getCodeNoTenant(classGrade.getOfficialName(), tenant.getTenantId());
+            if (ObjectUtils.isNotNull(grade)) {
                 //已经存在 过滤已经创建过班级的商品
                 List<ClassGradeGoods> classGradeGoods = iClassGradeGoodsService.listByIdNoTenant(grade.getGradeId());
                 List<Long> goodsIds = classGradeGoods.stream().map(ClassGradeGoods::getGoodsId).collect(Collectors.toList());
                 relGoods = relGoods.stream().filter(x -> !goodsIds.contains(x.getGoodsId())).collect(Collectors.toList());
             }
-            if (CollectionUtils.isEmpty(relGoods)){
+            if (CollectionUtils.isEmpty(relGoods)) {
                 return;
             }
 
@@ -589,7 +588,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         });
     }
 
-    private String getSevenCode(Long goodsId,Integer studentUpper) {
+    private String getSevenCode(Long goodsId, Integer studentUpper) {
         Goods g = iGoodsService.getById(goodsId);
         List<Goods> list = iGoodsService.list(new LambdaQueryWrapper<Goods>()
                 .eq(Goods::getEducationTypeId, g.getEducationTypeId())
@@ -600,13 +599,13 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 .eq(Goods::getStatus, 1)
                 .eq(Goods::getGoodsStatus, 1)
                 .ne(Goods::getGoodsId, goodsId));
-        if (CollectionUtils.isNotEmpty(list)){
+        if (CollectionUtils.isNotEmpty(list)) {
             List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
                     .list(new LambdaQueryWrapper<ClassGradeGoods>()
                             .in(ClassGradeGoods::getGoodsId, list.stream().map(Goods::getGoodsId).collect(Collectors.toList())));
-            if (CollectionUtils.isNotEmpty(classGradeList)){
+            if (CollectionUtils.isNotEmpty(classGradeList)) {
                 ClassGrade classGrade = baseMapper.getSevenGrade(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
-                if (ObjectUtils.isNotNull(classGrade)){
+                if (ObjectUtils.isNotNull(classGrade)) {
                     //判断班级人数
                     Integer locakStudentNum = baseMapper.getStudeCountByCodeNoTenant(classGrade.getSevenCode());
                     if ((studentUpper - locakStudentNum) > 0) {
@@ -626,7 +625,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         validEntityBeforeSave(update);
         update.setUpdateTime(DateUtils.getNowTime());
         List<ClassGradeGoods> goodsList = iClassGradeGoodsService.list(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId, update.getGradeId()));
-        for(ClassGradeGoods gradeGoods:goodsList){
+        for (ClassGradeGoods gradeGoods : goodsList) {
             if (ObjectUtils.isNull(gradeGoods)) {
                 throw new RuntimeException("班级商品信息查询失败");
             }
@@ -641,7 +640,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             businessQueryBo.setId(goods.getBusinessId());
             String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
 
-            if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName)))&& sysTenant.getShareClass() == 1) {
+            if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && sysTenant.getShareClass() == 1) {
                 if (update.getClassStatus() != null && update.getClassStatus().equals(1)) {
                     //二造和二建班级开班校验班级人数(300人)
                     if (!checkClassUserNum(goods.getBusinessId(), update.getGradeId())) {
@@ -660,7 +659,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     }
                 }
             }
-            if(Validator.isNotEmpty(bo.getStatus())){
+            if (Validator.isNotEmpty(bo.getStatus())) {
                 if (bo.getStatus() != -1) {
            /* LambdaQueryWrapper<ClassGrade> lqw = Wrappers.lambdaQuery();
             lqw.eq(ClassGrade::getClassName, update.getClassName());
@@ -740,10 +739,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 sendClassSMS(classGradeVo);
             }
             this.updateById(update);
-            if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") && StringUtils.isNotBlank(classGradeVo.getSevenCode())){
-                List<ClassGrade> list = baseMapper.getListNoTenant(classGradeVo.getSevenCode(),update.getGradeId());
-                if (CollectionUtils.isNotEmpty(list)){
-                    list.forEach(item ->{
+            if (fullName.contains("继续教育") && fullName.contains("施工现场专业人员") && StringUtils.isNotBlank(classGradeVo.getSevenCode())) {
+                List<ClassGrade> list = baseMapper.getListNoTenant(classGradeVo.getSevenCode(), update.getGradeId());
+                if (CollectionUtils.isNotEmpty(list)) {
+                    list.forEach(item -> {
                         update.setGradeId(item.getGradeId());
                         updateByIdNoTenant(update);
                     });
@@ -874,10 +873,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
      */
     private void validEntityBeforeSave(ClassGrade entity) {
         //TODO 做一些数据校验,如唯一约束
-        if(Validator.isNotEmpty(entity.getOfficialName())){
+        if (Validator.isNotEmpty(entity.getOfficialName())) {
             entity.setOfficialName(entity.getOfficialName().trim());
         }
-        if(Validator.isNotEmpty(entity.getPastDueDay())&&entity.getPastDueDay()<10){
+        if (Validator.isNotEmpty(entity.getPastDueDay()) && entity.getPastDueDay() < 10) {
             throw new CustomException("班级提前截止天数错误");
         }
     }
@@ -934,9 +933,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             if (Validator.isNotEmpty(classGradeStudentVo.getRebuyOrderGoodsId()) && classGradeStudentVo.getRebuyOrderGoodsId().longValue() > 0) {
                 classGradeStudentVo.setRebuy(orderMapper.getGradePeriod(classGradeStudentVo.getRebuyOrderGoodsId(), classGradeStudentVo.getUserId()));
             }
-            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())){
+            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())) {
                 SysTenant tenant = iSysTenantService.getById(classGradeStudentVo.getOrgId());
-                if (ObjectUtils.isNotNull(tenant)){
+                if (ObjectUtils.isNotNull(tenant)) {
                     classGradeStudentVo.setTenantName(tenant.getTenantName());
                 }
             }
@@ -944,6 +943,23 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return classGradeStudentVos;
     }
 
+    @Override
+    public HashMap<String, Object> getPlush(ClassGradeUserQueryBo bo) {
+        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
+        if (ObjectUtils.isNotEmpty(bo.getPeriodPlush()) && bo.getPeriodPlush() != 1) {
+            Integer notPlush = this.baseMapper.getPlush(bo);
+            stringObjectHashMap.put("notPlush", notPlush);
+            stringObjectHashMap.put("plush", 0);
+        } else {
+            Integer allPlush = this.baseMapper.getPlush(bo);
+            bo.setPeriodPlush(1);
+            Integer plush = this.baseMapper.getPlush(bo);
+            stringObjectHashMap.put("plush", plush);
+            stringObjectHashMap.put("notPlush", allPlush - plush);
+        }
+        return stringObjectHashMap;
+    }
+
     @Override
     public List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo) {
         //身份证去重
@@ -1042,12 +1058,12 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
             }
 
-            List<Long> timeList = classGradeUserMapper.selectStart(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId());
+            List<Long> timeList = classGradeUserMapper.selectStart(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(), classGradeStudentVo.getOrderGoodsId());
             if (!org.springframework.util.CollectionUtils.isEmpty(timeList)) {
                 //查找开始学习时间
                 classGradeStudentVo.setStartTime(timeList.get(0));
-            }else{
-                classGradeStudentVo.setStartTime(classGradeUserMapper.selectStartNoPhoto(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId())
+            } else {
+                classGradeStudentVo.setStartTime(classGradeUserMapper.selectStartNoPhoto(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(), classGradeStudentVo.getOrderGoodsId())
                 );
             }
             //BigDecimal divide = new BigDecimal(studyLong.toString()).divide(new BigDecimal(secLong.toString()),2,BigDecimal.ROUND_HALF_UP);
@@ -1060,49 +1076,49 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             /*if (Validator.isNotEmpty(classGradeStudentVo.getRebuyOrderGoodsId()) && classGradeStudentVo.getRebuyOrderGoodsId().longValue() > 0) {
                 classGradeStudentVo.setRebuy(orderMapper.getGradePeriod(classGradeStudentVo.getRebuyOrderGoodsId(), classGradeStudentVo.getUserId()));
             }*/
-            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())){
+            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())) {
                 SysTenant tenant = iSysTenantService.getById(classGradeStudentVo.getOrgId());
-                if (ObjectUtils.isNotNull(tenant)){
+                if (ObjectUtils.isNotNull(tenant)) {
                     classGradeStudentVo.setTenantName(tenant.getTenantName());
                 }
             }
-            ClassGradeStudentAllExportVo exportVo = BeanUtil.toBean(classGradeStudentVo,ClassGradeStudentAllExportVo.class);
-            exportVo.setHourStr((classGradeStudentVo.getRecordNum()+classGradeStudentVo.getStuAllNum())+"/"+(classGradeStudentVo.getExamNum()+classGradeStudentVo.getSecAllNum()));
-            exportVo.setServiceTimeStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getServiceStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS)+"至"+DateUtils.timestampToDateFormat(classGradeStudentVo.getServiceEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
-            exportVo.setVideoStr(classGradeStudentVo.getStuAllNum()+"/"+classGradeStudentVo.getSecAllNum());
-            exportVo.setExamStr(classGradeStudentVo.getRecordNum()+"/"+classGradeStudentVo.getExamNum());
-            exportVo.setStudyStartStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
-            exportVo.setStudyEndStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
-            if(classGradeStudentVo.getPeriodStatus()==-1||classGradeStudentVo.getPeriodStatus()==0){
+            ClassGradeStudentAllExportVo exportVo = BeanUtil.toBean(classGradeStudentVo, ClassGradeStudentAllExportVo.class);
+            exportVo.setHourStr((classGradeStudentVo.getRecordNum() + classGradeStudentVo.getStuAllNum()) + "/" + (classGradeStudentVo.getExamNum() + classGradeStudentVo.getSecAllNum()));
+            exportVo.setServiceTimeStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getServiceStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS) + "至" + DateUtils.timestampToDateFormat(classGradeStudentVo.getServiceEndTime(), DateUtils.YYYY_MM_DD_HH_MM_SS));
+            exportVo.setVideoStr(classGradeStudentVo.getStuAllNum() + "/" + classGradeStudentVo.getSecAllNum());
+            exportVo.setExamStr(classGradeStudentVo.getRecordNum() + "/" + classGradeStudentVo.getExamNum());
+            exportVo.setStudyStartStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS));
+            exportVo.setStudyEndStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getEndTime(), DateUtils.YYYY_MM_DD_HH_MM_SS));
+            if (classGradeStudentVo.getPeriodStatus() == -1 || classGradeStudentVo.getPeriodStatus() == 0) {
                 exportVo.setStudyStatusStr("未学完");
-            }else{
+            } else {
                 exportVo.setStudyStatusStr("已完成");
             }
-            if(Validator.isEmpty(classGradeStudentVo.getStudyCount())){
+            if (Validator.isEmpty(classGradeStudentVo.getStudyCount())) {
                 classGradeStudentVo.setStudyCount(0L);
             }
-            if(Validator.isEmpty(classGradeStudentVo.getUseStudyCount())){
+            if (Validator.isEmpty(classGradeStudentVo.getUseStudyCount())) {
                 classGradeStudentVo.setUseStudyCount(0);
             }
-            exportVo.setTotalStudyCount(classGradeStudentVo.getUseStudyCount()+classGradeStudentVo.getStudyCount().intValue());
-            if(Validator.isNotEmpty(classGradeStudentVo.getUserStatus())&&classGradeStudentVo.getUserStatus()==1){
+            exportVo.setTotalStudyCount(classGradeStudentVo.getUseStudyCount() + classGradeStudentVo.getStudyCount().intValue());
+            if (Validator.isNotEmpty(classGradeStudentVo.getUserStatus()) && classGradeStudentVo.getUserStatus() == 1) {
                 exportVo.setUserStatus("变更");
-            }else{
+            } else {
                 exportVo.setUserStatus("未变更");
             }
-            if(Validator.isNotEmpty(classGradeStudentVo.getOfficialStatus())&&classGradeStudentVo.getOfficialStatus()==1){
+            if (Validator.isNotEmpty(classGradeStudentVo.getOfficialStatus()) && classGradeStudentVo.getOfficialStatus() == 1) {
                 exportVo.setOfficialStatus("是");
-            }else{
+            } else {
                 exportVo.setOfficialStatus("否");
             }
-            if(Validator.isNotEmpty(classGradeStudentVo.getPeriodStatus())&&classGradeStudentVo.getPeriodStatus()==1){
+            if (Validator.isNotEmpty(classGradeStudentVo.getPeriodStatus()) && classGradeStudentVo.getPeriodStatus() == 1) {
                 exportVo.setPeriodStatus("通过");
-            }else{
+            } else {
                 exportVo.setPeriodStatus("未通过");
             }
-            if(Validator.isNotEmpty(classGradeStudentVo.getPeriodPlush())&&classGradeStudentVo.getPeriodPlush()==1){
+            if (Validator.isNotEmpty(classGradeStudentVo.getPeriodPlush()) && classGradeStudentVo.getPeriodPlush() == 1) {
                 exportVo.setPeriodPlush("是");
-            }else{
+            } else {
                 exportVo.setPeriodPlush("否");
             }
             eList.add(exportVo);
@@ -1279,7 +1295,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                             throw new CustomException(studyAccountStatusQueryBo.getRealname() + "学员信息为空");
                         }
                         CertInfoListItem certInfoListItem = new CertInfoListItem();
-                        if(Validator.isEmpty(personRoot.getCertInfoList())||personRoot.getCertInfoList().size()==0){
+                        if (Validator.isEmpty(personRoot.getCertInfoList()) || personRoot.getCertInfoList().size() == 0) {
                             throw new CustomException(studyAccountStatusQueryBo.getRealname() + "学员信息为空");
                         }
                         for (CertInfoListItem certInfo : personRoot.getCertInfoList()) {
@@ -1412,9 +1428,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public Integer queryOfficialGradeCount(ClassGradeQueryBo bo) {
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
-        if (ObjectUtils.isNotNull(tenantId)){
+        if (ObjectUtils.isNotNull(tenantId)) {
             SysOldOrg one = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
-            if (ObjectUtils.isNotNull(one)){
+            if (ObjectUtils.isNotNull(one)) {
                 bo.setClassSign(one.getShareClass());
             }
         }
@@ -1548,7 +1564,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 throw new CustomException("同步查询班级人数请求错误" + e.getMessage());
             }
             numAll = peopleNum + oldGradeNum;
-        } else if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getSevenCode())){
+        } else if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getSevenCode())) {
             //七大员继教
             Long num = baseMapper.getStudeCountByCode(gradeVo.getSevenCode());
             if (ObjectUtils.isNotNull(num)) {
@@ -1645,7 +1661,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             UserStudyRecord startRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(), item.getGradeId(), "ASC");
             if (ObjectUtils.isNotNull(startRecord)) {
                 item.setBeginTime(DateUtils.timestampToDateFormat(startRecord.getCreateTime(), date));
-                if (ObjectUtils.isNotNull(item.getFinishStatus()) && item.getFinishStatus() == 1){
+                if (ObjectUtils.isNotNull(item.getFinishStatus()) && item.getFinishStatus() == 1) {
                     //已学完
                     UserStudyRecord endRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(), item.getGradeId(), "DESC");
                     item.setApplyTime(DateUtils.timestampToDateFormat(endRecord.getCreateTime(), date));
@@ -1742,7 +1758,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         openUpBo.setClassName(bo.getClassName());
         openUpBo.setClassStartTime(bo.getClassStartTime());
         openUpBo.setClassEndTime(bo.getClassEndTime());
-        openUpBo.setLearningStatus(ObjectUtils.isNotNull(bo.getLearningStatus())?bo.getLearningStatus():1);
+        openUpBo.setLearningStatus(ObjectUtils.isNotNull(bo.getLearningStatus()) ? bo.getLearningStatus() : 1);
         openUpBo.setLearningTimeStart(bo.getLearningTimeStart());
         baseMapper.UpGradeStatusByTenant(openUpBo);
 
@@ -1839,16 +1855,16 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo) {
         List<ClassGradeVo> classGradeVos = entity2Vo(baseMapper.searchGradeList(bo));
-        if (Validator.isEmpty(classGradeVos)||CollectionUtils.isEmpty(classGradeVos)) {
+        if (Validator.isEmpty(classGradeVos) || CollectionUtils.isEmpty(classGradeVos)) {
             return new ArrayList<>();
         }
         classGradeVos.forEach(item -> {
             //班级人数
-            if (ObjectUtils.isNotNull(item.getSevenCode())){
+            if (ObjectUtils.isNotNull(item.getSevenCode())) {
                 List<ClassGrade> list = list(new LambdaQueryWrapper<ClassGrade>()
                         .eq(ClassGrade::getSevenCode, item.getSevenCode())
                         .eq(ClassGrade::getStatus, 1));
-                if (CollectionUtils.isNotEmpty(list)){
+                if (CollectionUtils.isNotEmpty(list)) {
                     Integer count = iClassGradeUserService.count(new LambdaQueryWrapper<ClassGradeUser>()
                             .in(ClassGradeUser::getGradeId, list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList()))
                             .eq(ClassGradeUser::getStatus, 1));
@@ -1868,38 +1884,38 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
     @Override
     public ClassGrade getCodeNoTenant(String registerCode, Long tenantId) {
-        return baseMapper.getCodeNoTenant(registerCode,tenantId);
+        return baseMapper.getCodeNoTenant(registerCode, tenantId);
     }
 
     @Override
     public void openOfficialSaveGrade(ClassGradeOpenBo bo) {
         List<SysTenant> tenantList = sysTenantService.getListNoTenant(0L);
-        if (CollectionUtils.isEmpty(tenantList)){
+        if (CollectionUtils.isEmpty(tenantList)) {
             return;
         }
         tenantList.forEach(tenant -> {
             //是否存在对应课程商品
-            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(bo.getBusinessName(),bo.getMajorName(),tenant.getTenantId());
-            if (CollectionUtils.isEmpty(relGoods)){
+            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(bo.getBusinessName(), bo.getMajorName(), tenant.getTenantId());
+            if (CollectionUtils.isEmpty(relGoods)) {
                 return;
             }
             //班级是否存在
-            if (StringUtils.isNotBlank(bo.getRegisterCode())){
-                ClassGrade grade = baseMapper.getCodeNoTenant(bo.getRegisterCode(),tenant.getTenantId());
-                if (ObjectUtils.isNotNull(grade)){
+            if (StringUtils.isNotBlank(bo.getRegisterCode())) {
+                ClassGrade grade = baseMapper.getCodeNoTenant(bo.getRegisterCode(), tenant.getTenantId());
+                if (ObjectUtils.isNotNull(grade)) {
                     //已经存在 过滤已经创建过班级的商品
                     List<ClassGradeGoods> classGradeGoods = iClassGradeGoodsService.listByIdNoTenant(grade.getGradeId());
                     List<Long> goodsIds = classGradeGoods.stream().map(ClassGradeGoods::getGoodsId).collect(Collectors.toList());
                     relGoods = relGoods.stream().filter(x -> !goodsIds.contains(x.getGoodsId())).collect(Collectors.toList());
                 }
-                if (CollectionUtils.isEmpty(relGoods)){
+                if (CollectionUtils.isEmpty(relGoods)) {
                     return;
                 }
             }
             relGoods.forEach(item -> {
                 ClassGrade classGrade = new ClassGrade();
                 classGrade.setCreateTime(DateUtils.getNowTime());
-                if (bo.getClassStatus() == 1){
+                if (bo.getClassStatus() == 1) {
                     //开班
                     classGrade.setClassStatus(1);
                     classGrade.setOfficialName(bo.getOfficialName());
@@ -1913,7 +1929,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     if (CollectionUtils.isNotEmpty(interfaceList)) {
                         classGrade.setInterfacePushId(interfaceList.get(0).getId());
                     }
-                }else {
+                } else {
                     classGrade.setClassStatus(0);
                     classGrade.setLearningStatus(2);//待定
                     classGrade.setOfficialName(bo.getRegisterCode());

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -731,7 +731,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         studyRec.setMajorName(goodsVo.getSubjectNames());
         studyRec.setName(userVo.getRealname());
         studyRec.setIdNum(userVo.getIdCard());
-        studyRec.setMobile(userVo.getTelphone());
+        studyRec.setMobile(EncryptHandler.decryptTwo(userVo.getTelphone()));
         studyRec.setGender(userVo.getSex()==1?"男":"女");
         studyRec.setRecentPhotoSrc(Validator.isNotEmpty(userVo.getOneInchPhotos())?ossHost+"/"+userVo.getOneInchPhotos():"");
         studyRec.setIdcardPhotoSrc(Validator.isNotEmpty(userVo.getIdCardImg1())?ossHost+"/"+userVo.getIdCardImg1():"");

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInputQueryBo.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 
@@ -76,5 +77,4 @@ public class OrderInputQueryBo extends BaseEntity {
 	/** 录单来源 1普通录单 2新B端下单  3旧B端下单 */
 	@ApiModelProperty("录单来源 1普通录单 2新B端下单  3旧B端下单")
 	private Integer inputFrom;
-
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderSubjectUserBuyBo.java

@@ -17,6 +17,7 @@ import java.util.List;
 @ApiModel("订单用户购买状态对象")
 public class OrderSubjectUserBuyBo {
 
+    @NotNull(message = "身份证号不能为空")
     @ApiModelProperty("身份证号")
     private List<String> idCard;
 
@@ -28,7 +29,6 @@ public class OrderSubjectUserBuyBo {
     @ApiModelProperty("科目ID")
     private Long subjectId;
 
-    @NotNull(message = "手机号码不能为空")
     @ApiModelProperty("手机号码")
     private List<String> tel;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInput.java

@@ -8,6 +8,8 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 import java.util.Date;
 import java.math.BigDecimal;
+import java.util.List;
+
 import com.zhongzheng.common.annotation.Excel;
 
 /**
@@ -55,4 +57,6 @@ private static final long serialVersionUID=1L;
     private Integer checkStauts;
     /** 审核意见 */
     private String checkReason;
+    @TableField(exist = false)
+    private List<String> ids;
 }

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

@@ -68,4 +68,6 @@ public interface OrderMapper extends BaseMapper<Order> {
     List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
 
     List<String> getBusinessNameBySn(String orderSn);
+
+    Long getOrderGoodsByBo(@Param("goodsId") Long goodsId,@Param("userId") Long userId);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsService.java

@@ -141,4 +141,6 @@ public interface IOrderGoodsService extends IService<OrderGoods> {
     List<OrderGoods> listByNotTenant();
 
     Boolean upBatchNumById(OrderGoods orderGoods);
+
+    List<OrderUserGoodsVo> listUserSubjectGoodsNew(OrderSubjectUserBuyBo bo);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderInputService.java

@@ -9,6 +9,7 @@ import com.zhongzheng.modules.order.vo.OrderInputVo;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 录单Service接口
@@ -61,4 +62,5 @@ public interface IOrderInputService extends IService<OrderInput> {
 	List<OrderInputVo> getUserGoodsList(OrderInputQueryBo bo);
 
     void questionOrderOpen(String orderSn,Long tenantId);
+	Map<String, Object> excelImport(List<String> ids);
 }

+ 26 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -968,6 +968,32 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         return baseMapper.upBatchNumById(orderGoods) > 0;
     }
 
+    @Override
+    public List<OrderUserGoodsVo> listUserSubjectGoodsNew(OrderSubjectUserBuyBo bo) {
+        List<OrderUserGoodsVo> allList = new ArrayList<>();
+        for(String idCard : bo.getIdCard()){
+            User user = iUserService.getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getIdCard, EncryptHandler.encrypt(idCard)).last("limit 1"));
+            if(Validator.isNull(user)){
+                OrderUserGoodsVo goodsBo = new OrderUserGoodsVo();
+                goodsBo.setIdCard(idCard);
+                goodsBo.setGoodsList(new ArrayList<>());
+                allList.add(goodsBo);
+            }else{
+                GoodsQueryBo queryBo = new GoodsQueryBo();
+                queryBo.setSubjectId(bo.getSubjectId());
+                queryBo.setBusinessId(bo.getBusinessId());
+                queryBo.setUserId(user.getUserId());
+                List<OrderGoodsVo> list = this.baseMapper.listUserSubjectGoods(queryBo);
+                OrderUserGoodsVo goodsBo = new OrderUserGoodsVo();
+                goodsBo.setIdCard(idCard);
+                goodsBo.setGoodsList(list);
+                allList.add(goodsBo);
+            }
+        }
+        return allList;
+    }
+
     private boolean checkUnique(Long GoodsId,Long UserId) {
         ShoppingCart info = iShoppingCartService.getOne(new LambdaQueryWrapper<ShoppingCart>()
                 .eq(ShoppingCart::getUserId,UserId).eq(ShoppingCart::getGoodsId,GoodsId).last("limit 1"));

+ 229 - 31
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInputServiceImpl.java

@@ -1,30 +1,37 @@
 package com.zhongzheng.modules.order.service.impl;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.zhongzheng.common.config.RuoYiConfig;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
 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.service.IQuestionMerchantService;
-import com.zhongzheng.modules.order.bo.OrderInputAddBo;
-import com.zhongzheng.modules.order.bo.OrderInputEditBo;
-import com.zhongzheng.modules.order.bo.OrderInputQueryBo;
+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.OrderInputMapper;
-import com.zhongzheng.modules.order.service.IOrderGoodsFreeService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderInputService;
 import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.OrderInputImpotVo;
 import com.zhongzheng.modules.order.vo.OrderInputVo;
+import com.zhongzheng.modules.order.vo.OrderListImportVo;
+import com.zhongzheng.modules.order.vo.OrderListVo;
 import com.zhongzheng.modules.system.domain.SysOldOrg;
 import com.zhongzheng.modules.system.service.ISysOldOrgService;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderGoods;
@@ -33,6 +40,7 @@ import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -40,10 +48,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.Page;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -76,14 +86,14 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
 
 
     @Override
-    public OrderInputVo queryById(Long id){
+    public OrderInputVo queryById(Long id) {
         OrderInput db = this.baseMapper.selectById(id);
         return BeanUtil.toBean(db, OrderInputVo.class);
     }
 
     @Override
     public OrderInput queryBySn(String inputOrderSn) {
-        return getOne(new LambdaQueryWrapper<OrderInput>().eq(OrderInput::getInputOrderSn,inputOrderSn));
+        return getOne(new LambdaQueryWrapper<OrderInput>().eq(OrderInput::getInputOrderSn, inputOrderSn));
     }
 
     @Override
@@ -110,19 +120,19 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
     }
 
     /**
-    * 实体类转化成视图对象
-    *
-    * @param collection 实体类集合
-    * @return
-    */
+     * 实体类转化成视图对象
+     *
+     * @param collection 实体类集合
+     * @return
+     */
     private List<OrderInputVo> entity2Vo(Collection<OrderInput> collection) {
         List<OrderInputVo> voList = collection.stream()
                 .map(any -> BeanUtil.toBean(any, OrderInputVo.class))
                 .collect(Collectors.toList());
         if (collection instanceof Page) {
-            Page<OrderInput> page = (Page<OrderInput>)collection;
+            Page<OrderInput> page = (Page<OrderInput>) collection;
             Page<OrderInputVo> pageVo = new Page<>();
-            BeanUtil.copyProperties(page,pageVo);
+            BeanUtil.copyProperties(page, pageVo);
             pageVo.addAll(voList);
             voList = pageVo;
         }
@@ -136,7 +146,7 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
         validEntityBeforeSave(add);
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
-        if(Validator.isEmpty(add.getInputFrom())){
+        if (Validator.isEmpty(add.getInputFrom())) {
             add.setInputFrom(1);
         }
         this.save(add);
@@ -156,13 +166,13 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
      *
      * @param entity 实体类数据
      */
-    private void validEntityBeforeSave(OrderInput entity){
+    private void validEntityBeforeSave(OrderInput entity) {
         //TODO 做一些数据校验,如唯一约束
     }
 
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return this.removeByIds(ids);
@@ -179,18 +189,18 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
     }
 
     @Override
-    public void questionOrderOpen(String orderSn,Long tenantId) {
+    public void questionOrderOpen(String orderSn, Long tenantId) {
         OrderInput orderInput = getOne(new LambdaQueryWrapper<OrderInput>().eq(OrderInput::getInputOrderSn, orderSn));
-        if (ObjectUtils.isNull(orderInput)){
+        if (ObjectUtils.isNull(orderInput)) {
             throw new CustomException("订单信息获取有误");
         }
 
         //创建学员订单
         List<TopOldOrderGoods> orderGoodsList = topOldOrderGoodsService
                 .list(new LambdaQueryWrapper<TopOldOrderGoods>()
-                .eq(TopOldOrderGoods::getOrderSn, orderSn)
-                .eq(TopOldOrderGoods::getStatus, 1));
-        if (CollectionUtils.isEmpty(orderGoodsList)){
+                        .eq(TopOldOrderGoods::getOrderSn, orderSn)
+                        .eq(TopOldOrderGoods::getStatus, 1));
+        if (CollectionUtils.isEmpty(orderGoodsList)) {
             return;
         }
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>()
@@ -206,8 +216,8 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
                     .eq(User::getIdCard, orderGoods.getUserCard())
                     .eq(User::getTenantId, tenantId));
-            if (ObjectUtils.isNull(user)){
-                throw new CustomException("学员【"+user.getRealname()+"】信息不存在");
+            if (ObjectUtils.isNull(user)) {
+                throw new CustomException("学员【" + user.getRealname() + "】信息不存在");
             }
             //学员预约信息
             UserSubscribe userSubscribe = iUserSubscribeService.getById(orderGoods.getSignId());
@@ -253,7 +263,7 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
             add.setGoodsReceived(order.getOrderPrice());
             add.setRefundStatus(0);
             add.setPayStatus(3);
-            add = setQuestionServiceTime(add,userSubscribe.getOrderGoodsId(),order);
+            add = setQuestionServiceTime(add, userSubscribe.getOrderGoodsId(), order);
             iOrderGoodsService.save(add);
 
             //题库关联
@@ -273,15 +283,203 @@ public class OrderInputServiceImpl extends ServiceImpl<OrderInputMapper, OrderIn
         updateById(orderInput);
     }
 
+    @Override
+    public Map<String, Object> excelImport(List<String> ids) {
+        Map<String, Object> map = new HashMap<>();
+        List<OrderInputVo> orderInputVos = new ArrayList<>();
+        List<OrderInputImpotVo> orderInputImpotVos = new ArrayList<>();
+        List<OrderListImportVo> orderListImportVos = new ArrayList<>();
+        if (ids.size() > 50) {
+            throw new CustomException("超出文档导出上限");
+        }
+        if (ObjectUtils.isNotEmpty(ids)) {
+            final Integer[] number = {Constants.NUMBER};
+            ids.forEach(id -> {
+                OrderInputQueryBo orderInputQueryBo = new OrderInputQueryBo();
+                orderInputQueryBo.setInputOrderSn(String.valueOf(id));
+                OrderInputVo orderInputVo = this.selectList(orderInputQueryBo).get(0);
+                orderInputVos.add(orderInputVo);
+                OrderQueryBo orderQueryBo = new OrderQueryBo();
+                orderQueryBo.setInputOrderSn(String.valueOf(id));
+                orderQueryBo.setStatus(new Integer[]{1});
+                List<OrderListVo> orderListVo = iOrderService.selectList(orderQueryBo);
+                orderListVo.forEach(orderLIst -> {
+                    OrderListImportVo bean = BeanUtil.toBean(orderLIst, OrderListImportVo.class);
+                    if (ObjectUtils.isEmpty(orderLIst.getGoodsRealPrice())) {
+                        bean.setGoodsRealPrice(BigDecimal.valueOf(0));
+                    }
+                    bean.setId(number[0]);
+                    bean.setGoodsPayStatus(getGoodsPayStatus(orderLIst.getGoodsPayStatus()));
+                    bean.setInputOrderSn(id);
+                    bean.setGoodsBusiness(orderLIst.getEducationName() + orderLIst.getProjectName() + orderLIst.getBusinessName());
+                    bean.setOrderStatus(getOrderStatus(orderLIst.getOrderStatus()));
+                    bean.setRefundStatus(getRefundStatus(orderLIst.getRefundStatus()));
+                    if (!ObjectUtils.isEmpty(orderLIst.getInvoiceStatus())){
+                        bean.setInvoiceStatus(getInvoiceStatus(orderLIst.getInvoiceStatus()));
+                    }
+                    if (!ObjectUtils.isEmpty(orderLIst.getRebuy())){
+                        bean.setRebuy(getRebuyStatus(orderLIst.getRebuy()));
+                    }
+                    bean.setGoodsNotReceived(orderLIst.getPayPrice().subtract(orderLIst.getGoodsReceived()));
+                    orderListImportVos.add(bean);
+                    number[0]++;
+                });
+            });
+        }else {
+            throw new CustomException("请先勾选数据");
+        }
+        final Integer[] number = {Constants.NUMBER};
+        orderInputVos.forEach(item -> {
+            OrderInputImpotVo bean = BeanUtil.toBean(item, OrderInputImpotVo.class);
+            bean.setId(number[0]);
+            if (ObjectUtils.isEmpty(item.getGoodsRealPrice())) {
+                bean.setGoodsRealPrice(BigDecimal.valueOf(0));
+            }
+            if (!ObjectUtils.isEmpty(item.getOrderFrom())){
+                bean.setInputFrom(getGoodFromName(item.getOrderFrom()));
+            }
+            bean.setGoodBusiness(item.getEducationName() + item.getProjectName() + item.getBusinessName());
+            bean.setGoodsNoReceived(item.getPayPrice().subtract(item.getGoodsReceived()));
+            orderInputImpotVos.add(bean);
+            number[0]++;
+        });
+        List<Map<String, Object>> sheetsList = new ArrayList<>();
+        ExportParams deptExportParams = new ExportParams();
+        deptExportParams.setSheetName("后台订单");
+        Map<String, Object> deptExportMap = new HashMap<>();
+        deptExportMap.put("title", deptExportParams);
+        deptExportMap.put("entity", OrderInputImpotVo.class);
+        // sheet中要填充得数据
+        deptExportMap.put("data", orderInputImpotVos);
+
+        ExportParams deptExportParams1 = new ExportParams();
+        deptExportParams1.setSheetName("订单详情");
+        Map<String, Object> deptExportMap1 = new HashMap<>();
+        deptExportMap1.put("title", deptExportParams1);
+        deptExportMap1.put("entity", OrderListImportVo.class);
+        // sheet中要填充得数据
+        deptExportMap1.put("data", orderListImportVos);
+        sheetsList.add(deptExportMap);
+        sheetsList.add(deptExportMap1);
+        OutputStream out = null;
+        //     Workbook workbook = null;
+        try {
+            Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
+            String filename = UUID.randomUUID().toString() + "_" + "导出后台订单" + ".xls";
+            String downloadPath = RuoYiConfig.getDownloadPath() + filename;
+            File desc = new File(downloadPath);
+            if (!desc.getParentFile().exists()) {
+                desc.getParentFile().mkdirs();
+            }
+            out = new FileOutputStream(downloadPath);
+            workbook.write(out);
+            workbook.close();
+            return AjaxResult.success(filename);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+    private String getGoodFromName(String type) {
+        if (type.equals("1")) {
+            return "业务员普通单";
+        }
+        if (type.equals("2")) {
+            return "祥粤云学堂小程序";
+        }
+        if (type.equals("3")) {
+            return "祥粤云学堂网站";
+        }
+        if (type.equals("4")) {
+            return "祥粤e管证小程序";
+        }
+        if (type.equals("5")) {
+            return "业务员录单";
+        }
+        if (type.equals("6")) {
+            return "业务员系统";
+        }
+        return null;
+    }
+    private String getGoodsPayStatus(Integer type) {
+        if (type==1) {
+            return "未收费";
+        }
+        if (type==2) {
+            return "部分收费";
+        }
+        if (type==3) {
+            return "完全收费";
+        }
+        if (type==4) {
+            return "免费";
+        }
+        return null;
+    }
+    private String getOrderStatus(Integer type) {
+        if (type==-2) {
+            return "超时关闭";
+        }
+        if (type==-1) {
+            return "手动关闭";
+        }
+        if (type==0) {
+            return "普通状态";
+        }
+        if (type==1) {
+            return "已付款";
+        }
+        if (type==3) {
+            return "成功";
+        }
+        return null;
+    }
+    private String getRefundStatus(Integer type) {
+        if (type==0) {
+            return "无";
+        }
+        if (type==1) {
+            return "退款中";
+        }
+        if (type==2) {
+            return "已退款";
+        }
+        if (type==3) {
+            return "拒绝退款";
+        }
+        return null;
+    }
+    private String getInvoiceStatus(Integer type) {
+        if (type==1) {
+            return "未开票";
+        }
+        if (type==2) {
+            return "已开票";
+        }
+        if (type==-1) {
+            return "已退票";
+        }
+        return null;
+    }
+    private String getRebuyStatus(Integer type) {
+        if (type==0) {
+            return "非复购";
+        }
+        if (type==1) {
+            return "复购";
+        }
+        return null;
+    }
 
-    private OrderGoods setQuestionServiceTime(OrderGoods add,Long orderGoodsId,Order order) {
+    private OrderGoods setQuestionServiceTime(OrderGoods add, Long orderGoodsId, Order order) {
         UserSubscribe subscribe = iUserSubscribeService.getOne(new LambdaQueryWrapper<UserSubscribe>()
                 .eq(UserSubscribe::getUserId, order.getUserId())
                 .eq(UserSubscribe::getOrderGoodsId, orderGoodsId)
                 .eq(UserSubscribe::getSubscribeStatus, 1)
-                .eq(UserSubscribe::getExamStatus,0)
+                .eq(UserSubscribe::getExamStatus, 0)
                 .last("limit 1"));
-        if (ObjectUtils.isNull(subscribe)){
+        if (ObjectUtils.isNull(subscribe)) {
             return add;
         }
         //考试日期

+ 36 - 9
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -732,11 +732,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 throw new CustomException("商品不存在", 510);
             }
             //校验是否有重复商品
-            if (StringUtils.isNotBlank(g.getSevenYear())){
+            String businessName = iGoodsService.getGoodsBusinessName(g.getGoodsId());
+            if (StringUtils.isNotBlank(g.getSevenYear()) && businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
                 Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
                 if (count > 0){
                     throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
                 }
+            }else if (businessName.contains("考前培训") && businessName.contains("施工现场专业人员")){
+                Long count = baseMapper.getOrderGoodsByBo(g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException("请勿重复购买相同的课程");
+                }
             }
 //            if (goods.getGoodsStatus() != 1) {
 //                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单", 510);
@@ -1354,11 +1360,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             //校验是否有重复商品
-            if (StringUtils.isNotBlank(g.getSevenYear())){
+            String businessName = iGoodsService.getGoodsBusinessName(g.getGoodsId());
+            if (StringUtils.isNotBlank(g.getSevenYear()) && businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
                 Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
                 if (count > 0){
                     throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
                 }
+            }else if (businessName.contains("考前培训") && businessName.contains("施工现场专业人员")){
+                Long count = baseMapper.getOrderGoodsByBo(g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException("请勿重复购买相同的课程");
+                }
             }
 
             if (ObjectUtils.isNotNull(g.getMailSign()) && g.getMailSign() == 1){
@@ -1784,11 +1796,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             //校验是否有重复商品
-            if (StringUtils.isNotBlank(g.getSevenYear())){
+            String businessName = iGoodsService.getGoodsBusinessName(g.getGoodsId());
+            if (StringUtils.isNotBlank(g.getSevenYear()) && businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
                 Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
                 if (count > 0){
                     throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
                 }
+            }else if (businessName.contains("考前培训") && businessName.contains("施工现场专业人员")){
+                Long count = baseMapper.getOrderGoodsByBo(g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException("请勿重复购买相同的课程");
+                }
             }
 
             if (ObjectUtils.isNotNull(g.getMailSign()) && g.getMailSign() == 1){
@@ -2001,11 +2019,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 throw new CustomException(goods.getGoodsName() + "商品已下架,请重新选择商品下单");
             }
             //校验是否有重复商品
-            if (StringUtils.isNotBlank(goods.getSevenYear())){
-                Long count = iOrderGoodsService.countOrderGoodsByYear(goods.getSevenYear(),g.getGoodsId(),bo.getUserId());
+            String businessName = iGoodsService.getGoodsBusinessName(g.getGoodsId());
+            if (StringUtils.isNotBlank(g.getSevenYear()) && businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
                 if (count > 0){
                     throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
                 }
+            }else if (businessName.contains("考前培训") && businessName.contains("施工现场专业人员")){
+                Long count = baseMapper.getOrderGoodsByBo(g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException("请勿重复购买相同的课程");
+                }
             }
 
             if (ObjectUtils.isNotNull(g.getMailSign()) && g.getMailSign() == 1){
@@ -2643,10 +2667,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Override
     public boolean arrangeGrade(String goodsName, Long goodsId, Long orderGoodsId, Long gradeId, Long userId, String orderSn, Long businessId) {
         //查询该学员有没有有效期内同商品班级 有就不允许添加
-       /* Integer classNum = baseMapper.selectUserClass(goodsId,userId);
-        if (classNum > 0){、。
-            throw new CustomException("该学员已在此商品有效期内的班级,无法加入新的有效期班级,请查看该学员此商品下的班级");
-        }*/
+//       Integer classNum = baseMapper.selectUserClass(goodsId,userId);
+//        if (classNum > 0){
+//            throw new CustomException("该学员已在此商品有效期内的班级,无法加入新的有效期班级,请查看该学员此商品下的班级");
+//        }
         OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
         String businessFull = iGoodsService.getGoodsBusinessName(goodsId);
         Goods goods = iGoodsService.getById(goodsId);
@@ -2697,6 +2721,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                         .eq(sevenFlag,ClassGradeUser::getOrderGoodsId,orderGoodsId)
                         .eq(ClassGradeUser::getUserId, userId)
                         .last("limit 1"));
+                if (ObjectUtils.isNotNull(gradeUser) && gradeUser.getStatus() == 1){
+                    throw new CustomException("学员已在此班级报名,请选择其他班级!");
+                }
                 //不在此班级内
                 if (Validator.isEmpty(gradeUser)) {
                     //班级还有剩位,直接锁定班级

+ 80 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInputImpotVo.java

@@ -0,0 +1,80 @@
+package com.zhongzheng.modules.order.vo;
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 录单视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2022-04-07
+ */
+@Data
+@ApiModel("录单导出视图对象")
+public class OrderInputImpotVo {
+	private static final long serialVersionUID = 1L;
+
+	@Excel(name = "序号")
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Integer id;
+	/** 录单订单编号 */
+	@Excel(name = "订单时间")
+	@ApiModelProperty("订单时间")
+	private String createTime;
+
+	/** 录单订单编号 */
+	@Excel(name = "录单编码")
+	@ApiModelProperty("录单编码")
+	private String inputOrderSn;
+
+	/** 录单订单编号 */
+	@Excel(name = "学员数量")
+	@ApiModelProperty("学员数量")
+	private Integer userNum;
+
+
+	/** 录单订单编号 */
+	@Excel(name = "商品数量")
+	@ApiModelProperty("商品数量")
+	private Integer goodsNum;
+
+	/** 录单订单编号 */
+	@Excel(name = "商品业务层级")
+	@ApiModelProperty("商品业务层级")
+	private String goodBusiness;
+
+	/** 录单订单编号 */
+	@Excel(name = "商品标准价格总金额")
+	@ApiModelProperty("商品标准价格总金额")
+	private BigDecimal orderPrice;
+
+	/** 录单订单编号 */
+	@Excel(name = "商品成交价格总金额")
+	@ApiModelProperty("商品成交价格总金额")
+	private BigDecimal goodsRealPrice;
+
+	/** 录单订单编号 */
+	@Excel(name = "已收总金颜")
+	@ApiModelProperty("已收总金颜")
+	private BigDecimal goodsReceived;
+	/** 系统订单操作人 */
+	@Excel(name = "已退总金颜")
+	@ApiModelProperty("已退总金颜")
+	private BigDecimal goodsRefund;
+	/** 1有效 0无效 */
+	@Excel(name = "未收总金额")
+	@ApiModelProperty("未收总金额")
+	private BigDecimal goodsNoReceived;
+	/** 系统订单操作人ID */
+	@Excel(name = "订单来源")
+	@ApiModelProperty("订单来源")
+	private String inputFrom;
+	/** 教育类型id */
+	@Excel(name = "录单人")
+	@ApiModelProperty("录单人")
+	private String createUsername;
+}

+ 143 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderListImportVo.java

@@ -0,0 +1,143 @@
+package com.zhongzheng.modules.order.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 订单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2021-11-08
+ */
+@Data
+@ApiModel("订单视图对象")
+public class OrderListImportVo {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 订单编号
+     */
+    @Excel(name = "序号")
+    @ApiModelProperty("序号")
+    private Integer id;
+    /**
+     * 用户ID
+     */
+    @Excel(name = "后台订单订单编码")
+    @ApiModelProperty("后台订单订单编码")
+    private String inputOrderSn;
+
+    /**
+     * 用户ID
+     */
+    @Excel(name = "订单时间")
+    @ApiModelProperty("订单时间")
+    private String createTime;
+    /**
+     * 订单价格
+     */
+    @Excel(name = "订单编码")
+    @ApiModelProperty("订单编码")
+    private String orderSn;
+    /**
+     * 支付订单号
+     */
+    @Excel(name = "手机号码")
+    @ApiModelProperty("手机号码")
+    private String telphone;
+    /**
+     * 订单状态 -2 超时关闭,-1手动关闭,0普通状态,1为已付款,3为成功
+     */
+    @Excel(name = "学员姓名")
+    @ApiModelProperty("学员姓名")
+    private String realname;
+    /**
+     * 支付时间
+     */
+    @Excel(name = "学员身份证")
+    @ApiModelProperty("学员身份证")
+    private String idCard;
+    /**
+     * 支付平台 1微信 2支付宝
+     */
+    @Excel(name = "公司名称")
+    @ApiModelProperty("公司名称")
+    private String companyName;
+    /**
+     * 微信流水号
+     */
+    @Excel(name = "商品名称")
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+    /**
+     * 关闭时间
+     */
+    @Excel(name = "商品业务层级")
+    @ApiModelProperty("商品业务层级")
+    private String goodsBusiness;
+    /**
+     * 订单完成时间
+     */
+    @Excel(name = "商品年份")
+    @ApiModelProperty("商品年份")
+    private String year;
+    /**
+     * 订单类型 1充值订单 2金币消费订单
+     */
+    @Excel(name = "商品标准价格")
+    @ApiModelProperty("商品标准价格")
+    private BigDecimal goodsPrice;
+    /**
+     * 支付价格
+     */
+    @Excel(name = "商品成交价格")
+    @ApiModelProperty("商品成交价格")
+    private BigDecimal goodsRealPrice;
+    /**
+     * 收费方式 1即刻收费 2稍后收费
+     */
+    @Excel(name = "支付状态")
+    @ApiModelProperty("支付状态")
+    private String goodsPayStatus;
+    /**
+     * 订单来源 1业务员录单
+     */
+    @Excel(name = "已收金额")
+    @ApiModelProperty("已收金额")
+    private BigDecimal goodsReceived;
+    /**
+     * 商品标准价格
+     */
+    @Excel(name = "未收金额")
+    @ApiModelProperty("未收金额")
+    private BigDecimal goodsNotReceived;
+    /**
+     * 商品成交价格
+     */
+    @Excel(name = "订单状态")
+    @ApiModelProperty("订单状态")
+    private String orderStatus;
+    /**
+     * 商品名称
+     */
+    @Excel(name = "退款状态")
+    @ApiModelProperty("退款状态")
+    private String refundStatus;
+    @Excel(name = "发票状态")
+    @ApiModelProperty("发票状态")
+    private String invoiceStatus;
+
+
+    /**
+     * 真实姓名
+     */
+    @Excel(name = "复购-学时冲突")
+    @ApiModelProperty("复购-学时冲突")
+    private String rebuy;
+}

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserQueryBo.java

@@ -248,5 +248,6 @@ public class UserQueryBo extends BaseEntity {
 
 	@ApiModelProperty("月份结束时间")
 	private Long monthEndTime;
-
+	@ApiModelProperty("班级id")
+	private Long gradeId;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -151,6 +151,8 @@ public interface IUserService extends IService<User> {
 
     User getByCardNoTenant(String idCard);
 
+	User getByCardTenant(String idCard,String tenantId);
+
 	Map<String, Object> importSevenUser(List<UserPeriodImportBo> userList);
 
     void userDataImportUp(List<UserDataImportBo> customerBos);
@@ -166,4 +168,6 @@ public interface IUserService extends IService<User> {
 	UserStudyTimeVo getStudyTimeByCard(String idCard,Integer type);
 
 	List<UserBusinessGoodsVo> getUserBusinessGoods(List<UserBusinessGoodsBo> bos);
+
+    String studyRecord(List<UserStudyExportVo> customerBos);
 }

+ 28 - 10
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -1072,16 +1072,20 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 userSubscribeImports.add(userSubscribeImport);
                 continue;
             }
-            List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
-            if (!userSubscribes.isEmpty()) {
-                UserSubscribe userSubscribe = userSubscribes.get(0);
-                String name = getName(userSubscribe.getStudentType().longValue());
-                if (!userSubscribeImport.getStudentType().equals(name)) {
-                    userSubscribeImport.setCause("学员类型错误");
-                    userSubscribeImports.add(userSubscribeImport);
-                    continue;
-                }
-            }
+//            else {
+//                List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
+//                if (!userSubscribes.isEmpty()){
+//                    UserSubscribe userSubscribe = userSubscribes.get(0);
+//                    if (Validator.isNotEmpty(userSubscribeImport.getStudentType())){
+//                        String name = getName(userSubscribe.getStudentType().longValue());
+//                        if (!userSubscribeImport.getStudentType().equals(name)){
+//                            userSubscribeImport.setCause("学员类型错误");
+//                            userSubscribeImports.add(userSubscribeImport);
+//                            continue;
+//                        }
+//                    }
+//                }
+//            }
             userSubscribeAddBo.setUserId(userId);
             //预约状态
             userSubscribeAddBo.setSubscribeStatus(1);
@@ -1395,6 +1399,20 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 userSubscribeImports.add(userSubscribeImport);
                 continue;
             }
+//            else {
+//                List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
+//                if (!userSubscribes.isEmpty()){
+//                    UserSubscribe userSubscribe = userSubscribes.get(0);
+//                    if (Validator.isNotEmpty(userSubscribeImport.getStudentType())){
+//                        String name = getName(userSubscribe.getStudentType().longValue());
+//                        if (!userSubscribeImport.getStudentType().equals(name)){
+//                            userSubscribeImport.setCause("学员类型错误");
+//                            userSubscribeImports.add(userSubscribeImport);
+//                            continue;
+//                        }
+//                    }
+//                }
+//            }
             userSubscribeAddBo.setUserId(userId);
             //预约状态
             userSubscribeAddBo.setSubscribeStatus(1);

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyExportVo.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.user.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月14日 15:25
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class UserStudyExportVo implements Serializable {
+
+    @Excel(name = "学员姓名")
+    private String userName;
+
+    @Excel(name = "学员身份证")
+    private String userCard;
+
+    @Excel(name = "手机号码")
+    private String userPhone;
+
+    @Excel(name = "所属公司")
+    private String companyMame;
+
+    @Excel(name = "学时")
+    private String classHours;
+
+    @Excel(name = "商品名称")
+    private String goodsName;
+
+    @Excel(name = "学时审核状态")
+    private String periodStatus;
+
+    @Excel(name = "所在班级")
+    private String className;
+
+    @Excel(name = "学习进度")
+    private String studyRecord;
+}

+ 114 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -587,6 +587,120 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by user_info_status desc ,user_status desc ,cgu.id desc
     </select>
 
+
+    <select id="getPlush"  parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo" resultType="integer">
+        SELECT
+        count(*) AS count
+        FROM
+        class_grade_user cgu
+        LEFT JOIN class_grade cg ON cgu.grade_id = cg.grade_id
+        LEFT JOIN `user` u ON u.user_id = cgu.user_id
+        LEFT JOIN order_goods og on cgu.order_goods_id = og.order_goods_id
+        LEFT JOIN goods g on og.goods_id = g.goods_id
+        LEFT JOIN major m ON g.major_id = m.id
+        LEFT JOIN course_business cb ON g.business_id = cb.id
+        LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+        LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+        LEFT JOIN user_wx_follow uwf ON u.union_id = uwf.union_id
+        LEFT JOIN user_exam_goods ueg ON ueg.order_goods_id = og.order_goods_id
+        LEFT JOIN user_profile up on cgu.order_goods_id = up.order_goods_id and up.type_status=1 and up.current_status = 1
+        where 1=1 and cgu.`status` = 1
+        <if test="sevenCode != null and sevenCode !='' ">
+            AND cg.seven_code = #{sevenCode}
+        </if>
+        <if test="gradeId != null and gradeId !='' and (sevenCode == null or sevenCode =='')">
+            and cgu.grade_id = #{gradeId}
+        </if>
+        <if test="choice != null and choice == 1 ">
+            and (SELECT COUNT(cge.grade_id) FROM class_grade cge LEFT JOIN class_grade_user cgur on cge.grade_id = cgur.grade_id where cgu.user_id =cgur.user_id and  cgur.order_goods_id = cgu.order_goods_id AND (unix_timestamp(now()) &lt; cge.class_end_time or cge.class_start_time is null) and cge.`status`=1 and cgur.`status` =1)= 0 and cgu.period_status=0
+            AND (SELECT COUNT(cgde.grade_id) FROM class_grade cgde where cgde.grade_id = cg.grade_id and (unix_timestamp(now()) &lt; cgde.class_end_time or cgde.class_start_time is null)) =0
+        </if>
+        <if test="choice != null and choice == 2 ">
+            and (SELECT COUNT(cge.grade_id) FROM class_grade cge LEFT JOIN class_grade_user cgur on cge.grade_id = cgur.grade_id where cgu.user_id =cgur.user_id and  cgur.order_goods_id = cgu.order_goods_id  AND (unix_timestamp(now()) &lt; cge.class_end_time or cge.class_start_time is null)
+            and cge.`status`=1 and cgur.`status` =1)> 0
+            AND (SELECT COUNT(cgde.grade_id) FROM class_grade cgde where cgde.grade_id = cg.grade_id and (unix_timestamp(now()) &lt; cgde.class_end_time or cgde.class_start_time is null)) =0
+        </if>
+        <if test="studyCountMore != null and studyCountMore == 2 ">
+            AND og.study_count > 0 AND cgu.change_grade = 0 AND (cg.status = 0 or unix_timestamp(now()) > cg.class_end_time)
+        </if>
+        <if test="studyCountMore != null and studyCountMore == 1 ">
+            AND og.study_count > 0 AND cgu.change_grade = 1
+        </if>
+        <if test="studyCountMore != null and studyCountMore == 0 ">
+            AND og.study_count = 0
+        </if>
+        <if test="periodStatus != null ">
+            AND cgu.period_status = #{periodStatus}
+        </if>
+        <if test="officialStatus != null and officialStatus == 1 ">
+            AND cgu.official_status = 1
+        </if>
+        <if test="officialStatus != null and officialStatus == 0 ">
+            AND (cgu.official_status is NULL or cgu.official_status=0)
+        </if>
+        <if test="periodPlush != null and periodPlush == 1 ">
+            AND cgu.period_plush = 1
+        </if>
+        <if test="periodPlush != null and periodPlush == 0 ">
+            AND (cgu.period_plush is NULL or cgu.period_plush=0)
+        </if>
+        <if test="searchKey != null and searchKey != ''">
+            AND (cg.class_name like concat('%', #{searchKey}, '%') or u.realname like concat('%', #{searchKey}, '%') or u.company_name like concat('%', #{searchKey}, '%'))
+        </if>
+        <if test="telphone != null and telphone != ''">
+            AND (u.telphone like concat('%', #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%'))
+        </if>
+        <if test="idCard != null and idCard != ''">
+            AND u.id_card like concat('%', #{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
+        </if>
+        <if test="idCards != null and idCards.size() != 0">
+            AND u.id_card IN
+            <foreach collection="idCards" item="item" index="index" open="(" close=")" separator=",">
+                #{item,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+            </foreach>
+        </if>
+        <if test="orderSn != null and orderSn != ''">
+            AND og.order_sn = #{orderSn}
+        </if>
+        <if test="goodsName != null and goodsName != ''">
+            AND g.goods_name like concat('%', #{goodsName}, '%')
+        </if>
+        <if test="searchStartTime != null and searchStartTime != ''">
+            AND cgu.create_time &gt; #{searchStartTime}
+        </if>
+        <if test="searchEndTime != null and searchEndTime != ''">
+            AND cgu.create_time &lt; #{searchEndTime}
+        </if>
+        <if test="finishStatus != null">
+            AND cgu.finish_status = #{finishStatus}
+        </if>
+        <if test="learnStatus != null">
+            AND cgu.learn_status = #{learnStatus}
+        </if>
+        <if test="projectId != null and projectId != ''">
+            AND g.project_id = #{projectId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        <if test="majorId != null and majorId != ''">
+            AND m.id = #{majorId}
+        </if>
+        <if test="hasInterface != null and hasInterface == 0">
+            AND cg.interface_account_id is null AND cg.no_interface_account_id is null
+        </if>
+        <if test="hasInterface != null and hasInterface == 1">
+            AND cg.interface_account_id is not null
+        </if>
+        <if test="hasInterface != null and hasInterface == 2">
+            AND cg.no_interface_account_id is not null
+        </if>
+        order by cgu.id desc
+    </select>
+
     <select id="listGradeAll"  parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo" resultMap="ClassGradeStudentVo">
         SELECT
         cgu.id,

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -2118,6 +2118,9 @@
           AND IFNULL( gu.period_plush, 0 ) != 1
 	AND gu.period_status = 1
 	AND gu.official_status = 1
+        <if test="gradeId != null and gradeId != ''">
+            AND gu.grade_id = #{gradeId}
+        </if>
     </select>
 
     <select id="selectGoodsGradeList" parameterType="Long" resultMap="ClassGradeUserGoodsVoResult">

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderInputMapper.xml

@@ -84,6 +84,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="businessId != null and businessId != ''">
         AND oi.business_id = #{businessId}
         </if>
+        <if test="inputOrderSn != null and inputOrderSn != ''">
+            AND oi.input_order_sn = #{inputOrderSn}
+        </if>
         <if test="educationTypeId != null and educationTypeId != ''">
             AND oi.education_type_id = #{educationTypeId}
         </if>

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

@@ -701,4 +701,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           AND og.order_sn = #{orderSn}
     </select>
 
+
+    <select id="getOrderGoodsByBo" resultType="java.lang.Long" parameterType="java.lang.Long">
+        SELECT
+        COUNT(*)
+        FROM
+        `order` o
+        LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+        WHERE
+        o.user_id = #{userId}
+        AND og.goods_id = #{goodsId}
+        AND og.pay_status != 1
+        AND og.refund_status != 2
+        AND UNIX_TIMESTAMP(
+        NOW()) <![CDATA[ >= ]]> og.service_start_time
+        AND UNIX_TIMESTAMP(
+        NOW()) <![CDATA[ <= ]]> og.service_end_time
+    </select>
+
 </mapper>

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

@@ -614,7 +614,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             t.tenant_name,
             us.create_time,
             us.subscribe_status,
-            ( SELECT SUM( ueg.exam_number ) FROM user_exam_goods ueg WHERE us.order_goods_id = ueg.order_goods_id GROUP BY ueg.order_goods_id ) AS applyNum,
+            ( SELECT SUM( ueg.exam_number - ueg.expend_number ) FROM user_exam_goods ueg WHERE us.order_goods_id = ueg.order_goods_id GROUP BY ueg.order_goods_id ) AS applyNum,
             us.exam_status,
             us.result,
             us.performance,