This commit is contained in:
2025-08-20 19:46:15 +08:00
parent 560cfc6658
commit 9ca04150f4
34 changed files with 2170 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sse.core.SseEmitterManager; import org.dromara.common.sse.core.SseEmitterManager;
import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.dto.SseMessageDto;

View File

@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.bidding.domain.BusBiddingLimitList;
import org.dromara.bidding.service.IBusBiddingLimitListService;
import org.dromara.cailiaoshebei.domain.BusTotalsupplyplan; import org.dromara.cailiaoshebei.domain.BusTotalsupplyplan;
import org.dromara.cailiaoshebei.domain.BusTotalsupplyplanAudit; import org.dromara.cailiaoshebei.domain.BusTotalsupplyplanAudit;
import org.dromara.cailiaoshebei.service.IBusTotalsupplyplanAuditService; import org.dromara.cailiaoshebei.service.IBusTotalsupplyplanAuditService;
@ -37,6 +39,8 @@ import org.dromara.design.service.IBusBillofquantitiesService;
import org.dromara.design.service.IBusBillofquantitiesVersionsService; import org.dromara.design.service.IBusBillofquantitiesVersionsService;
import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.domain.vo.SysOssUploadVo;
import org.dromara.system.service.ISysOssService; import org.dromara.system.service.ISysOssService;
import org.dromara.tender.domain.BusBillofquantitiesLimitList;
import org.dromara.tender.service.IBusBillofquantitiesLimitListService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -64,6 +68,8 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl<BusBillo
private final IBusBillofquantitiesService busBillofquantitiesService; private final IBusBillofquantitiesService busBillofquantitiesService;
private final IBusTotalsupplyplanService busTotalsupplyplanService; private final IBusTotalsupplyplanService busTotalsupplyplanService;
private final IBusTotalsupplyplanAuditService busTotalsupplyplanAuditService; private final IBusTotalsupplyplanAuditService busTotalsupplyplanAuditService;
private final IBusBillofquantitiesLimitListService busBillofquantitiesLimitListService;
private final IBusBiddingLimitListService busBiddingLimitListService;
@Autowired @Autowired
private ISysOssService ossService; private ISysOssService ossService;
@ -474,6 +480,86 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl<BusBillo
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('bidEquipmentList')")
public void processPlansHandlerBid(ProcessEvent processEvent) {
log.info("投标清单审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
LambdaQueryWrapper<BusBillofquantitiesVersions> eq = new LambdaQueryWrapper<BusBillofquantitiesVersions>()
.eq(BusBillofquantitiesVersions::getVersions, id);
BusBillofquantitiesVersions busBillofquantitiesVersions = new BusBillofquantitiesVersions();
busBillofquantitiesVersions.setStatus(processEvent.getStatus());
boolean update = this.update(busBillofquantitiesVersions, eq);
//往成本部的投标清单表中新增数据
if (update && BusinessStatusEnum.FINISH.getStatus().equals(processEvent.getStatus())) {
//根据版本号查询数据
BusBillofquantitiesVersions versions = this.getOne(eq);
//1、根据查询数据
LambdaQueryWrapper<BusBillofquantities> lqw = new LambdaQueryWrapper<>();
lqw.eq(BusBillofquantities::getVersions, id);
List<BusBillofquantities> list = busBillofquantitiesService.list(lqw);
List<BusBiddingLimitList> busTotalsupplyplans = BeanUtil.copyToList(list, BusBiddingLimitList.class);
for (BusBiddingLimitList busTotalsupplyplan : busTotalsupplyplans) {
busTotalsupplyplan.setProjectId(versions.getProjectId());
busTotalsupplyplan.setId(null);
}
boolean b = busBiddingLimitListService.saveBatch(busTotalsupplyplans);
if (!b) {
log.info("新增失败");
}
}
}
@EventListener(condition = "#processTaskEvent.flowCode.endsWith('bidEquipmentList')")
public void processTaskPlansHandlerBid(ProcessTaskEvent processTaskEvent) {
log.info("投标清单审核任务创建了{}", processTaskEvent.toString());
}
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('bidEquipmentList')")
public void processDeletePlansHandlerBid(ProcessDeleteEvent processDeleteEvent) {
log.info("投标清单计划删除流程事件,技术标准文件审核任务执行了{}", processDeleteEvent.toString());
}
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('priceEquipmentList')")
public void processPlansHandlerPrice(ProcessEvent processEvent) {
log.info("限价清单审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
LambdaQueryWrapper<BusBillofquantitiesVersions> eq = new LambdaQueryWrapper<BusBillofquantitiesVersions>()
.eq(BusBillofquantitiesVersions::getVersions, id);
BusBillofquantitiesVersions busBillofquantitiesVersions = new BusBillofquantitiesVersions();
busBillofquantitiesVersions.setStatus(processEvent.getStatus());
boolean update = this.update(busBillofquantitiesVersions, eq);
//往成本部的限价清单表中新增数据
if (update && BusinessStatusEnum.FINISH.getStatus().equals(processEvent.getStatus())) {
//根据版本号查询数据
BusBillofquantitiesVersions versions = this.getOne(eq);
//1、根据查询数据
LambdaQueryWrapper<BusBillofquantities> lqw = new LambdaQueryWrapper<>();
lqw.eq(BusBillofquantities::getVersions, id);
List<BusBillofquantities> list = busBillofquantitiesService.list(lqw);
List<BusBillofquantitiesLimitList> busTotalsupplyplans = BeanUtil.copyToList(list, BusBillofquantitiesLimitList.class);
for (BusBillofquantitiesLimitList busTotalsupplyplan : busTotalsupplyplans) {
busTotalsupplyplan.setProjectId(versions.getProjectId());
busTotalsupplyplan.setId(null);
}
boolean b = busBillofquantitiesLimitListService.saveBatch(busTotalsupplyplans);
if (!b) {
log.info("新增失败");
}
}
}
@EventListener(condition = "#processTaskEvent.flowCode.endsWith('priceEquipmentList')")
public void processTaskPlansHandlerPrice(ProcessTaskEvent processTaskEvent) {
log.info("限价清单审核任务创建了{}", processTaskEvent.toString());
}
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('priceEquipmentList')")
public void processDeletePlansHandlerPrice(ProcessDeleteEvent processDeleteEvent) {
log.info("限价清单计划删除流程事件,技术标准文件审核任务执行了{}", processDeleteEvent.toString());
}
/** /**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)

View File

@ -0,0 +1,154 @@
package org.dromara.patch.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.patch.domain.vo.PdMasterProgressVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.patch.domain.vo.PdMasterVo;
import org.dromara.patch.domain.bo.PdMasterBo;
import org.dromara.patch.service.IPdMasterService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 派单
*
* @author Lion Li
* @date 2025-08-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/patch")
public class PdMasterController extends BaseController {
private final IPdMasterService pdMasterService;
/**
* 新增进度详情
*/
@SaCheckPermission("patch:master:edit")
@PostMapping("/progress")
public R<Void> addProgress(@Validated @RequestBody PdMasterProgressVo progress) {
if (progress.getSlaveId() == null) {
throw new ServiceException("slaveId不能为空无法更新进度");
}
// 将slaveId的值赋给updateBy
progress.setUpdateBy(progress.getSlaveId());
// 如果需要也可以将slaveName赋给updateByName
progress.setUpdateByName(progress.getSlaveName());
return toAjax(pdMasterService.addProgress(progress));
}
/**
* 修改进度详情
*/
@SaCheckPermission("patch:master:edit")
@PutMapping("/progress")
public R<Void> editProgress(@Validated @RequestBody PdMasterProgressVo progress) {
return toAjax(pdMasterService.editProgress(progress));
}
/**
* 删除进度详情
*/
@SaCheckPermission("patch:master:remove")
@DeleteMapping("/progress/{id}")
public R<Void> removeProgress(@PathVariable Long id) {
return toAjax(pdMasterService.removeProgress(id));
}
/**
* 查询派单进度详情列表
* @param masterId 派单主表ID
* @return 进度详情列表
*/
@SaCheckPermission("patch:master:query")
@GetMapping("/progress/{masterId}")
public R<List<PdMasterProgressVo>> getProgressList(
@NotNull(message = "主表ID不能为空")
@PathVariable Long masterId) {
return R.ok(pdMasterService.queryProgressList(masterId));
}
/**
* 查询派单列表
*/
@SaCheckPermission("patch:master:list")
@GetMapping("/list")
public TableDataInfo<PdMasterVo> list(PdMasterBo bo, PageQuery pageQuery) {
return pdMasterService.queryPageList(bo, pageQuery);
}
/**
* 导出派单列表
*/
@SaCheckPermission("patch:master:export")
@Log(title = "派单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PdMasterBo bo, HttpServletResponse response) {
List<PdMasterVo> list = pdMasterService.queryList(bo);
ExcelUtil.exportExcel(list, "派单", PdMasterVo.class, response);
}
/**
* 获取派单详细信息
*
* @param id 主键
*/
@SaCheckPermission("patch:master:query")
@GetMapping("/{id}")
public R<PdMasterVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(pdMasterService.queryById(id));
}
/**
* 新增派单
*/
@SaCheckPermission("patch:master:add")
@Log(title = "派单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PdMasterBo bo) {
return toAjax(pdMasterService.insertByBo(bo));
}
/**
* 修改派单
*/
@SaCheckPermission("patch:master:edit")
@Log(title = "派单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PdMasterBo bo) {
return toAjax(pdMasterService.updateByBo(bo));
}
/**
* 删除派单
*
* @param ids 主键串
*/
@SaCheckPermission("patch:master:remove")
@Log(title = "派单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(pdMasterService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.patch.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.patch.domain.vo.PdMasterSonVo;
import org.dromara.patch.domain.bo.PdMasterSonBo;
import org.dromara.patch.service.IPdMasterSonService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 派单-进度
*
* @author Lion Li
* @date 2025-08-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/patch/masterSon")
public class PdMasterSonController extends BaseController {
private final IPdMasterSonService pdMasterSonService;
/**
* 查询派单-进度列表
*/
@SaCheckPermission("patch:masterSon:list")
@GetMapping("/list")
public TableDataInfo<PdMasterSonVo> list(PdMasterSonBo bo, PageQuery pageQuery) {
return pdMasterSonService.queryPageList(bo, pageQuery);
}
/**
* 导出派单-进度列表
*/
@SaCheckPermission("patch:masterSon:export")
@Log(title = "派单-进度", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PdMasterSonBo bo, HttpServletResponse response) {
List<PdMasterSonVo> list = pdMasterSonService.queryList(bo);
ExcelUtil.exportExcel(list, "派单-进度", PdMasterSonVo.class, response);
}
/**
* 获取派单-进度详细信息
*
* @param id 主键
*/
@SaCheckPermission("patch:masterSon:query")
@GetMapping("/{id}")
public R<PdMasterSonVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(pdMasterSonService.queryById(id));
}
/**
* 新增派单-进度
*/
@SaCheckPermission("patch:masterSon:add")
@Log(title = "派单-进度", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PdMasterSonBo bo) {
return toAjax(pdMasterSonService.insertByBo(bo));
}
/**
* 修改派单-进度
*/
@SaCheckPermission("patch:masterSon:edit")
@Log(title = "派单-进度", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PdMasterSonBo bo) {
return toAjax(pdMasterSonService.updateByBo(bo));
}
/**
* 删除派单-进度
*
* @param ids 主键串
*/
@SaCheckPermission("patch:masterSon:remove")
@Log(title = "派单-进度", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(pdMasterSonService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.patch.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.patch.domain.vo.PdMasterUserVo;
import org.dromara.patch.domain.bo.PdMasterUserBo;
import org.dromara.patch.service.IPdMasterUserService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 派单-用户
*
* @author Lion Li
* @date 2025-08-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/patch/masterUser")
public class PdMasterUserController extends BaseController {
private final IPdMasterUserService pdMasterUserService;
/**
* 查询派单-用户列表
*/
@SaCheckPermission("patch:masterUser:list")
@GetMapping("/list")
public TableDataInfo<PdMasterUserVo> list(PdMasterUserBo bo, PageQuery pageQuery) {
return pdMasterUserService.queryPageList(bo, pageQuery);
}
/**
* 导出派单-用户列表
*/
@SaCheckPermission("patch:masterUser:export")
@Log(title = "派单-用户", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PdMasterUserBo bo, HttpServletResponse response) {
List<PdMasterUserVo> list = pdMasterUserService.queryList(bo);
ExcelUtil.exportExcel(list, "派单-用户", PdMasterUserVo.class, response);
}
/**
* 获取派单-用户详细信息
*
* @param ordersid 主键
*/
@SaCheckPermission("patch:masterUser:query")
@GetMapping("/{ordersid}")
public R<PdMasterUserVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long ordersid) {
return R.ok(pdMasterUserService.queryById(ordersid));
}
/**
* 新增派单-用户
*/
@SaCheckPermission("patch:masterUser:add")
@Log(title = "派单-用户", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PdMasterUserBo bo) {
return toAjax(pdMasterUserService.insertByBo(bo));
}
/**
* 修改派单-用户
*/
@SaCheckPermission("patch:masterUser:edit")
@Log(title = "派单-用户", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PdMasterUserBo bo) {
return toAjax(pdMasterUserService.updateByBo(bo));
}
/**
* 删除派单-用户
*
* @param ordersids 主键串
*/
@SaCheckPermission("patch:masterUser:remove")
@Log(title = "派单-用户", businessType = BusinessType.DELETE)
@DeleteMapping("/{ordersids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ordersids) {
return toAjax(pdMasterUserService.deleteWithValidByIds(List.of(ordersids), true));
}
}

View File

@ -0,0 +1,74 @@
package org.dromara.patch.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 派单对象 pd_master
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pd_master")
public class PdMaster extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 任务名称
*/
private String taskName;
/**
* 任务描述
*/
@TableField("`describe`")
private String describe;
/**
* 计划完成时间
*/
private Date pcd;
/**
* 实际完成时间
*/
private Date act;
/**
* 完成进度
*/
private String completionProgress = "0.00%"; // 设置默认值
/**
* 任务状态
*/
private String taskStatus="0";
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,46 @@
package org.dromara.patch.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 派单-进度对象 pd_master_son
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pd_master_son")
public class PdMasterSon extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 主表任务ID'
*/
private Long ordersId;
/**
* 进度
*/
private String progress;
/**
* 备注
*/
private String remark;
private Long updateBy;
}

View File

@ -0,0 +1,41 @@
package org.dromara.patch.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 派单-用户对象 pd_master_user
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pd_master_user")
public class PdMasterUser extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 订单id
*/
@TableId(type = IdType.INPUT)
private Long ordersid;
/**
* 执行人id
*/
private Long slaveid;
/**
* 执行人名字
*/
private String slaveName;
}

View File

@ -0,0 +1,72 @@
package org.dromara.patch.domain.bo;
import org.dromara.patch.domain.PdMaster;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 派单业务对象 pd_master
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PdMaster.class, reverseConvertGenerate = false)
public class PdMasterBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 任务名称
*/
private String taskName;
/**
* 任务描述
*/
private String describe;
/**
* 计划完成时间
*/
private Date pcd;
/**
* 实际完成时间
*/
private Date act;
/**
* 完成进度
*/
private String completionProgress;
/**
* 任务状态
*/
private String taskStatus;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,45 @@
package org.dromara.patch.domain.bo;
import org.dromara.patch.domain.PdMasterSon;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 派单-进度业务对象 pd_master_son
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PdMasterSon.class, reverseConvertGenerate = false)
public class PdMasterSonBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 主表任务ID'
*/
private Long ordersId;
/**
* 进度
*/
private Long progress;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,41 @@
package org.dromara.patch.domain.bo;
import org.dromara.patch.domain.PdMasterUser;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 派单-用户业务对象 pd_master_user
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PdMasterUser.class, reverseConvertGenerate = false)
public class PdMasterUserBo extends BaseEntity {
/**
* 订单id
*/
@NotNull(message = "订单id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long ordersid;
/**
* 执行人id
*/
@NotNull(message = "执行人id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long slaveid;
/**
* 执行人名字
*/
private String slaveName;
}

View File

@ -0,0 +1,15 @@
package org.dromara.patch.domain.dto;
import lombok.Data;
import java.util.Date;
@Data
public class ProgressDetailDto {
private Long id;
private Long ordersId;
private String progress;
private String remark;
private Date updateTime;
private Long slaveId;
private String slaveName;
}

View File

@ -0,0 +1,50 @@
package org.dromara.patch.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* 派单进度详情VO
*
* @author Your Name
* @date 2025-08-20
*/
@Data
public class PdMasterProgressVo {
/**
* 进度ID
*/
private Long id;
/**
* 主表任务ID
*/
private Long ordersId;
/**
* 进度
*/
private String progress;
/**
* 备注
*/
private String remark;
/**
* 更新时间
*/
private Date updateTime;
/**
* 执行人ID
*/
private Long slaveId;
/**
* 执行人名字
*/
private String slaveName;
private Long updateBy; // 新增字段
private String updateByName; // 新增字段
}

View File

@ -0,0 +1,56 @@
package org.dromara.patch.domain.vo;
import org.dromara.patch.domain.PdMasterSon;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 派单-进度视图对象 pd_master_son
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PdMasterSon.class)
public class PdMasterSonVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 主表任务ID'
*/
@ExcelProperty(value = "主表任务ID'")
private Long ordersId;
/**
* 进度
*/
@ExcelProperty(value = "进度")
private String progress;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,50 @@
package org.dromara.patch.domain.vo;
import org.dromara.patch.domain.PdMasterUser;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 派单-用户视图对象 pd_master_user
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PdMasterUser.class)
public class PdMasterUserVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 订单id
*/
@ExcelProperty(value = "订单id")
private Long ordersid;
/**
* 执行人id
*/
@ExcelProperty(value = "执行人id")
private Long slaveid;
/**
* 执行人名字
*/
@ExcelProperty(value = "执行人名字")
private String slaveName;
}

