feat(芯导): 仓储物流出库 / 人力资源(离职/在职/合同/薪资) / 环保门禁(门禁+智能巡检) 后端
已添加18个文件
已修改12个文件
1168 ■■■■■ 文件已修改
src/main/java/com/ruoyi/envaccess/controller/EnvAccessVehicleController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/controller/EnvInspectionController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/mapper/EnvAccessVehicleMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/mapper/EnvInspectionMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/pojo/EnvAccessVehicle.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/pojo/EnvInspection.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/service/IEnvAccessVehicleService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/service/IEnvInspectionService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/service/impl/EnvAccessVehicleServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/service/impl/EnvInspectionServiceImpl.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/controller/StaffContractController.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/mapper/StaffContractMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/pojo/StaffContract.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/service/IStaffContractService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/service/impl/StaffContractServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/envaccess/EnvAccessVehicleMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/envaccess/EnvInspectionMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/staff/StaffContractMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/envaccess/controller/EnvAccessVehicleController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.ruoyi.envaccess.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.envaccess.pojo.EnvAccessVehicle;
import com.ruoyi.envaccess.service.IEnvAccessVehicleService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * çŽ¯ä¿é—¨ç¦--车辆/移动机械台账(进出厂车辆、厂内车辆、非道路移动机械)
 */
@RestController
@RequestMapping("/environmentAccess/vehicle")
public class EnvAccessVehicleController {
    @Resource
    private IEnvAccessVehicleService envAccessVehicleService;
    @GetMapping("/page")
    public AjaxResult page(Page page, EnvAccessVehicle req) {
        return AjaxResult.success(envAccessVehicleService.listPage(page, req));
    }
    @GetMapping("/{id}")
    public AjaxResult detail(@PathVariable Long id) {
        return AjaxResult.success(envAccessVehicleService.getById(id));
    }
    @PostMapping("/add")
    @Log(title = "门禁管理-新增", businessType = BusinessType.INSERT)
    public AjaxResult add(@RequestBody EnvAccessVehicle vehicle) {
        vehicle.setId(null);
        return envAccessVehicleService.save(vehicle) ? AjaxResult.success() : AjaxResult.error("新增失败");
    }
    @PostMapping("/update")
    @Log(title = "门禁管理-修改", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody EnvAccessVehicle vehicle) {
        return envAccessVehicleService.updateById(vehicle) ? AjaxResult.success() : AjaxResult.error("修改失败");
    }
    @DeleteMapping("/delete")
    @Log(title = "门禁管理-删除", businessType = BusinessType.DELETE)
    public AjaxResult delete(@RequestBody List<Long> ids) {
        return envAccessVehicleService.removeByIds(ids) ? AjaxResult.success() : AjaxResult.error("删除失败");
    }
    @PostMapping("/export")
    public void export(HttpServletResponse response, EnvAccessVehicle req) {
        envAccessVehicleService.export(response, req);
    }
}
src/main/java/com/ruoyi/envaccess/controller/EnvInspectionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.envaccess.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.envaccess.pojo.EnvInspection;
import com.ruoyi.envaccess.service.IEnvInspectionService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * çŽ¯ä¿é—¨ç¦--智能巡检台账(含路径规划/AI视频分析/报告/无人机机器人,AI与无人机字段预留)
 */
