浏览代码

feat(system): 添加用户签署合同列表查询功能

- 在 AppContractSignMapper 中添加 queryUserSignContractList 方法
- 新增 ContractSignVO 类用于查询结果映射
- 在 ESignController 和 ESignServiceImpl 中添加 queryUserSignContractList接口
- 优化 AppDeviceController 中的 add 方法,增加设备存在性检查
- 新增开门记录查询相关接口和工具方法
SheepHy 2 天之前
父节点
当前提交
ee9321aa8b
共有 11 个文件被更改,包括 163 次插入9 次删除
  1. 2 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/ESignApi.java
  2. 17 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/ESignController.java
  3. 11 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IESignService.java
  4. 9 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/ESignServiceImpl.java
  5. 3 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java
  6. 2 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotConstant.java
  7. 17 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotTool.java
  8. 28 7
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppDeviceController.java
  9. 11 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppContractSignMapper.java
  10. 30 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppContractSignMapper.xml
  11. 33 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/ContractSignVO.java

+ 2 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/ESignApi.java

@@ -100,4 +100,6 @@ public class ESignApi {
     public Result<List<AppContractSign>> queryWaitSignList(@RequestParam("orderId") @Schema(description="订单ID")String orderId){
         return Result.OK(iESignService.queryWaitSignList(orderId));
     }
+
+
 }

+ 17 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/ESignController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.app.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -10,6 +11,7 @@ import org.jeecg.modules.app.esign.exception.EsignDemoException;
 import org.jeecg.modules.app.service.IESignService;
 import org.jeecg.modules.system.app.dto.AppContractInfoDTO;
 import org.jeecg.modules.system.app.entity.AppContractInfo;
+import org.jeecg.modules.system.app.vo.ContractSignVO;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -155,4 +157,19 @@ public class ESignController {
     public Result<String> templatePreviewUrl(@RequestParam("docTemplateId")@Schema(description="合同模板ID")String docTemplateId) throws EsignDemoException{
         return Result.OK(iESignService.templatePreviewUrl(docTemplateId));
     }
+
+    /**
+     * @Author SheepHy
+     * @Description 获取用户签署合同列表
+     * @Date 14:37 2025/8/6
+     * @Param
+     * @return
+     **/
+    @GetMapping("/queryUserSignContractList")
+    @Operation(summary = "获取用户签署合同列表")
+    public Result<IPage<ContractSignVO>> queryUserSignContractList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                                                   @RequestParam(name = "contractName")String contractName){
+        return Result.OK(iESignService.queryUserSignContractList(contractName, pageNo, pageSize));
+    }
 }

+ 11 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IESignService.java

@@ -1,11 +1,13 @@
 package org.jeecg.modules.app.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.jeecg.modules.app.dto.SealInfoDTO;
 import org.jeecg.modules.app.dto.SignCallbackDTO;
 import org.jeecg.modules.app.esign.exception.EsignDemoException;
 import org.jeecg.modules.system.app.dto.AppContractInfoDTO;
 import org.jeecg.modules.system.app.entity.AppContractInfo;
 import org.jeecg.modules.system.app.entity.AppContractSign;
+import org.jeecg.modules.system.app.vo.ContractSignVO;
 
 import java.util.List;
 import java.util.Map;
@@ -157,4 +159,13 @@ public interface IESignService {
      * @return
      **/
     List<AppContractSign> queryWaitSignList(String orderId);
+
+    /**
+     * @Author SheepHy
+     * @Description 获取用户签署合同列表
+     * @Date 14:37 2025/8/6
+     * @Param
+     * @return
+     **/
+    IPage<ContractSignVO> queryUserSignContractList(String contractName, int pageNo, int pageSize);
 }

+ 9 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/ESignServiceImpl.java

@@ -1,7 +1,9 @@
 package org.jeecg.modules.app.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.gson.*;
 import com.google.gson.reflect.TypeToken;
 import lombok.extern.log4j.Log4j2;
@@ -20,6 +22,7 @@ import org.jeecg.modules.system.app.entity.AppContractSign;
 import org.jeecg.modules.system.app.entity.AppOrder;
 import org.jeecg.modules.system.app.entity.FamilyMembers;
 import org.jeecg.modules.system.app.mapper.*;
+import org.jeecg.modules.system.app.vo.ContractSignVO;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.mapper.SysDepartMapper;
 import org.jeecg.modules.system.mapper.SysUserMapper;