View File

@ -0,0 +1,88 @@
package org.dromara.patch.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.patch.domain.PdMaster;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 派单视图对象 pd_master
*
* @author Lion Li
* @date 2025-08-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PdMaster.class)
public class PdMasterVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 项目ID
*/
@ExcelProperty(value = "项目ID")
private Long projectId;
/**
* 任务名称
*/
@ExcelProperty(value = "任务名称")
private String taskName;
/**
* 任务描述
*/
@ExcelProperty(value = "任务描述")
private String describe;
/**
* 计划完成时间
*/
@ExcelProperty(value = "计划完成时间")
private Date pcd;
/**
* 实际完成时间
*/
@ExcelProperty(value = "实际完成时间")
private Date act;
/**
* 完成进度
*/
@ExcelProperty(value = "完成进度")
private String completionProgress;
/**
* 任务状态
*/
@ExcelProperty(value = "任务状态")
private String taskStatus;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,29 @@
package org.dromara.patch.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 任务状态枚举
*/
@AllArgsConstructor
@Getter
public enum TaskStatusEnum {
UNFINISHED("0", "未完成"),
FINISHED("1", "完成");
private final String value; // 字典值
private final String label; // 字典标签
/**
* 根据值获取标签
*/
public static String getLabelByValue(String value) {
for (TaskStatusEnum status : values()) {
if (status.value.equals(value)) {
return status.label;
}
}
return "";
}
}