@RestController
@RequestMapping("/environmentAccess/inspection")
public class EnvInspectionController {
    @Resource
    private IEnvInspectionService envInspectionService;
    @GetMapping("/page")
    public AjaxResult page(Page page, EnvInspection req) {
        return AjaxResult.success(envInspectionService.listPage(page, req));
    }
    @GetMapping("/{id}")
    public AjaxResult detail(@PathVariable Long id) {
        return AjaxResult.success(envInspectionService.getById(id));
    }
    @PostMapping("/add")
    @Log(title = "智能巡检-新增", businessType = BusinessType.INSERT)
    public AjaxResult add(@RequestBody EnvInspection inspection) {
        inspection.setId(null);
        if (inspection.getStatus() == null) {
            inspection.setStatus(0);
        }
        return envInspectionService.save(inspection) ? AjaxResult.success() : AjaxResult.error("新增失败");
    }
    @PostMapping("/update")
    @Log(title = "智能巡检-修改", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody EnvInspection inspection) {
        return envInspectionService.updateById(inspection) ? AjaxResult.success() : AjaxResult.error("修改失败");
    }
    @DeleteMapping("/delete")
    @Log(title = "智能巡检-删除", businessType = BusinessType.DELETE)
    public AjaxResult delete(@RequestBody List<Long> ids) {
        return envInspectionService.removeByIds(ids) ? AjaxResult.success() : AjaxResult.error("删除失败");
    }
    /**
     * è‡ªåŠ¨ç”Ÿæˆå·¡æ£€æŠ¥å‘Š
     */
    @GetMapping("/report/{id}")
    @Log(title = "智能巡检-生成报告", businessType = BusinessType.OTHER)
    public AjaxResult generateReport(@PathVariable Long id) {
        return AjaxResult.success((Object) envInspectionService.generateReport(id));
    }
    @PostMapping("/export")
    public void export(HttpServletResponse response, EnvInspection req) {
        envInspectionService.export(response, req);
    }
}
src/main/java/com/ruoyi/envaccess/mapper/EnvAccessVehicleMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.envaccess.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.envaccess.pojo.EnvAccessVehicle;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface EnvAccessVehicleMapper extends BaseMapper<EnvAccessVehicle> {
    IPage<EnvAccessVehicle> listPage(Page page, @Param("req") EnvAccessVehicle req);
    List<EnvAccessVehicle> list(@Param("req") EnvAccessVehicle req);
}
src/main/java/com/ruoyi/envaccess/mapper/EnvInspectionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.envaccess.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.envaccess.pojo.EnvInspection;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface EnvInspectionMapper extends BaseMapper<EnvInspection> {
    IPage<EnvInspection> listPage(Page page, @Param("req") EnvInspection req);
    List<EnvInspection> list(@Param("req") EnvInspection req);
}
src/main/java/com/ruoyi/envaccess/pojo/EnvAccessVehicle.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.envaccess.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * çŽ¯ä¿é—¨ç¦--车辆/移动机械台账
 * env_access_vehicle
 */
@TableName(value = "env_access_vehicle")
@Data
public class EnvAccessVehicle extends DateQueryDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * ç±»åž‹ 1进出厂 2厂内 3非道路移动机械
     */
    @Excel(name = "类型", readConverterExp = "1=进出厂车辆,2=厂内车辆,3=非道路移动机械")
    private Integer vehicleType;
    @Excel(name = "车牌/机械编号")
    private String plateNo;
    @Excel(name = "车辆/机械型号")
    private String vehicleModel;
    @Excel(name = "使用人")
    private String driverName;
    @Excel(name = "联系电话")
    private String driverPhone;
    @Excel(name = "用途")
    private String usePurpose;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date occurTime;
    /**
     * 1进厂 0出厂(进出厂用)
     */
    @Excel(name = "方向", readConverterExp = "1=进厂,0=出厂")
    private Integer direction;
    @Excel(name = "状态")
    private String status;
    @Excel(name = "备注")
    private String remark;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/envaccess/pojo/EnvInspection.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
package com.ruoyi.envaccess.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * çŽ¯ä¿é—¨ç¦--智能巡检台账
 * env_inspection
 */
@TableName(value = "env_inspection")
@Data
public class EnvInspection extends DateQueryDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Long id;
    @Excel(name = "巡检名称")
    private String inspectionName;
    /**
     * 1定期 2临时 3故障
     */
    @Excel(name = "巡检类型", readConverterExp = "1=定期巡检,2=临时巡检,3=故障巡检")
    private Integer inspectionType;
    @Excel(name = "巡检路径规划")
    private String routePlan;
    @Excel(name = "巡检区域")
    private String area;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date planStartTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date planEndTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "实际开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date actualStartTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "实际结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date actualEndTime;
    @Excel(name = "巡检人员")
    private String inspector;
    @Excel(name = "巡检结果")
    private String inspectionResult;
    @ApiModelProperty(value = "AI视频分析结果(预留)")
    private String aiAnalysis;
    @ApiModelProperty(value = "无人机/机器人回传数据(预留)")
    private String uavData;
    @ApiModelProperty(value = "自动生成巡检报告")
    private String reportPath;
    /**
     * 0待执行 1执行中 2已完成 3已取消
     */
    @Excel(name = "状态", readConverterExp = "0=待执行,1=执行中,2=已完成,3=已取消")
    private Integer status;
    @Excel(name = "备注")
    private String remark;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/envaccess/service/IEnvAccessVehicleService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.envaccess.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.envaccess.pojo.EnvAccessVehicle;
