he2802 %!s(int64=2) %!d(string=hai) anos
pai
achega
aaaeb7d7f0

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

@@ -69,6 +69,17 @@ public class UserSubscribeController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 预约列表(包含其他使用祥粤考场的机构)
+     */
+    @ApiOperation("预约列表(包含其他使用祥粤考场的机构)")
+    @GetMapping("/sub/list")
+    public TableDataInfo<UserSubVo> getListSubscribe(UserSubQueryBo bo) {
+        startPage();
+        List<UserSubVo> list = iUserSubscribeService.getListSubscribe(bo);
+        return getDataTable(list);
+    }
+
     /**
      * 根据月份获取当月考试场次
      */

+ 5 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java

@@ -496,6 +496,11 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         return baseMapper.getListNoTenant(tenantId);
     }
 
+    @Override
+    public List<SysTenant> getExamRoomTenant() {
+        return baseMapper.getExamRoomTenant();
+    }
+
     private void initRoles(Long newTenantId,Long tenantId) {
         List<String> roleKey = new ArrayList<>();
         roleKey.add("seller");

+ 4 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -781,8 +781,7 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             }
             goodsUserVo.setSecAllNum(secLong);
             goodsUserVo.setStuAllNum(studyLong);
-            goodsUserVo.setSubscribeSign(2);
-
+            goodsUserVo.setSubscribeSign(0);
 
             //查询对应考试安排
             List<ExamApplyGoodsVo> examApplyGoodsVoList = iExamApplyGoodsService.listByGoodsId(goodsUserVo.getGoodsId());
@@ -799,6 +798,9 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                             .last("limit 1"));
                     if (ObjectUtils.isNull(userSubscribe)){
                         goodsUserVo.setSubscribeSign(1);
+                    }else if (userSubscribe.getSubscribeStatus() == 1 && userSubscribe.getExamStatus() == 1
+                            && ObjectUtils.isNull(userSubscribe.getResult())){
+                        goodsUserVo.setSubscribeSign(2);
                     }else if (userSubscribe.getSubscribeStatus() == 1 && userSubscribe.getExamStatus() == 0){
                         goodsUserVo.setSubscribeSign(4);
                     }else if (ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){

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

@@ -98,7 +98,7 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
     List<String> getSevenYearByCode(String sevenCode);
 
     @InterceptorIgnore(tenantLine = "true")
-    List<ClassGrade> listByIdsNoTenant(List<Long> ids);
+    List<ClassGrade> listByIdsNoTenant(@Param("ids") List<Long> ids);
 
     @InterceptorIgnore(tenantLine = "true")
     List<ClassGrade> getListNoTenant(@Param("sevenCode") String sevenCode,@Param("gradeId") Long gradeId);

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

@@ -20,4 +20,7 @@ public interface SysTenantMapper extends BaseMapper<SysTenant> {
 
     @InterceptorIgnore(tenantLine = "true")
     List<SysTenant> getListNoTenant(Long tenantId);
+    @InterceptorIgnore(tenantLine = "true")
+    List<SysTenant> getExamRoomTenant();
+
 }

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

@@ -71,4 +71,6 @@ public interface ISysTenantService extends IService<SysTenant> {
 	boolean deleteTopTenant(SysTopTenantEditBo bo);
 
     List<SysTenant> getListNoTenant(Long tenantId);
+
+	List<SysTenant> getExamRoomTenant();
 }

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserSubQueryBo.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.modules.user.bo;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 用户预约考试分页查询对象 user_subscribe
+ *
+ * @author ruoyi
+ * @date 2021-12-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("预约列表(包含其他使用祥粤考场的机构)")
+public class UserSubQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+	@ApiModelProperty("预约状态:1成功 2取消 3已过期")
+	private Integer subscribeStatus;
+
+	@ApiModelProperty("考试状态:1待考试 2通过 3未通过")
+	private Integer applyStatus;
+
+	@ApiModelProperty("剩余考试次数")
+	private Integer applyNum;
+
+	@ApiModelProperty("是否新考:1是 2否")
+	private Integer newApply;
+
+	@ApiModelProperty("关键字")
+	private String keyWord;
+
+	@ApiModelProperty("考试时间月份")
+	private Long applyTime;
+
+	@ApiModelProperty("考试时间")
+	private String examTime;
+
+	@ApiModelProperty("当前时间")
+	private Long dataTime;
+
+
+	private List<Long> tenantIds;
+
+}

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