View File

@ -0,0 +1,41 @@
package org.dromara.patch.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.patch.domain.PdMaster;
import org.dromara.patch.domain.dto.ProgressDetailDto;
import org.dromara.patch.domain.vo.PdMasterProgressVo;
import org.dromara.patch.domain.vo.PdMasterVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
import java.util.Map;
/**
* 派单Mapper接口
*
* @author Lion Li
* @date 2025-08-19
*/
public interface PdMasterMapper extends BaseMapperPlus<PdMaster, PdMasterVo> {
List<PdMasterProgressVo> selectProgressByMasterId(@Param("masterId") Long masterId);
// 新增进度详情
int insertProgress(@Param("progress") PdMasterProgressVo progress);
// 修改进度详情
int updateProgress(@Param("progress") PdMasterProgressVo progress);
// 删除进度详情
int deleteProgressById(@Param("id") Long id);
Double selectTotalProgressByMasterId(Long masterId);
PdMasterProgressVo selectProgressById(Long id);
int countMasterUser(@Param("ordersId") Long ordersId, @Param("slaveId") Long slaveId);
int insertMasterUser(@Param("ordersId") Long ordersId,
@Param("slaveId") Long slaveId,
@Param("slaveName") String slaveName);
}

View File

@ -0,0 +1,17 @@
package org.dromara.patch.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.patch.domain.PdMasterSon;
import org.dromara.patch.domain.vo.PdMasterSonVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 派单-进度Mapper接口
*
* @author Lion Li
* @date 2025-08-19
*/
public interface PdMasterSonMapper extends BaseMapperPlus<PdMasterSon, PdMasterSonVo> {
}