import javax.servlet.http.HttpServletResponse;
public interface IEnvAccessVehicleService extends IService<EnvAccessVehicle> {
    IPage<EnvAccessVehicle> listPage(Page page, EnvAccessVehicle req);
    void export(HttpServletResponse response, EnvAccessVehicle req);
}
src/main/java/com/ruoyi/envaccess/service/IEnvInspectionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.envaccess.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.envaccess.pojo.EnvInspection;
import javax.servlet.http.HttpServletResponse;
public interface IEnvInspectionService extends IService<EnvInspection> {
    IPage<EnvInspection> listPage(Page page, EnvInspection req);
    String generateReport(Long id);
    void export(HttpServletResponse response, EnvInspection req);
}
src/main/java/com/ruoyi/envaccess/service/impl/EnvAccessVehicleServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.envaccess.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.envaccess.mapper.EnvAccessVehicleMapper;
import com.ruoyi.envaccess.pojo.EnvAccessVehicle;
import com.ruoyi.envaccess.service.IEnvAccessVehicleService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class EnvAccessVehicleServiceImpl extends ServiceImpl<EnvAccessVehicleMapper, EnvAccessVehicle> implements IEnvAccessVehicleService {
    private EnvAccessVehicleMapper envAccessVehicleMapper;
    @Override
    public IPage<EnvAccessVehicle> listPage(Page page, EnvAccessVehicle req) {
        return envAccessVehicleMapper.listPage(page, req);
    }
    @Override
    public void export(HttpServletResponse response, EnvAccessVehicle req) {
        List<EnvAccessVehicle> list = envAccessVehicleMapper.list(req);
        ExcelUtil<EnvAccessVehicle> util = new ExcelUtil<EnvAccessVehicle>(EnvAccessVehicle.class);
        util.exportExcel(response, list, "门禁管理台账");
    }
}
src/main/java/com/ruoyi/envaccess/service/impl/EnvInspectionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
package com.ruoyi.envaccess.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.envaccess.mapper.EnvInspectionMapper;
import com.ruoyi.envaccess.pojo.EnvInspection;
import com.ruoyi.envaccess.service.IEnvInspectionService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class EnvInspectionServiceImpl extends ServiceImpl<EnvInspectionMapper, EnvInspection> implements IEnvInspectionService {
    private EnvInspectionMapper envInspectionMapper;
    @Override
    public IPage<EnvInspection> listPage(Page page, EnvInspection req) {
        return envInspectionMapper.listPage(page, req);
    }
    @Override
    public void export(HttpServletResponse response, EnvInspection req) {
        List<EnvInspection> list = envInspectionMapper.list(req);
        ExcelUtil<EnvInspection> util = new ExcelUtil<EnvInspection>(EnvInspection.class);
        util.exportExcel(response, list, "智能巡检台账");
    }
    /**
     * æ ¹æ®å·¡æ£€è®°å½•自动生成巡检报告(HTML),并写回 report_path
     */
    @Override
    public String generateReport(Long id) {
        EnvInspection it = getById(id);
        if (it == null) {
            throw new BaseException("巡检记录不存在");
        }
        String typeText = it.getInspectionType() == null ? "" :
                (it.getInspectionType() == 1 ? "定期巡检" : it.getInspectionType() == 2 ? "临时巡检" :
                        it.getInspectionType() == 3 ? "故障巡检" : "");
        String statusText = it.getStatus() == null ? "" :
                (it.getStatus() == 0 ? "待执行" : it.getStatus() == 1 ? "执行中" :
                        it.getStatus() == 2 ? "已完成" : it.getStatus() == 3 ? "已取消" : "");
        String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        StringBuilder sb = new StringBuilder();
        sb.append("<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word'>")
          .append("<head><meta charset='utf-8'><title>智能巡检报告</title></head><body>");
        sb.append("<h2 style='text-align:center;'>智能巡检报告</h2>");
        sb.append("<p style='text-align:right;'>报告生成时间:").append(now).append("</p>");
        sb.append("<table border='1' cellspacing='0' cellpadding='6' style='border-collapse:collapse;width:100%;font-size:14px;'>");
        row(sb, "巡检名称", it.getInspectionName());
        row(sb, "巡检类型", typeText);
        row(sb, "巡检区域", it.getArea());
        row(sb, "巡检路径规划", it.getRoutePlan());
        row(sb, "计划时间", fmt(it.getPlanStartTime()) + " ~ " + fmt(it.getPlanEndTime()));
        row(sb, "实际时间", fmt(it.getActualStartTime()) + " ~ " + fmt(it.getActualEndTime()));
        row(sb, "巡检人员", it.getInspector());
        row(sb, "巡检状态", statusText);
        row(sb, "巡检结果/记录", it.getInspectionResult());
        row(sb, "AI视频分析结果", it.getAiAnalysis());
        row(sb, "无人机/机器人数据", it.getUavData());
        row(sb, "备注", it.getRemark());
        sb.append("</table>");
        sb.append("<p style='margin-top:30px;'>巡检人签字:________________&nbsp;&nbsp;&nbsp;&nbsp;审批人签字:________________</p>");
        sb.append("</body></html>");
        String content = sb.toString();
        EnvInspection upd = new EnvInspection();
        upd.setId(id);
        upd.setReportPath(content);
        updateById(upd);
        return content;
    }
    private static String fmt(java.util.Date d) {
        if (d == null) {
            return "";
        }
        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d);
    }
    private static void row(StringBuilder sb, String label, Object value) {
        sb.append("<tr><td style='background:#f0f1f5;width:180px;'>").append(label)
          .append("</td><td>").append(value == null ? "" : String.valueOf(value).replace("\n", "<br/>"))
          .append("</td></tr>");
    }
}
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
@@ -98,4 +98,22 @@
        util.exportExcel(response, list, "生产出库台账");
    }
    /**
     * é€€è´§å‡ºåº“(采购退货出库)台账查询
     */
    @GetMapping("/listPageByPurchaseReturn")
    @Log(title = "退货出库-出库台账-出库查询", businessType = BusinessType.OTHER)
    public AjaxResult listPageByPurchaseReturn(Page page, ProcurementRecordOutPageDto procurementDto) {
        IPage<ProcurementRecordOutPageDto> result = procurementRecordOutService.listPageByPurchaseReturn(page, procurementDto);
        return AjaxResult.success(result);
    }
    /**
     * é€€è´§å‡ºåº“(采购退货出库)台账导出
     */
    @PostMapping("/exportPurchaseReturn")
    public void exportPurchaseReturn(HttpServletResponse response) {
        procurementRecordOutService.exportPurchaseReturn(response);
    }
}
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
@@ -20,8 +20,13 @@
    private Integer salesLedgerProductId;
    /**
     * å‡ºåº“类型 1-采购出库 2-销售出库 3-自定义
     * å‡ºåº“类型 1-采购出库 2-销售出库 3-自定义出库(发料/领用) 5-退货出库(采购退货)
     */
    private Integer type;
    /**
     * ä¾›åº”商名称(退货出库-退回供应商时使用)
     */
    private String supplierName;
}
src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
@@ -26,4 +26,14 @@
    IPage<ProcurementRecordOutPageDto> listPageByProduct(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto);
    IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto);
    /**
     * é€€è´§å‡ºåº“(采购退货出库)台账分页
     */
    IPage<ProcurementRecordOutPageDto> listPageByPurchaseReturn(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto);
    /**
     * é€€è´§å‡ºåº“台账导出数据
     */
    List<ProcurementRecordOutPageDto> listPurchaseReturn();
}
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -49,11 +49,16 @@
    /**
     * å‡ºåº“类型 1-采购 2-销售 3-自定义
     * å‡ºåº“类型 1-采购出库 2-销售出库 3-自定义出库(发料/领用) 5-退货出库(采购退货)
     */
    private Integer type;
    /**
     * ä¾›åº”商名称(退货出库-退回供应商时记录)
     */
    private String supplierName;
    /**
     * å‡ºåº“用户
     */
    private String createBy;
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java
@@ -27,4 +27,8 @@
    IPage<ProcurementRecordOutPageDto> listPageByProduct(Page page, ProcurementRecordOutPageDto procurementDto);
    IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto);
    IPage<ProcurementRecordOutPageDto> listPageByPurchaseReturn(Page page, ProcurementRecordOutPageDto procurementDto);
    void exportPurchaseReturn(HttpServletResponse response);
}
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -74,6 +74,7 @@
                .inboundBatches(aLong.equals(0L) ? "第1批次" : "第"+ (aLong + 1) + "批次")
                .inboundNum(new BigDecimal(procurementRecordOutAdd.getQuantity()))
                .type(procurementRecordOutAdd.getType())
                .supplierName(procurementRecordOutAdd.getSupplierName())
                .createTime(localDateTime == null ? LocalDateTime.now() : localDateTime)
                .createUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
                .createBy(sysUser.getNickName())
