ソースを参照

项目信息,消息通知

yuanchao 2 ヶ月 前
コミット
7ddf9b870d
18 ファイル変更175 行追加23 行削除
  1. 12 3
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojectinfo/IotProjectInfoController.java
  2. 1 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojectinfo/vo/IotProjectSaveVO.java
  3. 7 6
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/IotProjectTaskController.java
  4. 11 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskPageReqVO.java
  5. 11 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskRespVO.java
  6. 11 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskSaveReqVO.java
  7. 20 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotTaskSaveVO.java
  8. 9 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotprojecttask/IotProjectTaskDO.java
  9. 1 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotprojectinfo/IotProjectInfoMapper.java
  10. 9 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotprojecttask/IotProjectTaskMapper.java
  11. 9 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/IotZHBDJob.java
  12. 14 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/message/PmsMessage.java
  13. 2 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojectinfo/IotProjectInfoService.java
  14. 5 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojectinfo/IotProjectInfoServiceImpl.java
  15. 2 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskService.java
  16. 9 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskServiceImpl.java
  17. 4 0
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojectinfo/IotProjectInfoMapper.xml
  18. 38 5
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotProjectTaskMapper.xml

+ 12 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojectinfo/IotProjectInfoController.java

@@ -50,11 +50,11 @@ public class IotProjectInfoController {
     @PreAuthorize("@ss.hasPermission('rq:iot-project-info:create')")
     public CommonResult<Long> createIotProjectInfo(@RequestBody IotProjectSaveVO createReqVO) {
         Long id = iotProjectInfoService.createIotProjectInfo(createReqVO.getProjectData());
-        List<IotProjectTaskSaveReqVO> taskList = createReqVO.getTaskList();
+        /*List<IotProjectTaskSaveReqVO> taskList = createReqVO.getTaskList();
         for (IotProjectTaskSaveReqVO saveReqVO:taskList) {
             saveReqVO.setProjectId(id);
         }
-        Boolean a = iotProjectTaskService.createIotProjectTaskList(taskList);
+        Boolean a = iotProjectTaskService.createIotProjectTaskList(taskList);*/
         return success(id);
     }
 
@@ -63,7 +63,7 @@ public class IotProjectInfoController {
     @PreAuthorize("@ss.hasPermission('rq:iot-project-info:update')")
     public CommonResult<Boolean> updateIotProjectInfo(@RequestBody IotProjectSaveVO updateReqVO) {
         iotProjectInfoService.updateIotProjectInfo(updateReqVO.getProjectData());
-        iotProjectTaskService.updateIotProjectTaskList(updateReqVO.getTaskList());
+        //iotProjectTaskService.updateIotProjectTaskList(updateReqVO.getTaskList());
         return success(true);
     }
 
@@ -93,6 +93,15 @@ public class IotProjectInfoController {
         return success(BeanUtils.toBean(pageResult, IotProjectInfoRespVO.class));
     }
 
+    @GetMapping("/projectList")
+    @Operation(summary = "根据用户获得项目信息")
+    @Parameter(name = "deptId", description = "登录人组织ID", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('rq:iot-project-info:query')")
+    public CommonResult<List<IotProjectInfoRespVO>> getProjectList(@RequestParam("deptId") Long deptId) {
+        List<IotProjectInfoDO> pageResult = iotProjectInfoService.projectList();
+        return success(BeanUtils.toBean(pageResult, IotProjectInfoRespVO.class));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出项目信息 Excel")
     @PreAuthorize("@ss.hasPermission('rq:iot-project-info:export')")

+ 1 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojectinfo/vo/IotProjectSaveVO.java

@@ -19,6 +19,5 @@ import java.util.List;
 public class IotProjectSaveVO {
     @Schema(description = "项目信息主表")
     private IotProjectInfoSaveReqVO projectData;
-    @Schema(description = "任务拆分主表")
-    private List<IotProjectTaskSaveReqVO> taskList;
+    //private List<IotProjectTaskSaveReqVO> taskList;
 }

+ 7 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/IotProjectTaskController.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotTaskSaveVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
 import cn.iocoder.yudao.module.pms.service.iotprojecttask.IotProjectTaskService;
 import org.springframework.web.bind.annotation.*;
@@ -43,15 +44,15 @@ public class IotProjectTaskController {
     @PostMapping("/create")
     @Operation(summary = "创建项目信息任务拆分")
     @PreAuthorize("@ss.hasPermission('rq:iot-project-task:create')")
-    public CommonResult<Long> createIotProjectTask(@Valid @RequestBody IotProjectTaskSaveReqVO createReqVO) {
-        return success(iotProjectTaskService.createIotProjectTask(createReqVO));
+    public CommonResult<Boolean> createIotProjectTask(@RequestBody IotTaskSaveVO createReqVO) {
+        return success(iotProjectTaskService.createIotProjectTaskList(createReqVO.getTaskList()));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新项目信息任务拆分")
     @PreAuthorize("@ss.hasPermission('rq:iot-project-task:update')")
-    public CommonResult<Boolean> updateIotProjectTask(@Valid @RequestBody IotProjectTaskSaveReqVO updateReqVO) {
-        iotProjectTaskService.updateIotProjectTask(updateReqVO);
+    public CommonResult<Boolean> updateIotProjectTask(@RequestBody IotTaskSaveVO updateReqVO) {
+        iotProjectTaskService.updateIotProjectTaskList(updateReqVO.getTaskList());
         return success(true);
     }
 
@@ -84,8 +85,8 @@ public class IotProjectTaskController {
     @GetMapping("/list")
     @Operation(summary = "获得项目信息任务拆分全部数据")
     @PreAuthorize("@ss.hasPermission('rq:iot-project-task:query')")
-    public CommonResult<List<IotProjectTaskRespVO>> getTaskList(@Valid IotProjectTaskDO taskDO) {
-        List<IotProjectTaskDO> taskList = iotProjectTaskService.taskList(taskDO);
+    public CommonResult<PageResult<IotProjectTaskRespVO>> getTaskList( IotProjectTaskPageReqVO taskDO) {
+        PageResult<IotProjectTaskDO> taskList = iotProjectTaskService.taskList(taskDO);
         return success(BeanUtils.toBean(taskList, IotProjectTaskRespVO.class));
     }
 

+ 11 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskPageReqVO.java

@@ -48,4 +48,15 @@ public class IotProjectTaskPageReqVO extends PageParam {
 
     private Set<Long> deptIds;
 
+    private Long deptId;
+
+    @Schema(description = "客户名称")
+    private String manufactureName;
+
+    @Schema(description = "合同名称", example = "王五")
+    private String contractName;
+
+    @Schema(description = "合同编号")
+    private String contractCode;
+
 }

+ 11 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskRespVO.java

@@ -58,4 +58,15 @@ public class IotProjectTaskRespVO {
 
     private Set<Long> deptIds;
 
+    private Long deptId;
+
+    @Schema(description = "客户名称")
+    private String manufactureName;
+
+    @Schema(description = "合同名称", example = "王五")
+    private String contractName;
+
+    @Schema(description = "合同编号")
+    private String contractCode;
+
 }

+ 11 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskSaveReqVO.java

@@ -41,4 +41,15 @@ public class IotProjectTaskSaveReqVO {
 
     private Set<Long> deptIds;
 
+    private Long deptId;
+
+    @Schema(description = "客户名称")
+    private String manufactureName;
+
+    @Schema(description = "合同名称", example = "王五")
+    private String contractName;
+
+    @Schema(description = "合同编号")
+    private String contractCode;
+
 }

+ 20 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotTaskSaveVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author yc
+ * @version 1.0
+ * @className IotTaskSaveVO
+ * @date 2025/6/18 11:20
+ * @description
+ */
+@Schema(description = "任务拆分 - 任务拆分 保存/修改 Request VO")
+@Data
+public class IotTaskSaveVO {
+    @Schema(description = "任务拆分表")
+    private List<IotProjectTaskSaveReqVO> taskList;
+}

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotprojecttask/IotProjectTaskDO.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask;
 
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
 import java.time.LocalDateTime;
@@ -68,4 +69,12 @@ public class IotProjectTaskDO extends BaseDO {
     @TableField(typeHandler = JacksonTypeHandler.class)
     private Set<Long> deptIds;
 
+    private Long deptId;
+
+    private String manufactureName;
+
+    private String contractName;
+
+    private String contractCode;
+
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotprojectinfo/IotProjectInfoMapper.java

@@ -39,4 +39,5 @@ public interface IotProjectInfoMapper extends BaseMapperX<IotProjectInfoDO> {
                 .orderByDesc(IotProjectInfoDO::getId));
     }
 
+    List<IotProjectInfoDO> projectList();
 }

+ 9 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotprojecttask/IotProjectTaskMapper.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask;
 
+import java.time.LocalDateTime;
 import java.util.*;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -7,7 +8,9 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
@@ -33,6 +36,11 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
                 .orderByDesc(IotProjectTaskDO::getId));
     }
 
-    List<IotProjectTaskDO> taskList(IotProjectTaskDO taskDO);
+    IPage<IotProjectTaskDO> taskList(IPage<IotProjectTaskPageReqVO> page,
+                                     @Param("manufactureName") String manufactureName,
+                                     @Param("contractName") String contractName,
+                                     @Param("contractCode") String contractCode,
+                                     @Param("createTime") LocalDateTime[] createTime
+    );
 
 }

+ 9 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/IotZHBDJob.java

@@ -181,9 +181,16 @@ public class IotZHBDJob implements JobHandler {
 
         // 6. 处理响应
         if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {
-            return response.getBody().getData().getToken();
+            LoginResponseEntity body = response.getBody();
+            if (body.getData() != null && body.getData().getToken() != null) {
+                return body.getData().getToken();
+            } else {
+                log.error("登录响应中token为空,响应内容: {}", body);
+                return null;
+            }
         } else {
-            throw new RuntimeException("登录失败: " + response.getStatusCode());
+            log.error("登录失败,状态码: {}", response.getStatusCode());
+            return null;
         }
     }
 

+ 14 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/message/PmsMessage.java

@@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.pms.message;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.module.pms.constant.PmsConstants;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO;
+import cn.iocoder.yudao.module.pms.service.iotopeationfill.IotOpeationFillService;
 import cn.iocoder.yudao.module.system.api.dingtalk.DingtalkSendApi;
 import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
 import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
@@ -20,6 +22,8 @@ public class PmsMessage {
     private NotifyMessageSendApi notifyMessageSendApi;
     @Resource
     private DingtalkSendApi dingtalkSendApi;
+    @Resource
+    private IotOpeationFillService iotOpeationFillService;
 
     public void sendMessage(Long businessId, String name, String businessType, Long userId, String mobile){
         Map<String, Object> templateParams = new HashMap<>();
@@ -40,7 +44,16 @@ public class PmsMessage {
             if (PmsConstants.GENERATE_OPERATION.equals(businessType)) {
                 msg = "您有新的运行记录工单 " + name + ",请处理。"+"["+ DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss")+"]";
             }
-            String url="https://iot.deepoil.cc/dingding?id="+businessId+"&type="+businessType+"&userId="+userId;
+            String url = "";
+
+            if(PmsConstants.GENERATE_OPERATION.equals(businessType)){
+                IotOpeationFillDO fillDO = iotOpeationFillService.getIotOpeationFill(businessId);
+                url="https://iot.deepoil.cc/dingding?deptId="+fillDO.getDeptId()+"&userId="+userId
+                        +"&createTime="+fillDO.getCreateTime()+"&id="+businessId+"&orderStatus="+fillDO.getOrderStatus()+"&type="+businessType;
+            }else{
+                url="https://iot.deepoil.cc/dingding?id="+businessId+"&type="+businessType+"&userId="+userId;
+            }
+
             dingtalkSendApi.send(mobile, msg,"link", url);
         }
     }

+ 2 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojectinfo/IotProjectInfoService.java

@@ -54,4 +54,6 @@ public interface IotProjectInfoService {
      */
     PageResult<IotProjectInfoDO> getIotProjectInfoPage(IotProjectInfoPageReqVO pageReqVO);
 
+    List<IotProjectInfoDO> projectList();
+
 }

+ 5 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojectinfo/IotProjectInfoServiceImpl.java

@@ -71,4 +71,9 @@ public class IotProjectInfoServiceImpl implements IotProjectInfoService {
         return iotProjectInfoMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<IotProjectInfoDO> projectList() {
+        return iotProjectInfoMapper.projectList();
+    }
+
 }

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskService.java

@@ -23,6 +23,7 @@ public interface IotProjectTaskService {
      */
     Long createIotProjectTask(@Valid IotProjectTaskSaveReqVO createReqVO);
 
+
     Boolean createIotProjectTaskList(List<IotProjectTaskSaveReqVO> list);
 
     /**
@@ -58,6 +59,6 @@ public interface IotProjectTaskService {
     PageResult<IotProjectTaskDO> getIotProjectTaskPage(IotProjectTaskPageReqVO pageReqVO);
 
 
-    List<IotProjectTaskDO> taskList(IotProjectTaskDO taskDO);
+    PageResult<IotProjectTaskDO> taskList(IotProjectTaskPageReqVO taskDO);
 
 }

+ 9 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskServiceImpl.java

@@ -5,6 +5,8 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProject
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask.IotProjectTaskMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -94,8 +96,13 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
     }
 
     @Override
-    public List<IotProjectTaskDO> taskList(IotProjectTaskDO taskDO) {
-        return iotProjectTaskMapper.taskList(taskDO);
+    public PageResult<IotProjectTaskDO> taskList(IotProjectTaskPageReqVO vo) {
+        IPage<IotProjectTaskDO> taskDOIPage = iotProjectTaskMapper.taskList(Page.of(vo.getPageNo(), vo.getPageSize()),
+                vo.getManufactureName(),
+                vo.getContractName(),
+                vo.getContractCode(),
+                vo.getCreateTime());
+        return new PageResult<>(taskDOIPage.getRecords(),taskDOIPage.getTotal());
     }
 
 }

+ 4 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojectinfo/IotProjectInfoMapper.xml

@@ -9,4 +9,8 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+    <select id="projectList" parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoSaveReqVO"
+    resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO">
+        select * from rqiot.rq_iot_project_info where deleted = 0
+    </select>
 </mapper>

+ 38 - 5
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotProjectTaskMapper.xml

@@ -8,13 +8,46 @@
         代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
-    <select id="taskList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO"
+    <select id="taskList" parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO"
     resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO">
-        select * from rqiot.rq_iot_project_task
+        select
+        a.id,
+        a.project_id,
+        a.well_name,
+        a.well_type,
+        a.location,
+        a.technique,
+        a.workload_design,
+        a.create_time,
+        a.dept_ids,
+        b.manufacture_name,
+        b.contract_name,
+        b.contract_code
+        from
+        rqiot.rq_iot_project_task a,
+        rqiot.rq_iot_project_info b
         where 1=1
-        and project_id =#{projectId}
-        <if test="id != null  and id != ''">
-        id=#{id}
+        and a.project_id = b.id
+        and a.deleted = 0
+        and b.deleted = 0
+        <if test="manufactureName != null  and manufactureName != ''">
+        and b.manufacture_name like concat('%', #{manufactureName}, '%')
+        </if>
+        <if test="contractName != null  and contractName != ''">
+            and b.contract_name like concat('%', #{contractName}, '%')
+        </if>
+        <if test="contractCode != null  and contractCode != ''">
+            and b.contract_code like concat('%', #{contractCode}, '%')
+        </if>
+        <if test="createTime != null and createTime.length > 0">
+            <choose>
+                <when test="createTime.length == 1">
+                    AND a.create_time = #{createTime[0]}
+                </when>
+                <otherwise>
+                    AND a.create_time BETWEEN #{createTime[0]} AND #{createTime[1]}
+                </otherwise>
+            </choose>
         </if>
     </select>