View File

@ -0,0 +1,17 @@
package org.dromara.patch.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.patch.domain.PdMasterUser;
import org.dromara.patch.domain.vo.PdMasterUserVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 派单-用户Mapper接口
*
* @author Lion Li
* @date 2025-08-19
*/
public interface PdMasterUserMapper extends BaseMapperPlus<PdMasterUser, PdMasterUserVo> {
}

View File

@ -0,0 +1,81 @@
package org.dromara.patch.service;
import org.dromara.patch.domain.vo.PdMasterProgressVo;
import org.dromara.patch.domain.vo.PdMasterVo;
import org.dromara.patch.domain.bo.PdMasterBo;
import org.dromara.patch.domain.PdMaster;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 派单Service接口
*
* @author Lion Li
* @date 2025-08-19
*/
public interface IPdMasterService extends IService<PdMaster>{
List<PdMasterProgressVo> queryProgressList(Long masterId);
void validEntityBeforeSave(PdMaster entity);
// 新增进度
Boolean addProgress(PdMasterProgressVo progress);
// 修改进度
Boolean editProgress(PdMasterProgressVo progress);
// 删除进度
Boolean removeProgress(Long id);
/**
* 查询派单
*
* @param id 主键
* @return 派单
*/
PdMasterVo queryById(Long id);
/**
* 分页查询派单列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 派单分页列表
*/
TableDataInfo<PdMasterVo> queryPageList(PdMasterBo bo, PageQuery pageQuery);
/**
* 查询符合条件的派单列表
*
* @param bo 查询条件
* @return 派单列表
*/
List<PdMasterVo> queryList(PdMasterBo bo);
/**
* 新增派单
*
* @param bo 派单
* @return 是否新增成功
*/
Boolean insertByBo(PdMasterBo bo);
/**
* 修改派单
*
* @param bo 派单
* @return 是否修改成功
*/
Boolean updateByBo(PdMasterBo bo);
/**
* 校验并批量删除派单信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.patch.service;
import org.dromara.patch.domain.vo.PdMasterSonVo;
import org.dromara.patch.domain.bo.PdMasterSonBo;
import org.dromara.patch.domain.PdMasterSon;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 派单-进度Service接口
*
* @author Lion Li
* @date 2025-08-19
*/
public interface IPdMasterSonService extends IService<PdMasterSon>{
/**
* 查询派单-进度
*
* @param id 主键
* @return 派单-进度
*/
PdMasterSonVo queryById(Long id);
/**
* 分页查询派单-进度列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 派单-进度分页列表
*/
TableDataInfo<PdMasterSonVo> queryPageList(PdMasterSonBo bo, PageQuery pageQuery);
/**
* 查询符合条件的派单-进度列表
*
* @param bo 查询条件
* @return 派单-进度列表
*/
List<PdMasterSonVo> queryList(PdMasterSonBo bo);
/**
* 新增派单-进度
*
* @param bo 派单-进度
* @return 是否新增成功
*/
Boolean insertByBo(PdMasterSonBo bo);
/**
* 修改派单-进度
*
* @param bo 派单-进度
* @return 是否修改成功
*/
Boolean updateByBo(PdMasterSonBo bo);
/**
* 校验并批量删除派单-进度信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.patch.service;
import org.dromara.patch.domain.vo.PdMasterUserVo;
import org.dromara.patch.domain.bo.PdMasterUserBo;
import org.dromara.patch.domain.PdMasterUser;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 派单-用户Service接口
*
* @author Lion Li
* @date 2025-08-19
*/
public interface IPdMasterUserService extends IService<PdMasterUser>{
/**
* 查询派单-用户
*
* @param ordersid 主键
* @return 派单-用户
*/
PdMasterUserVo queryById(Long ordersid);
/**
* 分页查询派单-用户列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 派单-用户分页列表
*/
TableDataInfo<PdMasterUserVo> queryPageList(PdMasterUserBo bo, PageQuery pageQuery);
/**
* 查询符合条件的派单-用户列表
*
* @param bo 查询条件
* @return 派单-用户列表
*/
List<PdMasterUserVo> queryList(PdMasterUserBo bo);
/**
* 新增派单-用户
*
* @param bo 派单-用户
* @return 是否新增成功
*/
Boolean insertByBo(PdMasterUserBo bo);
/**
* 修改派单-用户
*
* @param bo 派单-用户
* @return 是否修改成功
*/
Boolean updateByBo(PdMasterUserBo bo);
/**
* 校验并批量删除派单-用户信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,249 @@
package org.dromara.patch.service.impl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.patch.domain.vo.PdMasterProgressVo;
import org.dromara.patch.enums.TaskStatusEnum;
import org.springframework.stereotype.Service;
import org.dromara.patch.domain.bo.PdMasterBo;
import org.dromara.patch.domain.vo.PdMasterVo;
import org.dromara.patch.domain.PdMaster;
import org.dromara.patch.mapper.PdMasterMapper;
import org.dromara.patch.service.IPdMasterService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 派单Service业务层处理
*
* @author Lion Li
* @date 2025-08-19
*/
@RequiredArgsConstructor
@Service
public class PdMasterServiceImpl extends ServiceImpl<PdMasterMapper, PdMaster> implements IPdMasterService {
private final PdMasterMapper baseMapper;
@Override
public void validEntityBeforeSave(PdMaster entity) {
// 如果有ID更新操作计算总进度
if (entity.getId() != null) {
Double totalProgress = baseMapper.selectTotalProgressByMasterId(entity.getId());
entity.setCompletionProgress(String.format("%.2f%%", totalProgress));
}
// 根据完成进度更新任务状态
String progress = entity.getCompletionProgress();
if ("100.00%".equals(progress)) {
entity.setTaskStatus(TaskStatusEnum.FINISHED.getValue());
if (entity.getAct() == null) {
entity.setAct(new Date());
}
} else {
entity.setTaskStatus(TaskStatusEnum.UNFINISHED.getValue());
}
if (StringUtils.isBlank(entity.getTaskName())) {
throw new ServiceException("任务名称不能为空");
}
}
@Override
public Boolean addProgress(PdMasterProgressVo progress) {
if (progress.getOrdersId() == null) {
throw new ServiceException("主表ID不能为空");
}
if (baseMapper.selectById(progress.getOrdersId()) == null) {
throw new ServiceException("派单主表不存在");
}
// 新增进度到pd_master_son表
boolean success = baseMapper.insertProgress(progress) > 0;
if (success) {
// 同时向pd_master_user表插入数据
// 这里假设progress对象中有updateBy字段如果没有需要从其他地方获取
Long updateBy = progress.getUpdateBy(); // 需要确保PdMasterProgressVo有这个字段
String updateByName = progress.getUpdateByName(); // 需要确保PdMasterProgressVo有这个字段
if (updateBy != null) {
// 检查是否已存在关联记录
int count = baseMapper.countMasterUser(progress.getOrdersId(), updateBy);
if (count == 0) {
// 不存在则插入
baseMapper.insertMasterUser(progress.getOrdersId(), updateBy, updateByName);
}
}
updateMasterCompletionProgress(progress.getOrdersId());
}
return success;
}
@Override
public Boolean editProgress(PdMasterProgressVo progress) {
if (progress.getOrdersId() == null) {
throw new ServiceException("主表ID不能为空");
}
// 检查进度记录是否存在
PdMasterProgressVo existingProgress = baseMapper.selectProgressById(progress.getId());
if (existingProgress == null) {
throw new ServiceException("进度记录不存在");
}
boolean success = baseMapper.updateProgress(progress) > 0;
if (success) {
updateMasterCompletionProgress(progress.getOrdersId());
}
return success;
}
@Override
public Boolean removeProgress(Long id) {
// 先查询进度记录获取主表ID
PdMasterProgressVo progress = baseMapper.selectProgressById(id);
if (progress == null) {
throw new ServiceException("进度记录不存在");
}
boolean success = baseMapper.deleteProgressById(id) > 0;
if (success) {
updateMasterCompletionProgress(progress.getOrdersId());
}
return success;
}
private void updateMasterCompletionProgress(Long masterId) {
PdMaster master = baseMapper.selectById(masterId);
if (master != null) {
// 重新计算总进度
Double totalProgress = baseMapper.selectTotalProgressByMasterId(masterId);
master.setCompletionProgress(String.format("%.2f%%", totalProgress));
// 触发校验和状态更新
validEntityBeforeSave(master);
baseMapper.updateById(master);
}
}
/**
* 根据主表ID查询进度详情列表
* @param masterId 主表ID
* @return 进度详情列表
*/
@Override
public List<PdMasterProgressVo> queryProgressList(Long masterId) {
if (masterId == null) {
return List.of();
}
return baseMapper.selectProgressByMasterId(masterId);
}
/**
* 查询派单
*
* @param id 主键
* @return 派单
*/
@Override
public PdMasterVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询派单列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 派单分页列表
*/
@Override
public TableDataInfo<PdMasterVo> queryPageList(PdMasterBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PdMaster> lqw = buildQueryWrapper(bo);
Page<PdMasterVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的派单列表
*
* @param bo 查询条件
* @return 派单列表
*/
@Override
public List<PdMasterVo> queryList(PdMasterBo bo) {
LambdaQueryWrapper<PdMaster> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<PdMaster> buildQueryWrapper(PdMasterBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<PdMaster> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(PdMaster::getId);
lqw.eq(bo.getProjectId() != null, PdMaster::getProjectId, bo.getProjectId());
lqw.like(StringUtils.isNotBlank(bo.getTaskName()), PdMaster::getTaskName, bo.getTaskName());
lqw.eq(StringUtils.isNotBlank(bo.getDescribe()), PdMaster::getDescribe, bo.getDescribe());
lqw.eq(bo.getPcd() != null, PdMaster::getPcd, bo.getPcd());
lqw.eq(bo.getAct() != null, PdMaster::getAct, bo.getAct());
lqw.eq(StringUtils.isNotBlank(bo.getCompletionProgress()), PdMaster::getCompletionProgress, bo.getCompletionProgress());
lqw.eq(StringUtils.isNotBlank(bo.getTaskStatus()), PdMaster::getTaskStatus, bo.getTaskStatus());
return lqw;
}
/**
* 新增派单
*
* @param bo 派单
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(PdMasterBo bo) {
PdMaster add = MapstructUtils.convert(bo, PdMaster.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改派单
*
* @param bo 派单
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(PdMasterBo bo) {
PdMaster update = MapstructUtils.convert(bo, PdMaster.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
/**
* 校验并批量删除派单信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,131 @@
package org.dromara.patch.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.patch.domain.bo.PdMasterSonBo;
import org.dromara.patch.domain.vo.PdMasterSonVo;
import org.dromara.patch.domain.PdMasterSon;
import org.dromara.patch.mapper.PdMasterSonMapper;
import org.dromara.patch.service.IPdMasterSonService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 派单-进度Service业务层处理
*
* @author Lion Li
* @date 2025-08-19
*/
@RequiredArgsConstructor
@Service
public class PdMasterSonServiceImpl extends ServiceImpl<PdMasterSonMapper, PdMasterSon> implements IPdMasterSonService {
private final PdMasterSonMapper baseMapper;
/**
* 查询派单-进度
*
* @param id 主键
* @return 派单-进度
*/
@Override
public PdMasterSonVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询派单-进度列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 派单-进度分页列表
*/
@Override
public TableDataInfo<PdMasterSonVo> queryPageList(PdMasterSonBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PdMasterSon> lqw = buildQueryWrapper(bo);
Page<PdMasterSonVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的派单-进度列表
*
* @param bo 查询条件
* @return 派单-进度列表
*/
@Override
public List<PdMasterSonVo> queryList(PdMasterSonBo bo) {
LambdaQueryWrapper<PdMasterSon> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<PdMasterSon> buildQueryWrapper(PdMasterSonBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<PdMasterSon> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(PdMasterSon::getId);
lqw.eq(bo.getOrdersId() != null, PdMasterSon::getOrdersId, bo.getOrdersId());
lqw.eq(bo.getProgress() != null, PdMasterSon::getProgress, bo.getProgress());
return lqw;
}
/**
* 新增派单-进度
*
* @param bo 派单-进度
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(PdMasterSonBo bo) {
PdMasterSon add = MapstructUtils.convert(bo, PdMasterSon.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改派单-进度
*
* @param bo 派单-进度
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(PdMasterSonBo bo) {
PdMasterSon update = MapstructUtils.convert(bo, PdMasterSon.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(PdMasterSon entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除派单-进度信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,131 @@
package org.dromara.patch.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.patch.domain.bo.PdMasterUserBo;
import org.dromara.patch.domain.vo.PdMasterUserVo;
import org.dromara.patch.domain.PdMasterUser;
import org.dromara.patch.mapper.PdMasterUserMapper;
import org.dromara.patch.service.IPdMasterUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 派单-用户Service业务层处理
*
* @author Lion Li
* @date 2025-08-19
*/
@RequiredArgsConstructor
@Service
public class PdMasterUserServiceImpl extends ServiceImpl<PdMasterUserMapper, PdMasterUser> implements IPdMasterUserService {
private final PdMasterUserMapper baseMapper;
/**
* 查询派单-用户
*
* @param ordersid 主键
* @return 派单-用户
*/
@Override
public PdMasterUserVo queryById(Long ordersid){
return baseMapper.selectVoById(ordersid);
}
/**
* 分页查询派单-用户列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 派单-用户分页列表
*/
@Override
public TableDataInfo<PdMasterUserVo> queryPageList(PdMasterUserBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PdMasterUser> lqw = buildQueryWrapper(bo);
Page<PdMasterUserVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的派单-用户列表
*
* @param bo 查询条件
* @return 派单-用户列表
*/
@Override
public List<PdMasterUserVo> queryList(PdMasterUserBo bo) {
LambdaQueryWrapper<PdMasterUser> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<PdMasterUser> buildQueryWrapper(PdMasterUserBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<PdMasterUser> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getOrdersid() != null, PdMasterUser::getOrdersid, bo.getOrdersid());
lqw.eq(bo.getSlaveid() != null, PdMasterUser::getSlaveid, bo.getSlaveid());
lqw.like(StringUtils.isNotBlank(bo.getSlaveName()), PdMasterUser::getSlaveName, bo.getSlaveName());
return lqw;
}
/**
* 新增派单-用户
*
* @param bo 派单-用户
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(PdMasterUserBo bo) {
PdMasterUser add = MapstructUtils.convert(bo, PdMasterUser.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setOrdersid(add.getOrdersid());
}
return flag;
}
/**
* 修改派单-用户
*
* @param bo 派单-用户
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(PdMasterUserBo bo) {
PdMasterUser update = MapstructUtils.convert(bo, PdMasterUser.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(PdMasterUser entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除派单-用户信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,166 @@
package org.dromara.patch.util;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* 统一API响应结果封装
*/
@Data
@NoArgsConstructor
public class AjaxResult implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 状态码
*/
private int code;
/**
* 返回内容
*/
private String msg;
/**
* 数据对象
*/
private Object data;
/**
* 初始化一个新创建的 AjaxResult 对象
*
* @param code 状态码
* @param msg 返回内容
*/
public AjaxResult(int code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 初始化一个新创建的 AjaxResult 对象
*
* @param code 状态码
* @param msg 返回内容
* @param data 数据对象
*/
public AjaxResult(int code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
/**
* 返回成功消息
*
* @return 成功消息
*/
public static AjaxResult success() {
return AjaxResult.success("操作成功");
}
/**
* 返回成功数据
*
* @return 成功消息
*/
public static AjaxResult success(Object data) {
return AjaxResult.success("操作成功", data);
}
/**
* 返回成功消息
*
* @param msg 返回内容
* @return 成功消息
*/
public static AjaxResult success(String msg) {
return AjaxResult.success(msg, null);
}
/**
* 返回成功消息
*
* @param msg 返回内容
* @param data 数据对象
* @return 成功消息
*/
public static AjaxResult success(String msg, Object data) {
return new AjaxResult(200, msg, data);
}
/**
* 返回错误消息
*
* @return 错误消息
*/
public static AjaxResult error() {
return AjaxResult.error("操作失败");
}
/**
* 返回错误消息
*
* @param msg 返回内容
* @return 错误消息
*/
public static AjaxResult error(String msg) {
return AjaxResult.error(msg, null);
}
/**
* 返回错误消息
*
* @param msg 返回内容
* @param data 数据对象
* @return 错误消息
*/
public static AjaxResult error(String msg, Object data) {
return new AjaxResult(500, msg, data);
}
/**
* 返回错误消息
*
* @param code 状态码
* @param msg 返回内容
* @return 错误消息
*/
public static AjaxResult error(int code, String msg) {
return new AjaxResult(code, msg, null);
}
/**
* 是否为成功响应
*
* @return 结果
*/
public boolean isSuccess() {
return this.code == 200;
}
/**
* 方便链式调用
*
* @param key 键
* @param value 值
* @return 数据对象
*/
public AjaxResult put(String key, Object value) {
if (this.data == null) {
this.data = new HashMap<String, Object>();
}
if (this.data instanceof Map) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) this.data;
map.put(key, value);
}
return this;
}
}

View File

@ -120,4 +120,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
}) })
int updateById(@Param(Constants.ENTITY) SysUser user); int updateById(@Param(Constants.ENTITY) SysUser user);
List<Long> thisAlldepIds(@Param("depId") Long deptId);
} }

View File

@ -2,6 +2,7 @@ package org.dromara.system.service;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
@ -236,5 +237,9 @@ public interface ISysUserService {
*/ */
List<SysUserVo> selectUserListByPostList(List<Long> postIds); List<SysUserVo> selectUserListByPostList(List<Long> postIds);
/**
* 获取当前用户所在部门的所有用户
* @return 结果
*/
List<SysUser> findThis();
} }

View File

@ -686,6 +686,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of(); return List.of();
} }
/**
* 获取当前用户所在部门的所有用户
* @return
*/
@Override
public List<SysUser> findThis() {
//1、获取当前用户部门
Long deptId = LoginHelper.getDeptId();
//2、查询当前用户所在部门
List<Long> longs = baseMapper.thisAlldepIds(deptId);
//3、查询当前用户所在部门所有用户
return baseMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getDeptId, longs));
}
/** /**
* 通过用户ID查询用户账户 * 通过用户ID查询用户账户
* *

View File

@ -0,0 +1,64 @@
<?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.dromara.patch.mapper.PdMasterMapper">
<select id="selectProgressByMasterId" resultType="org.dromara.patch.domain.vo.PdMasterProgressVo">
SELECT
s.id,
s.orders_id as ordersId,
s.progress,
s.remark,
s.update_time as updateTime,
u.slaveid as slaveId,
u.slave_name as slaveName
FROM
pd_master m
INNER JOIN pd_master_user u ON m.id = u.ordersid
INNER JOIN pd_master_son s ON m.id = s.orders_id
WHERE
m.id = #{masterId}
ORDER BY
s.update_time DESC
</select>
<!-- 新增进度详情 -->
<insert id="insertProgress">
INSERT INTO pd_master_son (orders_id, progress, remark, update_time, update_by)
VALUES (#{progress.ordersId}, #{progress.progress}, #{progress.remark}, NOW(), #{progress.updateBy})
</insert>
<!-- 修改进度详情 -->
<update id="updateProgress">
UPDATE pd_master_son
SET progress = #{progress.progress},
remark = #{progress.remark},
update_time = NOW()
WHERE id = #{progress.id}
</update>
<!-- 删除进度详情 -->
<delete id="deleteProgressById">
DELETE FROM pd_master_son WHERE id = #{id}
</delete>
<select id="selectTotalProgressByMasterId" resultType="java.lang.Double">
SELECT COALESCE(SUM(CAST(REPLACE(progress, '%', '') AS DECIMAL(5,2))), 0)
FROM pd_master_son
WHERE orders_id = #{masterId}
</select>
<select id="selectProgressById" resultType="org.dromara.patch.domain.vo.PdMasterProgressVo">
SELECT id, orders_id as ordersId, progress, remark, update_time as updateTime, update_by as updateBy
FROM pd_master_son
WHERE id = #{id}
</select>
<!-- 检查pd_master_user表中是否存在关联记录 -->
<select id="countMasterUser" resultType="int">
SELECT COUNT(*) FROM pd_master_user
WHERE ordersid = #{ordersId} AND slaveid = #{slaveId}
</select>
<!-- 向pd_master_user表插入数据 -->
<insert id="insertMasterUser">
INSERT INTO pd_master_user (ordersid, slaveid, slave_name)
VALUES (#{ordersId}, #{slaveId}, #{slaveName})
</insert>
</mapper>

View File

@ -0,0 +1,7 @@
<?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.dromara.patch.mapper.PdMasterSonMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?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.dromara.patch.mapper.PdMasterUserMapper">
</mapper>

View File

@ -69,5 +69,44 @@
select count(*) from sys_user where del_flag = '0' and user_id = #{userId} select count(*) from sys_user where del_flag = '0' and user_id = #{userId}
</select> </select>
<select id="thisAlldepIds" resultType="Long">
WITH RECURSIVE dept_tree AS (
SELECT
dept_id,
parent_id,
dept_name,
dept_category,
order_num,
status,
is_show,
1 as level
FROM sys_dept
WHERE parent_id = #{depId}
AND del_flag = '0'
AND status = '0'
UNION ALL
SELECT
d.dept_id,
d.parent_id,
d.dept_name,
d.dept_category,
d.order_num,
d.status,
d.is_show,
dt.level + 1
FROM sys_dept d
INNER JOIN dept_tree dt ON d.parent_id = dt.dept_id
WHERE d.del_flag = '0'
AND d.status = '0'
)
SELECT
dept_id
FROM dept_tree
WHERE is_show = '1'
ORDER BY level, order_num;
</select>
</mapper> </mapper>