@@ -118,4 +119,16 @@
    public IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) {
        return procurementRecordOutMapper.listPageByCustom(page, procurementDto);
    }
    @Override
    public IPage<ProcurementRecordOutPageDto> listPageByPurchaseReturn(Page page, ProcurementRecordOutPageDto procurementDto) {
        return procurementRecordOutMapper.listPageByPurchaseReturn(page, procurementDto);
    }
    @Override
    public void exportPurchaseReturn(HttpServletResponse response) {
        List<ProcurementRecordOutPageDto> list = procurementRecordOutMapper.listPurchaseReturn();
        ExcelUtil<ProcurementRecordOutPageDto> util = new ExcelUtil<>(ProcurementRecordOutPageDto.class);
        util.exportExcel(response, list, "退货出库台账");
    }
}
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -34,6 +34,7 @@
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -703,7 +704,7 @@
        }
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect)
                .eq(ProcurementRecordOut::getType, 1);
                .in(ProcurementRecordOut::getType, Arrays.asList(1, 5));
        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecords)){
            return procurementPageDtoIPage;
@@ -743,7 +744,7 @@
        }
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType,1);
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getType, Arrays.asList(1, 5));
        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecords)){
            return procurementPageDtoCopyIPage;
@@ -751,7 +752,7 @@
        for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
            // æ ¹æ®é‡‡è´­å°è´¦ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()) && ProcurementRecordOut.getType().equals(1))
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()) && (ProcurementRecordOut.getType().equals(1) || ProcurementRecordOut.getType().equals(5)))
                    .collect(Collectors.toList());
            // å¦‚果没有相关的出库记录,跳过该条数据