@@ -2,9 +2,12 @@ package com.zhongzheng.modules.user.mapper;
 
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
+import com.zhongzheng.modules.goods.domain.GoodsQuestionRel;
+import com.zhongzheng.modules.user.bo.UserSubQueryBo;
 import com.zhongzheng.modules.user.bo.UserSubscribeQueryBo;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.user.vo.UserSubVo;
 import com.zhongzheng.modules.user.vo.UserSubscribeVo;
 import com.zhongzheng.modules.user.vo.UserVo;
 import org.apache.ibatis.annotations.Param;
@@ -68,4 +71,9 @@ public interface UserSubscribeMapper extends BaseMapper<UserSubscribe> {
     @InterceptorIgnore(tenantLine = "true")
     Integer getExamApplyNum(String relCode);
 
+    @InterceptorIgnore(tenantLine = "true")
+    List<UserSubVo> getListSubscribe(UserSubQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    GoodsQuestionRel getQuestionRel(Long orderGoodsId);
 }

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

@@ -112,4 +112,6 @@ public interface IUserSubscribeService extends IService<UserSubscribe> {
     String updateStudentImage(UpdateStudentImageBo bo);
 
 	void examApplySubscribeCancel(ExamApplySubscribeBo bo);
+
+	List<UserSubVo> getListSubscribe(UserSubQueryBo bo);
 }

+ 43 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -2639,6 +2639,49 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
         sendExamcancel(userSubscribeEditBo);
     }
 