@@ -676,6 +679,12 @@ public class ESignServiceImpl implements IESignService {
         return appContractSigns;
     }
 
+    @Override
+    public IPage<ContractSignVO> queryUserSignContractList(String contractName, int pageNo, int pageSize) {
+        Page<ContractSignVO> page = new Page<>(pageNo, pageSize);
+        return appContractSignMapper.queryUserSignContractList(page,contractName);
+    }
+
     public String orgAuthorizedSeal(String orgId) throws EsignDemoException {
         // 使用传入的 orgId
         EsignHttpResponse orgAuthorizedSealList = orgAuthorizedSealList("585f3eabc65b42b1ad5ae56f4e2bdde6");

+ 3 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java

@@ -933,7 +933,9 @@ public class OrderServiceImpl implements IOrderService {
             }
             appOrder.setPrice(totalPrice);
             appOrderMapper.insert(appOrder);
-            saveSignFlowRecord(appOrder);
+            if(appOrder.getType() == 2){
+                saveSignFlowRecord(appOrder);
+            }
 
             if (!insureOrderInfoList.isEmpty()) {
                 //保存保险

+ 2 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotConstant.java

@@ -51,6 +51,7 @@ public interface HikiotConstant {
     String CONFIG_DOOR_PLAN_TEMPLATE_URL = "https://open-api.hikiot.com/device/direct/v1/timePlanAdd/doorRightPlan";
     /**配置门计划模板*/
     String CONFIG_DOOR_PLAN_TEMPLATE_URL2 = "https://open-api.hikiot.com/device/direct/v1/timePlanAdd/planTemplate";
-
+    /**分页查询开门记录*/
+    String QUERY_OPEN_DOOR_RECORD_URL = "https://open-api.hikiot.com/issue/v1/event/person/page";
 
 }

+ 17 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotTool.java

@@ -436,7 +436,24 @@ public class HikiotTool {
         return sendPostRequest(CONFIG_DOOR_PLAN_TEMPLATE_URL2, str, setHeaders());
     }
 
+    /**
+     * @Author SheepHy
+     * @Description 分页查询开门记录
+     * @Date 10:05 2025/8/25
+     **/
+    public static String queryOpenDoorRecord(int page, int size,String employeeNos) throws IOException, InterruptedException {
+        Map<String, Object> queryOpenDoor = new HashMap<>();
+        queryOpenDoor.put("page", page);
+        queryOpenDoor.put("size", size);
+        queryOpenDoor.put("employeeNos", new String[] {employeeNos});
+//        queryOpenDoor.put("deviceSerial", "FX0889961");
+//        queryOpenDoor.put("deviceSerials", new String[] {"FX0889961"});
+        JsonObject jsonObject = gson.fromJson(sendPostRequest(QUERY_OPEN_DOOR_RECORD_URL, gson.toJson(queryOpenDoor), setHeaders()), JsonObject.class);
+        return gson.toJson(jsonObject.get("data"));
+    }
+
     public static void main(String[] args) throws IOException, InterruptedException {
+        queryOpenDoorRecord(1,20,"00wm");
 //        addUser();
 //        addUserPlanTemplate();
 //        addFace();

+ 28 - 7
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppDeviceController.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.system.app.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
@@ -24,6 +25,7 @@ import org.springframework.web.servlet.ModelAndView;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.Arrays;
 
 import static org.jeecg.modules.hikiot.HikiotTool.*;
@@ -74,7 +76,6 @@ public class AppDeviceController extends JeecgController<AppDevice, IAppDeviceSe
 	/**
 	 *   添加
 	 *
-	 * @param AppDevice
 	 * @return
 	 */
 	@AutoLog(value = "nm_device-添加")
@@ -82,13 +83,19 @@ public class AppDeviceController extends JeecgController<AppDevice, IAppDeviceSe
 	@RequiresPermissions("com:nm_device:add")
 	@PostMapping(value = "/add")
 	@Transactional
-	public Result<String> add(@RequestBody AppDevice AppDevice){
-		AppDeviceService.save(AppDevice);
+	public Result<String> add(@RequestBody AppDevice appDevice){
+		if(AppDeviceService.getOne(Wrappers.<AppDevice>lambdaQuery()
+				.eq(AppDevice::getDeviceSerial,appDevice.getDeviceSerial())
+				.eq(AppDevice::getDeviceNo,appDevice.getDeviceNo())
+				.eq(AppDevice::getDeviceType,appDevice.getDeviceType())) != null) {
+			return Result.error("设备已存在!");
+		}
+		AppDeviceService.save(appDevice);
 		try {
-			if(AppDevice.getDeviceSerial() != null && AppDevice.getValidateCode() != null){
-				String addDevice = addDevice(AppDevice.getDeviceSerial(), AppDevice.getValidateCode());
-				String userWeekPlan = addUserWeekPlan(AppDevice.getDeviceSerial());
-				String userPlanTemplate = addUserPlanTemplate(AppDevice.getDeviceSerial());
+			if(appDevice.getDeviceSerial() != null && appDevice.getValidateCode() != null){
+				String addDevice = addDevice(appDevice.getDeviceSerial(), appDevice.getValidateCode());
+				String userWeekPlan = addUserWeekPlan(appDevice.getDeviceSerial());
+				String userPlanTemplate = addUserPlanTemplate(appDevice.getDeviceSerial());
 				JsonObject deviceJson = JsonParser.parseString(addDevice).getAsJsonObject();
 				JsonObject userWeekPlanJson = JsonParser.parseString(userWeekPlan).getAsJsonObject();
 				JsonObject userPlanTemplateJson = JsonParser.parseString(userPlanTemplate).getAsJsonObject();
@@ -194,4 +201,18 @@ public class AppDeviceController extends JeecgController<AppDevice, IAppDeviceSe
         return super.importExcel(request, response, AppDevice.class);
     }
 
+	/**
+	 * @Author SheepHy
+	 * @Description 分页查询开门记录
+	 * @Date 10:53 2025/8/25
+	 **/
+	@Operation(summary="分页查询开门记录")
+	@GetMapping(value = "/listOpenDoor")
+	public Result<String> listOpenDoor(@RequestParam String employeeNos,
+													  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) throws IOException, InterruptedException {
+		return Result.OK(queryOpenDoorRecord(pageNo, pageSize, employeeNos));
+	}
+
+
 }

+ 11 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppContractSignMapper.java

@@ -1,9 +1,20 @@
 package org.jeecg.modules.system.app.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.system.app.entity.AppContractSign;
+import org.jeecg.modules.system.app.vo.ContractSignVO;
 
 @Mapper
 public interface AppContractSignMapper extends BaseMapper<AppContractSign> {
+    /**
+     * 查询用户待签署合同列表
+     * @param page
+     * @param contractName
+     * @return
+     */
+    IPage<ContractSignVO>  queryUserSignContractList(Page<ContractSignVO> page, @Param("contractName") String contractName);
 }

+ 30 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppContractSignMapper.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.app.mapper.AppContractSignMapper">
+
+    <select id="queryUserSignContractList" resultType="org.jeecg.modules.system.app.vo.ContractSignVO">
+        SELECT
+        a.id,
+        o.product_name,
+        c.full_name,
+        c.phone,
+        a.create_time,
+        a.sign_time,
+        a.is_sign
+        FROM nm_contract_sign a
+        LEFT JOIN nm_family_members c ON a.family_id = c.id
+        LEFT JOIN nm_contract_info b ON a.org_code = b.org_code
+        LEFT JOIN (
+        SELECT order_id, MAX(product_name) AS product_name
+        FROM nm_order_pro_info
+        GROUP BY order_id
+        ) o ON a.order_id = o.order_id
+        <where>
+            <if test="contractName != null and contractName != ''">
+                AND b.contract_name LIKE CONCAT('%', #{contractName}, '%')
+            </if>
+        </where>
+    </select>
+
+
+</mapper>

+ 33 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/ContractSignVO.java

@@ -0,0 +1,33 @@
+package org.jeecg.modules.system.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+@Schema(description = "用户签约合同列表查询返回数据")
+@Data
+@Accessors(chain = true)
+public class ContractSignVO {
+    @Schema(description = "合同签约主键ID")
+    private String id;
+
+    @Schema(description = "关联产品名称")
+    private String productName;
+
+    @Schema(description = "家庭成员姓名")
+    private String fullName;
+
+    @Schema(description = "是否签署 0、未签 1、已签")
+    private int isSign;
+
+    @Schema(description = "联系电话")
+    private String phone;
+
+    @Schema(description = "创建时间(合同签约记录创建时间)")
+    private Date createTime;
+
+    @Schema(description = "签约完成时间")
+    private Date signTime;
+}