src/main/java/com/ruoyi/staff/controller/StaffContractController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.ruoyi.staff.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.staff.pojo.StaffContract;
import com.ruoyi.staff.service.IStaffContractService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * åˆåŒç®¡ç†ï¼ˆå‘˜å·¥åŠ³åŠ¨åˆåŒï¼‰
 */
@RestController
@RequestMapping("/staff/contract")
public class StaffContractController {
    @Resource
    private IStaffContractService staffContractService;
    /**
     * åˆåŒå°è´¦åˆ†é¡µæŸ¥è¯¢
     */
    @GetMapping("/listPage")
    public AjaxResult listPage(Page page, StaffContract req) {
        return AjaxResult.success(staffContractService.listPage(page, req));
    }
    /**
     * åˆåŒè¯¦æƒ…
     */
    @GetMapping("/{id}")
    public AjaxResult detail(@PathVariable Long id) {
        return AjaxResult.success(staffContractService.getById(id));
    }
    /**
     * æ–°å¢žåˆåŒ
     */
    @PostMapping("/add")
    @Log(title = "合同管理-新增", businessType = BusinessType.INSERT)
    public AjaxResult add(@RequestBody StaffContract staffContract) {
        staffContract.setId(null);
        if (staffContract.getStatus() == null) {
            staffContract.setStatus(0);
        }
        return staffContractService.save(staffContract) ? AjaxResult.success() : AjaxResult.error("新增失败");
    }
    /**
     * ä¿®æ”¹åˆåŒ
     */
    @PostMapping("/update")
    @Log(title = "合同管理-修改", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody StaffContract staffContract) {
        return staffContractService.updateById(staffContract) ? AjaxResult.success() : AjaxResult.error("修改失败");
    }
    /**
     * åˆ é™¤åˆåŒ
     */
    @DeleteMapping("/del")
    @Log(title = "合同管理-删除", businessType = BusinessType.DELETE)
    public AjaxResult del(@RequestBody List<Long> ids) {
        return staffContractService.removeByIds(ids) ? AjaxResult.success() : AjaxResult.error("删除失败");
    }
    /**
     * ç»­ç­¾åˆåŒ
     */
    @PostMapping("/renew/{id}")
    @Log(title = "合同管理-ç»­ç­¾", businessType = BusinessType.UPDATE)
    public AjaxResult renew(@PathVariable Long id, @RequestBody StaffContract staffContract) {
        return staffContractService.renew(id, staffContract) > 0 ? AjaxResult.success() : AjaxResult.error("续签失败");
    }
    /**
     * è§£é™¤åˆåŒ
     */
    @PostMapping("/terminate/{id}")
    @Log(title = "合同管理-解除", businessType = BusinessType.UPDATE)
    public AjaxResult terminate(@PathVariable Long id, @RequestBody StaffContract staffContract) {
        return staffContractService.terminate(id, staffContract) > 0 ? AjaxResult.success() : AjaxResult.error("解除失败");
    }
    /**
     * åˆåŒå¯¼å‡º
     */
    @PostMapping("/export")
    public void export(HttpServletResponse response, StaffContract req) {
        staffContractService.export(response, req);
    }
}
src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
@@ -79,5 +79,51 @@
        staffOnJobService.staffOnJobExport(response, staffOnJob);
    }
    /**
     * æ–°å¢žåœ¨èŒå‘˜å·¥
     */
    @PostMapping
    public AjaxResult add(@RequestBody StaffOnJob staffOnJob) {
        if (staffOnJob.getStaffState() == null) {
            staffOnJob.setStaffState(1);
        }
        return staffOnJobService.save(staffOnJob) ? AjaxResult.success() : AjaxResult.error("新增失败");
    }
    /**
     * ä¿®æ”¹åœ¨èŒå‘˜å·¥
     */
    @PutMapping("/{id}")
    public AjaxResult update(@PathVariable Long id, @RequestBody StaffOnJob staffOnJob) {
        staffOnJob.setId(id);
        return staffOnJobService.updateById(staffOnJob) ? AjaxResult.success() : AjaxResult.error("修改失败");
    }
    /**
     * åˆ é™¤åœ¨èŒå‘˜å·¥
     */
    @DeleteMapping("/del")
    public AjaxResult del(@RequestBody List<Long> ids) {
        return staffOnJobService.removeByIds(ids) ? AjaxResult.success() : AjaxResult.error("删除失败");
    }
    /**
     * åœ¨èŒå‘˜å·¥ç»Ÿè®¡ï¼ˆåœ¨èŒäººæ•° / è–ªèµ„合计)
     */
    @GetMapping("/statistics")
    public AjaxResult statistics() {
        List<StaffOnJob> list = staffOnJobService.list();
        long onJobCount = list.stream()
                .filter(s -> s.getStaffState() != null && s.getStaffState() == 1).count();
        java.math.BigDecimal salaryTotal = list.stream()
                .filter(s -> s.getStaffState() != null && s.getStaffState() == 1 && s.getSalary() != null)
                .map(StaffOnJob::getSalary)
                .reduce(java.math.BigDecimal.ZERO, java.math.BigDecimal::add);
        java.util.Map<String, Object> map = new java.util.HashMap<>();
        map.put("onJobCount", onJobCount);
        map.put("salaryTotal", salaryTotal);
        return AjaxResult.success(map);
    }
}
src/main/java/com/ruoyi/staff/mapper/StaffContractMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.staff.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.staff.pojo.StaffContract;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface StaffContractMapper extends BaseMapper<StaffContract> {
    IPage<StaffContract> listPage(Page page, @Param("req") StaffContract req);
    List<StaffContract> list(@Param("req") StaffContract req);
}
src/main/java/com/ruoyi/staff/pojo/StaffContract.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
package com.ruoyi.staff.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * äººå‘˜ç®¡ç†--劳动合同
 * staff_contract
 */