+    @Override
+    public List<UserSubVo> getListSubscribe(UserSubQueryBo bo) {
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant sysTenant = iSysTenantService.getById(Long.valueOf(tenantId));
+        if (ObjectUtils.isNotNull(sysTenant.getExamRoom()) && sysTenant.getExamRoom() == 1){
+           List<SysTenant> tenants = iSysTenantService.getExamRoomTenant();
+           bo.setTenantIds(tenants.stream().map(SysTenant::getTenantId).collect(Collectors.toList()));
+        }else {
+            bo.setTenantIds(Arrays.asList(Long.valueOf(tenantId)));
+        }
+        Long zeroTime = DateUtils.getTodayZeroTime();
+        bo.setDataTime(zeroTime);
+        List<UserSubVo> userSubVos = baseMapper.getListSubscribe(bo);
+        if (CollectionUtils.isEmpty(userSubVos)){
+            return new ArrayList<>();
+        }
+        userSubVos.forEach(item -> {
+            item.setUserCard(EncryptHandler.decrypt(item.getUserCard()));
+            item.setUserPhone(EncryptHandler.decrypt(item.getUserPhone()));
+            if (item.getSubscribeStatus() == 1 && zeroTime > item.getApplyTime()){
+                item.setSubscribeStatus(3);
+            }
+            GoodsQuestionRel questionRel = baseMapper.getQuestionRel(item.getOrderGoodsId());
+            if (ObjectUtils.isNotNull(questionRel)){
+                item.setQuestionStatus(1);
+            }else {
+                item.setQuestionStatus(0);
+            }
+            //考试状态
+            if (item.getSubscribeStatus() == 1 && item.getExamStatus() == 0){
+                item.setApplyStatus(1);
+            }else if (item.getSubscribeStatus() == 1 && item.getExamStatus() == 1 && item.getResult() == 1){
+                item.setApplyStatus(2);
+            }else if (item.getSubscribeStatus() == 1 && item.getExamStatus() == 1 && item.getResult() == 0){
+                item.setApplyStatus(3);
+            }else {
+                item.setApplyStatus(item.getExamStatus());
+            }
+        });
+
+        return userSubVos;
+    }
+
     /**
      * 学员学时图片修改
      * @author change

+ 72 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserSubVo.java

@@ -0,0 +1,72 @@
+package com.zhongzheng.modules.user.vo;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 用户预约考试分页查询对象 user_subscribe
+ *
+ * @author ruoyi
+ * @date 2021-12-07
+ */
+@Data
+@ApiModel("预约列表(包含其他使用祥粤考场的机构)")
+public class UserSubVo implements Serializable {
+
+	@ApiModelProperty("预约ID")
+	private Long subscribeId;
+	private Long orderGoodsId;
+	@ApiModelProperty("学员姓名")
+	private String userName;
+	@ApiModelProperty("学员身份证")
+	private String userCard;
+	@ApiModelProperty("学员手机号码")
+	private String userPhone;
+	@ApiModelProperty("课程名称")
+	private String goodsName;
+	@ApiModelProperty("岗位")
+	private String majorName;
+	@ApiModelProperty("所属机构")
+	private String tenantName;
+	@ApiModelProperty("创建时间")
+	private Long createTime;
+	@ApiModelProperty("预约状态:1成功 2取消 3已过期")
+	private Integer subscribeStatus;
+	@ApiModelProperty("预约结果")
+	private String applyResult;
+	@ApiModelProperty("是否开通题库:1是 0否")
+	private Integer questionStatus;
+	@ApiModelProperty("考试状态:1待考试 2通过 3未通过")
+	private Integer applyStatus;
+	@ApiModelProperty("剩余考试次数")
+	private Integer applyNum;
+	@ApiModelProperty("是否新考:1是 2否")
+	private Integer newApply;
+	@ApiModelProperty("出考情况:0 待登记 1正常 2缺考 3作弊 4替考")
+	private Integer examStatus;
+	@ApiModelProperty("1通过 0不通过")
+	private Integer result;
+	@ApiModelProperty("考试日期")
+	private Long applyTime;
+	@ApiModelProperty("考试开始时间")
+	private String applyStartTime;
+	@ApiModelProperty("考试结束时间")
+	private String applyEndTime;
+	@ApiModelProperty("考试地点")
+	private String applyAddress;
+	@ApiModelProperty("成绩")
+	private BigDecimal performance;
+	@ApiModelProperty("证书编号")
+	private String certificateCode;
+	@ApiModelProperty("发证时间")
+	private String certificateStartTime;
+	@ApiModelProperty("到期时间")
+	private String certificateEndTime;
+
+}

+ 3 - 1
zhongzheng-system/src/main/resources/mapper/modules/system/SysTenantMapper.xml

@@ -39,6 +39,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getListNoTenant" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.system.domain.SysTenant">
         SELECT * FROM sys_tenant WHERE share_class = 1 AND `status` = 1 AND tenant_id != #{tenantId}
     </select>
-
+    <select id="getExamRoomTenant" resultType="com.zhongzheng.modules.system.domain.SysTenant">
+        SELECT * FROM sys_tenant WHERE exam_room = 1 AND `status` = 1
+    </select>
 
 </mapper>

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

@@ -594,4 +594,124 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           AND ea.`status` = 1
           AND us.subscribe_status = 1
     </select>
