Browse Source

新增外委维修模块

lingpeng.li 2 weeks ago
parent
commit
85adf0e523
12 changed files with 935 additions and 0 deletions
  1. 308 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/controller/OutsourcingMaintenanceController.java
  2. 146 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/entity/OutsourcingMaintenance.java
  3. 94 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/entity/RelatedWorkOrder.java
  4. 14 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/OutsourcingMaintenanceMapper.java
  5. 31 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/RelatedWorkOrderMapper.java
  6. 5 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/xml/OutsourcingMaintenanceMapper.xml
  7. 16 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/xml/RelatedWorkOrderMapper.xml
  8. 48 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/IOutsourcingMaintenanceService.java
  9. 22 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/IRelatedWorkOrderService.java
  10. 77 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/impl/OutsourcingMaintenanceServiceImpl.java
  11. 27 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/impl/RelatedWorkOrderServiceImpl.java
  12. 147 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/vo/OutsourcingMaintenancePage.java

+ 308 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/controller/OutsourcingMaintenanceController.java

@@ -0,0 +1,308 @@
+package org.jeecg.modules.equipmentMaintenance.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.CommonAPI;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.equipmentMaintenance.entity.OutsourcingMaintenance;
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import org.jeecg.modules.equipmentMaintenance.service.IOutsourcingMaintenanceService;
+import org.jeecg.modules.equipmentMaintenance.service.IRelatedWorkOrderService;
+import org.jeecg.modules.equipmentMaintenance.vo.OutsourcingMaintenancePage;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+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.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @Description: 外委维修
+ * @Author: jeecg-boot
+ * @Date: 2025-06-09
+ * @Version: V1.0
+ */
+@Api(tags = "外委维修")
+@RestController
+@RequestMapping("/equipmentMaintenance/outsourcingMaintenance")
+@Slf4j
+public class OutsourcingMaintenanceController {
+
+    @Lazy
+    @Resource
+    private CommonAPI commonApi;
+
+    @Lazy
+    @Resource
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private IOutsourcingMaintenanceService outsourcingMaintenanceService;
+    @Autowired
+    private IRelatedWorkOrderService relatedWorkOrderService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param outsourcingMaintenance
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "外委维修-分页列表查询")
+    @ApiOperation(value = "外委维修-分页列表查询", notes = "外委维修-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<OutsourcingMaintenance>> queryPageList(OutsourcingMaintenance outsourcingMaintenance,
+                                                               @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                               HttpServletRequest req) {
+        QueryWrapper<OutsourcingMaintenance> queryWrapper = QueryGenerator.initQueryWrapper(outsourcingMaintenance, req.getParameterMap());
+        Page<OutsourcingMaintenance> page = new Page<OutsourcingMaintenance>(pageNo, pageSize);
+        IPage<OutsourcingMaintenance> pageList = outsourcingMaintenanceService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param outsourcingMaintenancePage
+     * @return
+     */
+    @AutoLog(value = "外委维修-添加")
+    @ApiOperation(value = "外委维修-添加", notes = "外委维修-添加")
+    @RequiresPermissions("equipmentMaintenance:sbsmzq_outsourcing_maintenance:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody OutsourcingMaintenancePage outsourcingMaintenancePage) {
+        OutsourcingMaintenance outsourcingMaintenance = new OutsourcingMaintenance();
+        BeanUtils.copyProperties(outsourcingMaintenancePage, outsourcingMaintenance);
+        outsourcingMaintenanceService.saveMain(outsourcingMaintenance, outsourcingMaintenancePage.getRelatedWorkOrderList());
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param outsourcingMaintenancePage
+     * @return
+     */
+    @AutoLog(value = "外委维修-编辑")
+    @ApiOperation(value = "外委维修-编辑", notes = "外委维修-编辑")
+    @RequiresPermissions("equipmentMaintenance:sbsmzq_outsourcing_maintenance:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody OutsourcingMaintenancePage outsourcingMaintenancePage) {
+        OutsourcingMaintenance outsourcingMaintenance = new OutsourcingMaintenance();
+        BeanUtils.copyProperties(outsourcingMaintenancePage, outsourcingMaintenance);
+        OutsourcingMaintenance outsourcingMaintenanceEntity = outsourcingMaintenanceService.getById(outsourcingMaintenance.getId());
+        if (outsourcingMaintenanceEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        outsourcingMaintenanceService.updateMain(outsourcingMaintenance, outsourcingMaintenancePage.getRelatedWorkOrderList());
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "外委维修-通过id删除")
+    @ApiOperation(value = "外委维修-通过id删除", notes = "外委维修-通过id删除")
+    @RequiresPermissions("equipmentMaintenance:sbsmzq_outsourcing_maintenance:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        outsourcingMaintenanceService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "外委维修-批量删除")
+    @ApiOperation(value = "外委维修-批量删除", notes = "外委维修-批量删除")
+    @RequiresPermissions("equipmentMaintenance:sbsmzq_outsourcing_maintenance:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.outsourcingMaintenanceService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "外委维修-通过id查询")
+    @ApiOperation(value = "外委维修-通过id查询", notes = "外委维修-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<OutsourcingMaintenance> queryById(@RequestParam(name = "id", required = true) String id) {
+        OutsourcingMaintenance outsourcingMaintenance = outsourcingMaintenanceService.getById(id);
+        if (outsourcingMaintenance == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(outsourcingMaintenance);
+
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "关联工单通过主表ID查询")
+    @ApiOperation(value = "关联工单主表ID查询", notes = "关联工单-通主表ID查询")
+    @GetMapping(value = "/queryRelatedWorkOrderByMainId")
+    public Result<List<RelatedWorkOrder>> queryRelatedWorkOrderListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<RelatedWorkOrder> relatedWorkOrderList = relatedWorkOrderService.selectByMainId(id);
+        return Result.OK(relatedWorkOrderList);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param outsourcingMaintenance
+     */
+    @RequiresPermissions("equipmentMaintenance:sbsmzq_outsourcing_maintenance:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, OutsourcingMaintenance outsourcingMaintenance) {
+        // Step.1 组装查询条件查询数据
+        QueryWrapper<OutsourcingMaintenance> queryWrapper = QueryGenerator.initQueryWrapper(outsourcingMaintenance, request.getParameterMap());
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //配置选中数据查询条件
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            queryWrapper.in("id", selectionList);
+        }
+        //Step.2 获取导出数据
+        List<OutsourcingMaintenance> outsourcingMaintenanceList = outsourcingMaintenanceService.list(queryWrapper);
+
+        // Step.3 组装pageList
+        List<OutsourcingMaintenancePage> pageList = new ArrayList<OutsourcingMaintenancePage>();
+        for (OutsourcingMaintenance main : outsourcingMaintenanceList) {
+            OutsourcingMaintenancePage vo = new OutsourcingMaintenancePage();
+            BeanUtils.copyProperties(main, vo);
+            List<RelatedWorkOrder> relatedWorkOrderList = relatedWorkOrderService.selectByMainId(main.getId());
+            vo.setRelatedWorkOrderList(relatedWorkOrderList);
+            pageList.add(vo);
+        }
+
+        // Step.4 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "外委维修列表");
+        mv.addObject(NormalExcelConstants.CLASS, OutsourcingMaintenancePage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("外委维修数据", "导出人:" + sysUser.getRealname(), "外委维修"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("equipmentMaintenance:sbsmzq_outsourcing_maintenance:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<OutsourcingMaintenancePage> list = ExcelImportUtil.importExcel(file.getInputStream(), OutsourcingMaintenancePage.class, params);
+                for (OutsourcingMaintenancePage page : list) {
+                    OutsourcingMaintenance po = new OutsourcingMaintenance();
+                    BeanUtils.copyProperties(page, po);
+                    outsourcingMaintenanceService.saveMain(po, page.getRelatedWorkOrderList());
+                }
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.OK("文件导入失败!");
+    }
+
+
+    /**
+     * 分页列表查询(与我相关)
+     *
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "外委维修-分页列表查询(与我相关)", notes = "外委维修-分页列表查询(与我相关)")
+    @GetMapping(value = "/listByUser")
+    public Result<IPage<OutsourcingMaintenance>> queryPageListByUser(OutsourcingMaintenance outsourcingMaintenance,
+                                                                     @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                     @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                     HttpServletRequest req) {
+
+        LoginUser loginUser = TokenUtils.getLoginUser(req, commonApi, redisUtil);
+
+        // 使用 QueryWrapper 构建条件
+        QueryWrapper<OutsourcingMaintenance> queryWrapper = QueryGenerator.initQueryWrapper(outsourcingMaintenance, req.getParameterMap());
+
+        // 手动添加 applicant 条件
+        queryWrapper.eq("applicant", loginUser.getId());
+
+        Page<OutsourcingMaintenance> page = new Page<>(pageNo, pageSize);
+        IPage<OutsourcingMaintenance> pageList = outsourcingMaintenanceService.page(page, queryWrapper);
+
+        return Result.OK(pageList);
+    }
+
+
+}

+ 146 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/entity/OutsourcingMaintenance.java

@@ -0,0 +1,146 @@
+package org.jeecg.modules.equipmentMaintenance.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 外委维修
+ * @Author: jeecg-boot
+ * @Date: 2025-06-09
+ * @Version: V1.0
+ */
+@ApiModel(value = "sbsmzq_outsourcing_maintenance对象", description = "外委维修")
+@Data
+@TableName("sbsmzq_outsourcing_maintenance")
+public class OutsourcingMaintenance implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**
+     * 所属部门
+     */
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+    /**
+     * 申请单号
+     */
+    @Excel(name = "申请单号", width = 15)
+    @ApiModelProperty(value = "申请单号")
+    private String applicationNo;
+    /**
+     * 设备编号
+     */
+    @Excel(name = "设备编号", width = 15)
+    @ApiModelProperty(value = "设备编号")
+    private String deviceNumber;
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+    /**
+     * 外委单位
+     */
+    @Excel(name = "外委单位", width = 15)
+    @ApiModelProperty(value = "外委单位")
+    private String outsourcingUnit;
+    /**
+     * 预计金额
+     */
+    @Excel(name = "预计金额", width = 15)
+    @ApiModelProperty(value = "预计金额")
+    private BigDecimal estimatedAmount;
+    /**
+     * 工期要求
+     */
+    @Excel(name = "工期要求", width = 15)
+    @ApiModelProperty(value = "工期要求")
+    private String workRequirement;
+    /**
+     * 委外理由
+     */
+    @Excel(name = "委外理由", width = 15)
+    @ApiModelProperty(value = "委外理由")
+    private String reason;
+    /**
+     * 申请时间
+     */
+    @Excel(name = "申请时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "申请时间")
+    private Date applicationTime;
+    /**
+     * 申请人
+     */
+    @Excel(name = "申请人", width = 15)
+    @ApiModelProperty(value = "申请人")
+    private String applicant;
+    /**
+     * 关联工单
+     */
+    @Excel(name = "关联工单", width = 15)
+    @ApiModelProperty(value = "关联工单")
+    private String relatedWorkOrder;
+    /**
+     * 当前节点
+     */
+    @Excel(name = "当前节点", width = 15)
+    @ApiModelProperty(value = "当前节点")
+    private String currentNode;
+    /**
+     * 审批状态
+     */
+    @Excel(name = "审批状态", width = 15)
+    @ApiModelProperty(value = "审批状态")
+    private String approvalStatus;
+    /**
+     * 审批结束时间
+     */
+    @Excel(name = "审批结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "审批结束时间")
+    private Date approvalEndTime;
+}

+ 94 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/entity/RelatedWorkOrder.java

@@ -0,0 +1,94 @@
+package org.jeecg.modules.equipmentMaintenance.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 关联工单
+ * @Author: jeecg-boot
+ * @Date: 2025-06-09
+ * @Version: V1.0
+ */
+@ApiModel(value = "sbsmzq_related_work_order对象", description = "关联工单")
+@Data
+@TableName("sbsmzq_related_work_order")
+public class RelatedWorkOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**
+     * 所属部门
+     */
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+    /**
+     * 工单编号
+     */
+    @Excel(name = "工单编号", width = 15)
+    @ApiModelProperty(value = "工单编号")
+    private String workOrderNo;
+    /**
+     * 报修人
+     */
+    @Excel(name = "报修人", width = 15)
+    @ApiModelProperty(value = "报修人")
+    private String reporter;
+    /**
+     * 报修时间
+     */
+    @Excel(name = "报修时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "报修时间")
+    private Date reportTime;
+    /**
+     * 故障描述
+     */
+    @Excel(name = "故障描述", width = 15)
+    @ApiModelProperty(value = "故障描述")
+    private String faultDescription;
+    /**
+     * 维修id
+     */
+    @ApiModelProperty(value = "维修id")
+    private String maintenanceId;
+}

+ 14 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/OutsourcingMaintenanceMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.equipmentMaintenance.mapper;
+
+import org.jeecg.modules.equipmentMaintenance.entity.OutsourcingMaintenance;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 外委维修
+ * @Author: jeecg-boot
+ * @Date:   2025-06-09
+ * @Version: V1.0
+ */
+public interface OutsourcingMaintenanceMapper extends BaseMapper<OutsourcingMaintenance> {
+
+}

+ 31 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/RelatedWorkOrderMapper.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.equipmentMaintenance.mapper;
+
+import java.util.List;
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 关联工单
+ * @Author: jeecg-boot
+ * @Date:   2025-06-09
+ * @Version: V1.0
+ */
+public interface RelatedWorkOrderMapper extends BaseMapper<RelatedWorkOrder> {
+
+	/**
+	 * 通过主表id删除子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return boolean
+	 */
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+  /**
+   * 通过主表id查询子表数据
+   *
+   * @param mainId 主表id
+   * @return List<RelatedWorkOrder>
+   */
+	public List<RelatedWorkOrder> selectByMainId(@Param("mainId") String mainId);
+}

+ 5 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/xml/OutsourcingMaintenanceMapper.xml

@@ -0,0 +1,5 @@
+<?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.equipmentMaintenance.mapper.OutsourcingMaintenanceMapper">
+
+</mapper>

+ 16 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/mapper/xml/RelatedWorkOrderMapper.xml

@@ -0,0 +1,16 @@
+<?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.equipmentMaintenance.mapper.RelatedWorkOrderMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  sbsmzq_related_work_order 
+		WHERE
+			 maintenance_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder">
+		SELECT * 
+		FROM  sbsmzq_related_work_order
+		WHERE
+			 maintenance_id = #{mainId} 	</select>
+</mapper>

+ 48 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/IOutsourcingMaintenanceService.java

@@ -0,0 +1,48 @@
+package org.jeecg.modules.equipmentMaintenance.service;
+
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import org.jeecg.modules.equipmentMaintenance.entity.OutsourcingMaintenance;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 外委维修
+ * @Author: jeecg-boot
+ * @Date:   2025-06-09
+ * @Version: V1.0
+ */
+public interface IOutsourcingMaintenanceService extends IService<OutsourcingMaintenance> {
+
+	/**
+	 * 添加一对多
+	 *
+	 * @param outsourcingMaintenance
+	 * @param relatedWorkOrderList
+	 */
+	public void saveMain(OutsourcingMaintenance outsourcingMaintenance,List<RelatedWorkOrder> relatedWorkOrderList) ;
+	
+	/**
+	 * 修改一对多
+	 *
+   * @param outsourcingMaintenance
+   * @param relatedWorkOrderList
+	 */
+	public void updateMain(OutsourcingMaintenance outsourcingMaintenance,List<RelatedWorkOrder> relatedWorkOrderList);
+	
+	/**
+	 * 删除一对多
+	 *
+	 * @param id
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 *
+	 * @param idList
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 22 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/IRelatedWorkOrderService.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.equipmentMaintenance.service;
+
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 关联工单
+ * @Author: jeecg-boot
+ * @Date:   2025-06-09
+ * @Version: V1.0
+ */
+public interface IRelatedWorkOrderService extends IService<RelatedWorkOrder> {
+
+	/**
+	 * 通过主表id查询子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return List<RelatedWorkOrder>
+	 */
+	public List<RelatedWorkOrder> selectByMainId(String mainId);
+}

+ 77 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/impl/OutsourcingMaintenanceServiceImpl.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.equipmentMaintenance.service.impl;
+
+import org.jeecg.modules.equipmentMaintenance.entity.OutsourcingMaintenance;
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import org.jeecg.modules.equipmentMaintenance.mapper.RelatedWorkOrderMapper;
+import org.jeecg.modules.equipmentMaintenance.mapper.OutsourcingMaintenanceMapper;
+import org.jeecg.modules.equipmentMaintenance.service.IOutsourcingMaintenanceService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 外委维修
+ * @Author: jeecg-boot
+ * @Date:   2025-06-09
+ * @Version: V1.0
+ */
+@Service
+public class OutsourcingMaintenanceServiceImpl extends ServiceImpl<OutsourcingMaintenanceMapper, OutsourcingMaintenance> implements IOutsourcingMaintenanceService {
+
+	@Autowired
+	private OutsourcingMaintenanceMapper outsourcingMaintenanceMapper;
+	@Autowired
+	private RelatedWorkOrderMapper relatedWorkOrderMapper;
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveMain(OutsourcingMaintenance outsourcingMaintenance, List<RelatedWorkOrder> relatedWorkOrderList) {
+		outsourcingMaintenanceMapper.insert(outsourcingMaintenance);
+		if(relatedWorkOrderList!=null && relatedWorkOrderList.size()>0) {
+			for(RelatedWorkOrder entity:relatedWorkOrderList) {
+				//外键设置
+				entity.setMaintenanceId(outsourcingMaintenance.getId());
+				relatedWorkOrderMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateMain(OutsourcingMaintenance outsourcingMaintenance,List<RelatedWorkOrder> relatedWorkOrderList) {
+		outsourcingMaintenanceMapper.updateById(outsourcingMaintenance);
+		
+		//1.先删除子表数据
+		relatedWorkOrderMapper.deleteByMainId(outsourcingMaintenance.getId());
+		
+		//2.子表数据重新插入
+		if(relatedWorkOrderList!=null && relatedWorkOrderList.size()>0) {
+			for(RelatedWorkOrder entity:relatedWorkOrderList) {
+				//外键设置
+				entity.setMaintenanceId(outsourcingMaintenance.getId());
+				relatedWorkOrderMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delMain(String id) {
+		relatedWorkOrderMapper.deleteByMainId(id);
+		outsourcingMaintenanceMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			relatedWorkOrderMapper.deleteByMainId(id.toString());
+			outsourcingMaintenanceMapper.deleteById(id);
+		}
+	}
+	
+}

+ 27 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/service/impl/RelatedWorkOrderServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.equipmentMaintenance.service.impl;
+
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import org.jeecg.modules.equipmentMaintenance.mapper.RelatedWorkOrderMapper;
+import org.jeecg.modules.equipmentMaintenance.service.IRelatedWorkOrderService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 关联工单
+ * @Author: jeecg-boot
+ * @Date:   2025-06-09
+ * @Version: V1.0
+ */
+@Service
+public class RelatedWorkOrderServiceImpl extends ServiceImpl<RelatedWorkOrderMapper, RelatedWorkOrder> implements IRelatedWorkOrderService {
+	
+	@Autowired
+	private RelatedWorkOrderMapper relatedWorkOrderMapper;
+	
+	@Override
+	public List<RelatedWorkOrder> selectByMainId(String mainId) {
+		return relatedWorkOrderMapper.selectByMainId(mainId);
+	}
+}

+ 147 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/equipmentMaintenance/vo/OutsourcingMaintenancePage.java

@@ -0,0 +1,147 @@
+package org.jeecg.modules.equipmentMaintenance.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.equipmentMaintenance.entity.RelatedWorkOrder;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 外委维修
+ * @Author: jeecg-boot
+ * @Date: 2025-06-09
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value = "sbsmzq_outsourcing_maintenancePage对象", description = "外委维修")
+public class OutsourcingMaintenancePage {
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**
+     * 所属部门
+     */
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+    /**
+     * 申请单号
+     */
+    @Excel(name = "申请单号", width = 15)
+    @ApiModelProperty(value = "申请单号")
+    private String applicationNo;
+    /**
+     * 设备编号
+     */
+    @Excel(name = "设备编号", width = 15)
+    @ApiModelProperty(value = "设备编号")
+    private String deviceNumber;
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+    /**
+     * 外委单位
+     */
+    @Excel(name = "外委单位", width = 15)
+    @ApiModelProperty(value = "外委单位")
+    private String outsourcingUnit;
+    /**
+     * 预计金额
+     */
+    @Excel(name = "预计金额", width = 15)
+    @ApiModelProperty(value = "预计金额")
+    private BigDecimal estimatedAmount;
+    /**
+     * 工期要求
+     */
+    @Excel(name = "工期要求", width = 15)
+    @ApiModelProperty(value = "工期要求")
+    private String workRequirement;
+    /**
+     * 委外理由
+     */
+    @Excel(name = "委外理由", width = 15)
+    @ApiModelProperty(value = "委外理由")
+    private String reason;
+    /**
+     * 申请时间
+     */
+    @Excel(name = "申请时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "申请时间")
+    private Date applicationTime;
+    /**
+     * 申请人
+     */
+    @Excel(name = "申请人", width = 15)
+    @ApiModelProperty(value = "申请人")
+    private String applicant;
+    /**
+     * 关联工单
+     */
+    @Excel(name = "关联工单", width = 15)
+    @ApiModelProperty(value = "关联工单")
+    private String relatedWorkOrder;
+    /**
+     * 当前节点
+     */
+    @Excel(name = "当前节点", width = 15)
+    @ApiModelProperty(value = "当前节点")
+    private String currentNode;
+    /**
+     * 审批状态
+     */
+    @Excel(name = "审批状态", width = 15)
+    @ApiModelProperty(value = "审批状态")
+    private String approvalStatus;
+    /**
+     * 审批结束时间
+     */
+    @Excel(name = "审批结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "审批结束时间")
+    private Date approvalEndTime;
+
+    @ExcelCollection(name = "关联工单")
+    @ApiModelProperty(value = "关联工单")
+    private List<RelatedWorkOrder> relatedWorkOrderList;
+
+}