@TableName(value = "staff_contract")
@Data
public class StaffContract extends DateQueryDto implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * å‘˜å·¥ç¼–号
     */
    @Excel(name = "员工编号")
    private String staffNo;
    /**
     * å‘˜å·¥å§“名
     */
    @Excel(name = "员工姓名")
    private String staffName;
    /**
     * å²—位
     */
    @Excel(name = "岗位")
    private String postJob;
    /**
     * ç­¾è®¢æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "签订日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date signDate;
    /**
     * åˆåŒå¼€å§‹æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "合同开始日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date startDate;
    /**
     * åˆåŒç»“束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "合同结束日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endDate;
    /**
     * åˆåŒå¹´é™
     */
    @Excel(name = "合同年限")
    private Integer contractTerm;
    /**
     * åˆåŒå†…容
     */
    @Excel(name = "合同内容")
    private String contractContent;
    /**
     * çŠ¶æ€ 0有效 1已续签 2已解除
     */
    @ApiModelProperty(value = "状态 0有效 1已续签 2已解除")
    private Integer status;
    /**
     * ç»­ç­¾æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "续签日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date renewDate;
    /**
     * ç»­ç­¾åŽåˆ°æœŸæ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "续签后到期日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date renewEndDate;
    /**
     * è§£é™¤æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "解除日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date terminateDate;
    /**
     * è§£é™¤åŽŸå› 
     */
    @Excel(name = "解除原因")
    private String terminateReason;
    private String remark;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java