+
+    <select id="getListSubscribe" parameterType="com.zhongzheng.modules.user.bo.UserSubQueryBo" resultType="com.zhongzheng.modules.user.vo.UserSubVo">
+        SELECT
+            us.subscribe_id,
+            us.order_goods_id,
+            u.realname AS userName,
+            u.id_card AS userCard,
+            u.telphone AS userPhone,
+            g.goods_name,
+            m.category_name AS majorName,
+            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,
+            us.exam_status,
+            us.result,
+            us.performance,
+            us.apply_site_exam_time as applyTime,
+            us.apply_site_start_time as applyStartTime,
+            us.apply_site_end_time as applyEndTime,
+            us.apply_site_address as applyAddress,
+            us.certificate_code,
+        CASE
+        WHEN    (
+                SELECT
+                COUNT( usu.order_goods_id )
+                FROM
+                user_subscribe usu
+                WHERE
+                usu.user_id = us.user_id
+                AND usu.order_goods_id = us.order_goods_id
+                AND usu.subscribe_status = 1
+                ) = 1
+        THEN 1
+        WHEN    (
+                SELECT
+                COUNT( usu.order_goods_id )
+                FROM
+                user_subscribe usu
+                WHERE
+                usu.user_id = us.user_id
+                AND usu.order_goods_id = us.order_goods_id
+                AND usu.subscribe_status = 1
+                ) >1
+        THEN 2
+        ELSE 0 END
+                AS newApply
+        FROM
+            user_subscribe us
+                LEFT JOIN order_goods og ON us.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 sys_tenant t ON us.tenant_id = t.tenant_id
+                LEFT JOIN `user` u ON us.user_id = u.user_id
+        WHERE
+            1 = 1
+        <if test="subscribeStatus != null and subscribeStatus != '' and (subscribeStatus == 1 or subscribeStatus == 2)">
+            AND us.subscribe_status = #{subscribeStatus}
+        </if>
+        <if test="subscribeStatus != null and subscribeStatus != '' and subscribeStatus == 3">
+            AND (us.subscribe_status = 1 AND #{dataTime} &gt; us.apply_site_exam_time)
+        </if>
+        <if test="applyStatus != null and applyStatus != '' and applyStatus == 1 ">
+            AND ( us.exam_status = 1 AND us.result IS NULL )
+        </if>
+        <if test="applyStatus != null and applyStatus != '' and applyStatus == 2 ">
+            AND ( us.exam_status = 1 AND us.result = 1 )
+        </if>
+        <if test="applyStatus != null and applyStatus != '' and applyStatus == 3 ">
+            AND ( us.exam_status = 1 AND us.result = 0)
+        </if>
+        <if test="applyNum != null and applyNum != '' ">
+            AND ( 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 ) = #{applyNum}
+        </if>
+        <if test="newApply != null and newApply != '' and newApply == 1">
+            AND (
+            SELECT
+            COUNT( usu.order_goods_id )
+            FROM
+            user_subscribe usu
+            WHERE
+            usu.user_id = us.user_id
+            AND usu.order_goods_id = us.order_goods_id
+            AND usu.subscribe_status = 1
+            ) = 1
+        </if>
+        <if test="newApply != null and newApply != '' and newApply == 2">
+            AND (
+            SELECT
+            COUNT( usu.order_goods_id )
+            FROM
+            user_subscribe usu
+            WHERE
+            usu.user_id = us.user_id
+            AND usu.order_goods_id = us.order_goods_id
+            AND usu.subscribe_status = 1
+            ) &gt; 1
+        </if>
+        <if test="keyWord != null and keyWord != '' ">
+            AND (u.realname LIKE concat('%',#{keyWord},'%') OR u.id_card = #{keyWord,typeHandler=com.zhongzheng.common.type.EncryptHandler})
+        </if>
+        <if test="applyTime != null and applyTime != '' ">
+            AND us.apply_site_exam_time = #{applyTime}
+        </if>
+        <if test="examTime != null and examTime != '' ">
+            AND us.apply_site_start_time = #{examTime}
+        </if>
+        <if test="tenantIds != null and tenantIds.size()!=0 " >
+            AND us.tenant_id in
+            <foreach collection="tenantIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        ORDER BY us.create_time DESC
+    </select>
+
+    <select id="getQuestionRel" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.goods.domain.GoodsQuestionRel">
+        SELECT * FROM goods_question_rel WHERE order_goods_id = #{orderGoodsId} AND `status` = 1 AND question_do_num &gt; 0 LIMIT 1
+    </select>
+
 </mapper>