@@ -141,6 +141,25 @@
    @Excel(name = "合同结束日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date contractEndTime;
    /**
     * ç¦»èŒæ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "离职日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date leaveDate;
    /**
     * ç¦»èŒåŽŸå› 
     */
    @Excel(name = "离职原因")
    private String leaveReason;
    /**
     * å·¥ä½œäº¤æŽ¥æƒ…况
     */
    @Excel(name = "工作交接情况")
    private String handoverInfo;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
@@ -123,6 +123,19 @@
    @Excel(name = "合同到期日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date contractExpireTime;
    /**
     * å…¥èŒæ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "入职时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date entryDate;
    /**
     * è–ªèµ„
     */
    @Excel(name = "薪资")
    private java.math.BigDecimal salary;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
src/main/java/com/ruoyi/staff/service/IStaffContractService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.staff.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.staff.pojo.StaffContract;
import javax.servlet.http.HttpServletResponse;
public interface IStaffContractService extends IService<StaffContract> {
    IPage<StaffContract> listPage(Page page, StaffContract req);
    int renew(Long id, StaffContract req);
    int terminate(Long id, StaffContract req);
    void export(HttpServletResponse response, StaffContract req);
}
src/main/java/com/ruoyi/staff/service/impl/StaffContractServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.staff.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.staff.mapper.StaffContractMapper;
import com.ruoyi.staff.pojo.StaffContract;
import com.ruoyi.staff.service.IStaffContractService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class StaffContractServiceImpl extends ServiceImpl<StaffContractMapper, StaffContract> implements IStaffContractService {
    private StaffContractMapper staffContractMapper;
    @Override
    public IPage<StaffContract> listPage(Page page, StaffContract req) {
        return staffContractMapper.listPage(page, req);
    }
    /**
     * ç»­ç­¾ï¼šè®°å½•续签日期/续签后到期日期,状态置"已续签",并更新合同结束日期
     */
    @Override
    public int renew(Long id, StaffContract req) {
        StaffContract contract = staffContractMapper.selectById(id);
        if (contract == null) {
            throw new BaseException("合同不存在");
        }
        contract.setStatus(1);
        if (req.getRenewDate() != null) {
            contract.setRenewDate(req.getRenewDate());
        }
        if (req.getRenewEndDate() != null) {
            contract.setRenewEndDate(req.getRenewEndDate());
            contract.setEndDate(req.getRenewEndDate());
        }
        if (req.getContractTerm() != null) {
            contract.setContractTerm(req.getContractTerm());
        }
        return staffContractMapper.updateById(contract);
    }
    /**
     * è§£é™¤ï¼šè®°å½•解除日期/原因,状态置"已解除"
     */
    @Override
    public int terminate(Long id, StaffContract req) {
        StaffContract contract = staffContractMapper.selectById(id);
        if (contract == null) {
            throw new BaseException("合同不存在");
        }
        contract.setStatus(2);
        contract.setTerminateDate(req.getTerminateDate());
        contract.setTerminateReason(req.getTerminateReason());
        return staffContractMapper.updateById(contract);
    }
    @Override
    public void export(HttpServletResponse response, StaffContract req) {
        List<StaffContract> list = staffContractMapper.list(req);
        ExcelUtil<StaffContract> util = new ExcelUtil<StaffContract>(StaffContract.class);
        util.exportExcel(response, list, "合同管理");
    }
}
src/main/resources/mapper/envaccess/EnvAccessVehicleMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
<?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="com.ruoyi.envaccess.mapper.EnvAccessVehicleMapper">
    <select id="listPage" resultType="com.ruoyi.envaccess.pojo.EnvAccessVehicle">
        SELECT * FROM env_access_vehicle
        <where>
            <if test="req.vehicleType != null">
                AND vehicle_type = #{req.vehicleType}
            </if>
            <if test="req.plateNo != null and req.plateNo != ''">
                AND plate_no LIKE CONCAT('%',#{req.plateNo},'%')
            </if>
            <if test="req.driverName != null and req.driverName != ''">
                AND driver_name LIKE CONCAT('%',#{req.driverName},'%')
            </if>
            <if test="req.entryDateStart != null and req.entryDateStart != ''">
                AND occur_time &gt;= #{req.entryDateStart}
            </if>
            <if test="req.entryDateEnd != null and req.entryDateEnd != ''">
                AND occur_time &lt;= CONCAT(#{req.entryDateEnd},' 23:59:59')
            </if>
        </where>
        ORDER BY id DESC
    </select>
    <select id="list" resultType="com.ruoyi.envaccess.pojo.EnvAccessVehicle">
        SELECT * FROM env_access_vehicle
        <where>
            <if test="req.vehicleType != null">
                AND vehicle_type = #{req.vehicleType}
            </if>
            <if test="req.plateNo != null and req.plateNo != ''">
                AND plate_no LIKE CONCAT('%',#{req.plateNo},'%')
            </if>
        </where>
        ORDER BY id DESC
    </select>
</mapper>
src/main/resources/mapper/envaccess/EnvInspectionMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
<?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="com.ruoyi.envaccess.mapper.EnvInspectionMapper">
    <select id="listPage" resultType="com.ruoyi.envaccess.pojo.EnvInspection">
        SELECT * FROM env_inspection
        <where>
            <if test="req.inspectionName != null and req.inspectionName != ''">
                AND inspection_name LIKE CONCAT('%',#{req.inspectionName},'%')
            </if>
            <if test="req.inspectionType != null">
                AND inspection_type = #{req.inspectionType}
            </if>
            <if test="req.status != null">
                AND status = #{req.status}
            </if>
            <if test="req.entryDateStart != null and req.entryDateStart != ''">
                AND plan_start_time &gt;= #{req.entryDateStart}
            </if>
            <if test="req.entryDateEnd != null and req.entryDateEnd != ''">
                AND plan_start_time &lt;= CONCAT(#{req.entryDateEnd},' 23:59:59')
            </if>
        </where>
        ORDER BY id DESC
    </select>
    <select id="list" resultType="com.ruoyi.envaccess.pojo.EnvInspection">
        SELECT * FROM env_inspection
        <where>
            <if test="req.inspectionName != null and req.inspectionName != ''">
                AND inspection_name LIKE CONCAT('%',#{req.inspectionName},'%')
            </if>
        </where>
        ORDER BY id DESC
    </select>
</mapper>
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -55,7 +55,7 @@
        from  procurement_record_storage t1
                  left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
                  left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join procurement_record_out t4 on t1.id = t4.procurement_record_storage_id and t4.type = 1
        left join procurement_record_out t4 on t1.id = t4.procurement_record_storage_id and t4.type in (1, 5)
        <where>
            t1.type = 1
            <if test="req.supplierName != null and req.supplierName != ''">
@@ -151,9 +151,9 @@
        from  procurement_record_storage t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join procurement_record_out t4 on t1.id = t4.procurement_record_storage_id and t4.type = 1
        left join procurement_record_out t4 on t1.id = t4.procurement_record_storage_id and t4.type in (1, 5)
        <where>
            t1.type = 1 and t4.type = 1
            t1.type = 1 and t4.type in (1, 5)
            <if test="req.supplierName != null and req.supplierName != ''">
                and t3.supplier_name like  concat('%',#{req.supplierName},'%')
            </if>
src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -170,4 +170,61 @@
        </where>
        order by t1.create_time desc
    </select>
    <select id="listPageByPurchaseReturn" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
        select
        t3.supplier_name,
        t3.purchase_contract_number,
        t2.product_category,
        t1.id,
        t1.code,
        t2.specification_model,
        t2.unit,
        t2.tax_rate,
        t2.tax_inclusive_unit_price,
        t2.tax_inclusive_total_price,
        t2.tax_exclusive_total_price,
        t1.inbound_num,
        t1.create_time,
        t1.create_by,
        t4.unit_price,
        t4.unit_price * t1.inbound_num as totalPrice
        from procurement_record_out t1
        left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
        left join sales_ledger_product t2 on t2.id = t4.sales_ledger_product_id and t2.type = 2
        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        <where>
            t1.type = 5
            <if test="req.supplierName != null and req.supplierName != ''">
                and t3.supplier_name like concat('%',#{req.supplierName},'%')
            </if>
            <if test="req.productCategory != null and req.productCategory != ''">
                and t2.product_category like concat('%',#{req.productCategory},'%')
            </if>
            <if test="req.timeStr != null and req.timeStr != ''">
                and t1.create_time like concat('%',#{req.timeStr},'%')
            </if>
        </where>
        order by t1.create_time desc
    </select>
    <select id="listPurchaseReturn" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
        select
            t3.supplier_name,
            t2.product_category,
            t1.id,
            t2.specification_model,
            t2.unit,
            t2.tax_rate,
            t2.tax_inclusive_unit_price,
            t2.tax_inclusive_total_price,
            t2.tax_exclusive_total_price,
            t1.inbound_num,
            t1.create_time,
            t1.create_time as time,
            t1.create_by
        from procurement_record_out t1
            left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
            left join sales_ledger_product t2 on t2.id = t4.sales_ledger_product_id and t2.type = 2
            left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        where t1.type = 5
    </select>
</mapper>
src/main/resources/mapper/staff/StaffContractMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
<?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="com.ruoyi.staff.mapper.StaffContractMapper">
    <select id="listPage" resultType="com.ruoyi.staff.pojo.StaffContract">
        SELECT * FROM staff_contract
        <where>
            <if test="req.staffName != null and req.staffName != ''">
                AND staff_name LIKE CONCAT('%',#{req.staffName},'%')
            </if>
            <if test="req.staffNo != null and req.staffNo != ''">
                AND staff_no = #{req.staffNo}
            </if>
            <if test="req.status != null">
                AND status = #{req.status}
            </if>
            <if test="req.entryDateStart != null and req.entryDateStart != ''">
                AND end_date &gt;= #{req.entryDateStart}
            </if>
            <if test="req.entryDateEnd != null and req.entryDateEnd != ''">
                AND end_date &lt;= #{req.entryDateEnd}
            </if>
        </where>
        ORDER BY id DESC
    </select>
    <select id="list" resultType="com.ruoyi.staff.pojo.StaffContract">
        SELECT * FROM staff_contract
        <where>
            <if test="req.staffName != null and req.staffName != ''">
                AND staff_name LIKE CONCAT('%',#{req.staffName},'%')
            </if>
            <if test="req.status != null">
                AND status = #{req.status}
            </if>
        </where>
        ORDER BY id DESC
    </select>
</mapper>