diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/MaterialBackAppointmentController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/MaterialBackAppointmentController.java new file mode 100644 index 00000000..bd21c3d5 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/MaterialBackAppointmentController.java @@ -0,0 +1,100 @@ +package com.bonus.material.clz.controller; + +import com.bonus.common.core.utils.poi.ExcelUtil; +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo; +import com.bonus.material.clz.domain.back.MaterialBackPreApply; +import com.bonus.material.clz.service.MaterialBackAppointmentService; +import com.bonus.material.common.annotation.PreventRepeatSubmit; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.List; + +/** +* @description 材料站退料预约 +* @author hay +* @date 2025/9/14 10:37 +*/ +@Api(tags = "材料站退料预约") +@RestController +@RequestMapping("/material_back_appointment") +public class MaterialBackAppointmentController extends BaseController { + + @Resource + private MaterialBackAppointmentService service; + + @ApiOperation(value = "查询工程对应项目部") + @GetMapping("/getProDepartmentByPro") + public AjaxResult getProDepartmentByPro(MaterialBackPreApply bean) { + return service.getProDepartmentByPro(bean); + } + + @ApiOperation(value = "查询在用设备列表") + @GetMapping("/getUseTypeList") + public AjaxResult getUseTypeList(MaterialBackApplyTotalInfo bean) { + return service.getUseTypeList(bean); + } + + @ApiOperation(value = "新增退料预约") + @PreventRepeatSubmit + @PostMapping("/addBackAppointment") + public AjaxResult addBackAppointment(@Valid @RequestBody MaterialBackPreApply bean) { + return service.addBackAppointment(bean); + } + + /** + * 修改退料预约 + */ + @ApiOperation(value = "修改退料预约") + @PreventRepeatSubmit + @PostMapping("/edit") + public AjaxResult editBackAppointment(@Valid @RequestBody MaterialBackPreApply bean) { + return service.editBackAppointment(bean); + } + + /** + * 删除退料预约 + */ + @ApiOperation(value = "删除退料预约") + @PreventRepeatSubmit + @PostMapping("/deleteById") + public AjaxResult remove(@RequestBody MaterialBackPreApply bean) { + return service.deleteById(bean); + } + + /** + * 查询退料预约列表 + */ + @ApiOperation(value = "查询退料预约列表") + @GetMapping("/list") + public AjaxResult list(MaterialBackPreApply bean) { + startPage(); + List list = service.selectBackPreApplyList(bean); + return AjaxResult.success(getDataTable(list)); + } + + @ApiOperation(value = "查询退料预约详情") + @GetMapping("/getListDetails") + public AjaxResult getListDetails(MaterialBackPreApply bean) { + return service.getListDetails(bean); + } + + /** + * 导出退料预约列表 + * @param response + * @param bean + */ + @ApiOperation("导出退料预约列表") + @PostMapping("/export") + public void export(HttpServletResponse response, MaterialBackPreApply bean) { + List list = service.export(bean); + ExcelUtil util = new ExcelUtil<>(MaterialBackPreApply.class); + util.exportExcel(response, list, "退料预约列表"); + } + +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/BmTeam.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/BmTeam.java index 301ba823..d0c44131 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/BmTeam.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/BmTeam.java @@ -129,4 +129,9 @@ public class BmTeam { * 班组长身份证号 */ private String teamLeaderIdCard; + + /** + * 协议id + */ + private Long agreementId; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/back/MaterialBackPreApply.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/back/MaterialBackPreApply.java new file mode 100644 index 00000000..dd4bfb01 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/back/MaterialBackPreApply.java @@ -0,0 +1,140 @@ +package com.bonus.material.clz.domain.back; + +import com.bonus.common.core.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.ToString; +import lombok.experimental.Accessors; + +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** +* @description 材料站退料预约 +* @author hay +* @date 2025/9/14 12:59 +*/ +@Accessors(chain = true) +@Data +@ToString +public class MaterialBackPreApply implements Serializable { + + private static final long serialVersionUID = 1L; + + private Boolean isExport; + + @ApiModelProperty(value = "是否退料 0 否,1 是") + private Integer isBack; + + /** ID */ + private Long id; + + @ApiModelProperty(value = "单位名称") + @Excel(name = "退料单位") + private String unitName; + + @ApiModelProperty(value="工程id") + private Long proId; + + @ApiModelProperty(value="工程名称") + @Excel(name = "退料工程") + private String proName; + + /** 退料单号 */ + @Excel(name = "退料单号") + @ApiModelProperty(value = "退料单号") + private String code; + + /** 退料人 */ + @Excel(name = "退料人") + private String backPerson; + + @ApiModelProperty(value = "预退料时间") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "退料时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date backTime; + + @ApiModelProperty(value = "单位名称") + private String teamName; + + @ApiModelProperty(value = "协议id") + private Long agreementId; + + @ApiModelProperty(value = "类型id") + private String typeId; + + @ApiModelProperty(value = "物资类型") + private String materialType; + + private String materialName; + + @ApiModelProperty(value = "类型名称") + @Excel(name = "物资名称") + private String typeName; + + @ApiModelProperty(value = "规格型号") + @Excel(name = "规格型号") + private String typeModel; + + @ApiModelProperty(value = "单位") + @Excel(name = "单位") + private String unit; + + @ApiModelProperty(value = "管理方式(0编号 1计数)") + @Excel(name = "管理方式") + private String manageType; + + @ApiModelProperty(value = "退料数量") + @Excel(name = "退料数量") + private BigDecimal backNum; + + @Size(max = 500, message = "备注长度不能超过500个字符") + @Excel(name = "备注") + private String remark; + + + @ApiModelProperty(value = "0.暂存,1.提交") + private String status; + + @ApiModelProperty(value = "班组id") + private Long teamId; + + private Long unitId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String createBy; + + private String updateBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @ApiModelProperty(value="开始时间") + private String startTime; + + @ApiModelProperty(value="结束时间") + private String endTime; + + @ApiModelProperty(value="关键字") + private String keyWord; + + @ApiModelProperty(value = "身份证号码") + private String idCard; + + /** + * i8工程id集合 + */ + private List projectIdList; + + @ApiModelProperty(value = "实施单位id") + private String impUnit; + + + List backPreDetailsList; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/back/MaterialBackPreDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/back/MaterialBackPreDetails.java new file mode 100644 index 00000000..b5f1f6ae --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/back/MaterialBackPreDetails.java @@ -0,0 +1,134 @@ +package com.bonus.material.clz.domain.back; + +import com.bonus.common.biz.domain.BmFileInfo; +import com.bonus.common.core.annotation.Excel; +import com.bonus.common.core.web.domain.BaseEntity; +import com.bonus.material.back.domain.MaCodeDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** +* @description 材料站退料预约 +* @author hay +* @date 2025/9/14 13:54 +*/ + +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@Data +@ToString +public class MaterialBackPreDetails extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** ID */ + private Long id; + + /** 退料单号 */ + @Excel(name = "退料单号") + @ApiModelProperty(value = "退料单号") + private String code; + + @ApiModelProperty(value = "机具id") + private Long maId; + + @ApiModelProperty(value = "机具id") + private Long taskId; + + /** 任务ID */ + @Excel(name = "任务ID") + @ApiModelProperty(value = "任务ID") + private Long parentId; + + @ApiModelProperty(value = "物资类型") + private String materialType; + + /** 规格ID */ + @Excel(name = "规格ID") + @ApiModelProperty(value = "规格ID") + private Long typeId; + + @ApiModelProperty(value = "类型名称") + private String typeName; + + @ApiModelProperty(value = "规格型号") + private String typeModel; + + @ApiModelProperty(value = "单位名称") + private String unitName; + + @ApiModelProperty(value = "单位名称数值") + private String unitValue; + + @ApiModelProperty(value = "管理方式(0编号 1计数)") + private String manageType; + + /** + * 机具编码 + */ + @ApiModelProperty(value = "机具编码") + private String maCode; + + private String materialName; + + private String maStatus; + + /** + * 机具编码集合(可能存在多个,数据库存储用逗号分割) + */ + private List maCodeList; + + /** 退料数量 */ + @ApiModelProperty(value = "退料数量") + private BigDecimal preNum; + + /** 审批数量 */ + @ApiModelProperty(value = "审批数量") + private BigDecimal auditNum; + + @ApiModelProperty(value = "外观判断不合格数量") + private BigDecimal badNum; + + @ApiModelProperty(value = "外观判断合格数量") + private BigDecimal goodNum; + + /** 退料数量 */ + @ApiModelProperty(value = "退料数量") + private BigDecimal backNum; + + @ApiModelProperty(value = "在用数量") + private BigDecimal num; + + /** 状态(0待审批,1进行中,2已出库,3已驳回) */ + @ApiModelProperty(value = "状态(0待退料,1进行中,2已退料,3已驳回)") + private String status; + + @ApiModelProperty(value = "机具外观判断") + private String apDetection; + + @ApiModelProperty(value = "退料状态") + private String backStatus; + + @ApiModelProperty(value = "是否完成 (0:未完成退料,可以撤回 1:已完成退料,不能撤回)") + private Integer isFinished; + + /** 数据所属组织 */ + @ApiModelProperty(value = "数据所属组织") + private Long companyId; + + /** 领用方式 */ + @ApiModelProperty(value = "领用方式 2数据同步") + private Integer leaseStyle; + + /** + * 附件列表 + */ + @ApiModelProperty(value = "附件列表") + List bmFileInfos; + +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackAppointmentMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackAppointmentMapper.java new file mode 100644 index 00000000..adbf70ee --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackAppointmentMapper.java @@ -0,0 +1,95 @@ +package com.bonus.material.clz.mapper; + + +import com.bonus.material.clz.domain.back.MaterialBackApplyDetails; +import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo; +import com.bonus.material.clz.domain.back.MaterialBackPreApply; +import com.bonus.material.clz.domain.back.MaterialBackPreDetails; + +import java.util.Date; +import java.util.List; + +/** +* @description 材料站退料预约 +* @author hay +* @date 2025/9/14 10:41 +*/ +public interface MaterialBackAppointmentMapper { + + /** + * 获取退料使用类型列表 + * @param bean + * @return List + */ + List getUseTypeList(MaterialBackApplyTotalInfo bean); + + /** + * 新增退料预约 + * @param bean + * @return int + */ + int insertBackPreApply(MaterialBackPreApply bean); + + /** + * 获取退料预约数量 + * @param nowDate + * @return int + */ + int selectNumByMonth(Date nowDate); + + /** + * 新增退料预约详情 + * @param details + * @return int + */ + int insertBackPreDetails(MaterialBackPreDetails details); + + /** + * 获取退料预约列表 + * @param bean + * @return List + */ + List selectBackPreApplyList(MaterialBackPreApply bean); + + /** + * 获取退料预约详情 + * @param bean + * @return MaterialBackPreApply + */ + MaterialBackPreApply getBackPreApply(MaterialBackPreApply bean); + + /** + * 获取退料预约详情列表 + * @param apply + * @return List + */ + List getListDetails(MaterialBackPreApply apply); + + /** + * 修改退料预约 + * @param bean + * @return int + */ + int updateBackPreApply(MaterialBackPreApply bean); + + /** + * 删除退料预约详情 + * @param id + * @return int + */ + int deleteBackPreDetails(Long id); + + /** + * 删除退料预约 + * @param bean + * @return int + */ + int deleteById(MaterialBackPreApply bean); + + /** + * 获取退料预约列表 + * @param bean + * @return List + */ + List export(MaterialBackPreApply bean); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/MaterialBackAppointmentService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/MaterialBackAppointmentService.java new file mode 100644 index 00000000..5dd6b242 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/MaterialBackAppointmentService.java @@ -0,0 +1,72 @@ +package com.bonus.material.clz.service; + + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo; +import com.bonus.material.clz.domain.back.MaterialBackPreApply; + +import java.util.List; + +/** +* @description 材料站退料预约 +* @author hay +* @date 2025/9/14 10:39 +*/ +public interface MaterialBackAppointmentService { + + /** + * 查询在用设备列表 + * @param bean + * @return + */ + AjaxResult getUseTypeList(MaterialBackApplyTotalInfo bean); + + /** + * 新增退料预约 + * @param bean + * @return + */ + AjaxResult addBackAppointment(MaterialBackPreApply bean); + + /** + * 查询退料预约列表 + * @param bean + * @return + */ + List selectBackPreApplyList(MaterialBackPreApply bean); + + /** + * 查询工程对应项目部 + * @param bean + * @return + */ + AjaxResult getProDepartmentByPro(MaterialBackPreApply bean); + + /** + * 获取退料预约列表详情 + * @param bean + * @return + */ + AjaxResult getListDetails(MaterialBackPreApply bean); + + /** + * 修改退料预约 + * @param bean + * @return + */ + AjaxResult editBackAppointment(MaterialBackPreApply bean); + + /** + * 删除退料预约 + * @param bean + * @return + */ + AjaxResult deleteById(MaterialBackPreApply bean); + + /** + * 导出退料预约列表 + * @param bean + * @return + */ + List export(MaterialBackPreApply bean); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackAppointmentServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackAppointmentServiceImpl.java new file mode 100644 index 00000000..7ec46993 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackAppointmentServiceImpl.java @@ -0,0 +1,345 @@ +package com.bonus.material.clz.service.impl; + +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.clz.domain.BmTeam; +import com.bonus.material.clz.domain.back.MaterialBackApplyDetails; +import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo; +import com.bonus.material.clz.domain.back.MaterialBackPreApply; +import com.bonus.material.clz.domain.back.MaterialBackPreDetails; +import com.bonus.material.clz.mapper.MaterialBackAppointmentMapper; +import com.bonus.material.clz.mapper.MaterialMachineMapper; +import com.bonus.material.clz.service.MaterialBackAppointmentService; +import com.bonus.material.common.mapper.SelectMapper; +import lombok.extern.slf4j.Slf4j; +import org.hibernate.validator.internal.util.StringHelper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** +* @description 材料站退料预约 +* @author hay +* @date 2025/9/14 10:39 +*/ +@Service +@Slf4j +public class MaterialBackAppointmentServiceImpl implements MaterialBackAppointmentService { + + @Resource + private MaterialBackAppointmentMapper mapper; + + @Resource(name = "SelectMapper") + private SelectMapper selectMapper; + + @Resource + private MaterialMachineMapper materialMachineMapper; + + /** + * @description 获取在用设备列表 + * @param bean + * @return AjaxResult + */ + @Override + public AjaxResult getUseTypeList(MaterialBackApplyTotalInfo bean) { + try { + List list = mapper.getUseTypeList(bean); + return AjaxResult.success(list); + } catch (Exception e) { + log.error("获取在用设备列表:{}", e); + return AjaxResult.success(new ArrayList<>()); + } + } + + /** + * @description 新增退料预约 + * @param bean + * @return AjaxResult + */ + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult addBackAppointment(MaterialBackPreApply bean) { + try { + Long theLoginUserId = SecurityUtils.getLoginUser().getSysUser().getUserId(); + //生成单号 + String code = genderLeaseCode(); + bean.setCode(code); + bean.setCreateBy(theLoginUserId.toString()); + //新插入申请表数据 + int insert = mapper.insertBackPreApply(bean); + if (insert > 0 && bean.getBackPreDetailsList() != null) { + //在插入申请表数据成功后,再插入申请明细表数据 + for (MaterialBackPreDetails details : bean.getBackPreDetailsList()) { + details.setParentId(bean.getId()); + details.setCreateBy(theLoginUserId.toString()); + int insertDetails = mapper.insertBackPreDetails(details); + if (insertDetails <= 0) { + throw new RuntimeException("添加失败"); + } + } + return AjaxResult.success("添加成功"); + } else { + return AjaxResult.error("添加失败"); + } + } catch (Exception e) { + log.error("添加失败:{}", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error("添加失败"); + } + } + + /** + * @description 查询退料预约列表 + * @param bean + * @return List + */ + @Override + public List selectBackPreApplyList(MaterialBackPreApply bean) { + try { + Set userRoles = SecurityUtils.getLoginUser().getRoles(); + String username = SecurityUtils.getLoginUser().getUsername(); + BmTeam teamData = null; + // 检查用户是否具有特殊角色 + boolean hasSpecialRole = hasSpecialRole(userRoles); + if (!hasSpecialRole) { + // 根据用户名判断用户是否为班组长 + teamData = materialMachineMapper.getTeamData(username); + if (teamData == null) { + // 根据用户名查询项目部信息 + List departId = selectMapper.getDepartId(username); + // 根据项目部id查询工程信息 + List projectIdList = selectMapper.getProjectId(departId); + if (!CollectionUtils.isEmpty(projectIdList)) { + bean.setProjectIdList(projectIdList); + } + bean.setIdCard(null); + } + } + List list = mapper.selectBackPreApplyList(bean); + // 如果列表为空,直接返回空列表 + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + if (!hasSpecialRole) { + // 数据权限划分,获取当前用户的deptId + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + if (!CollectionUtils.isEmpty(list) && deptId != null) { + // 删除元素 + list.removeIf(info -> !deptId.toString().equals(info.getImpUnit())); + } + } + if (!org.springframework.util.CollectionUtils.isEmpty(list)) { + // 班组长权限 + if (teamData != null) { + // 将sortedList中班组身份证号与username相同的元素过滤处理 + list = list.stream() + .filter(item -> StringUtils.isBlank(item.getIdCard()) || username.equals(item.getIdCard())) + .collect(Collectors.toList()); + } + } + // 物资类型过滤 + if (!StringHelper.isNullOrEmptyString(bean.getTypeName())) { + list = list.stream() + .filter(item -> bean.getTypeName().contains(item.getTypeName())) + .collect(Collectors.toList()); + } + return list; + } catch (Exception e) { + log.error("查询退料预约列表:{}", e); + return new ArrayList<>(); + } + } + + /** + * @description 查询工程对应项目部 + * @param bean + * @return AjaxResult + */ + @Override + public AjaxResult getProDepartmentByPro(MaterialBackPreApply bean) { + try { + List list = selectMapper.getProDepartmentByPro(bean); + return AjaxResult.success(list); + } catch (Exception e) { + log.error("查询工程对应项目部:{}", e); + return AjaxResult.success(new ArrayList<>()); + } + } + + @Override + public AjaxResult getListDetails(MaterialBackPreApply bean) { + try { + MaterialBackPreApply apply = mapper.getBackPreApply(bean); + if (apply != null){ + //查询详情 + List details = mapper.getListDetails(apply); + if (details != null && details.size() > 0){ + apply.setBackPreDetailsList(details); + } + } + return AjaxResult.success(apply); + } catch (Exception e) { + log.error("查询退料单详情:{}", e); + return AjaxResult.success(new MaterialBackPreApply()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult editBackAppointment(MaterialBackPreApply bean) { + try { + Long theLoginUserId = SecurityUtils.getLoginUser().getSysUser().getUserId(); + if (bean.getId() != null){ + bean.setUpdateBy(theLoginUserId.toString()); + int update = mapper.updateBackPreApply(bean); + if (update > 0){ + //删除原明细表数据 + int delete = mapper.deleteBackPreDetails(bean.getId()); + if (delete > 0 && bean.getBackPreDetailsList() != null){ + //在插入申请明细表数据 + for (MaterialBackPreDetails details : bean.getBackPreDetailsList()) { + details.setParentId(bean.getId()); + details.setCreateBy(theLoginUserId.toString()); + details.setUpdateBy(theLoginUserId.toString()); + details.setUpdateTime(DateUtils.getNowDate()); + int insertDetails = mapper.insertBackPreDetails(details); + if (insertDetails <= 0) { + throw new RuntimeException("修改失败"); + } + } + return AjaxResult.success("修改成功"); + } + } + return AjaxResult.success("修改失败"); + } else { + return AjaxResult.error("修改失败,缺少必要条件id"); + } + } catch (Exception e) { + log.error("修改退料预约:{}", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error("修改失败"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult deleteById(MaterialBackPreApply bean) { + try { + int delete = mapper.deleteById(bean); + if (delete > 0) { + int deleteDetails = mapper.deleteBackPreDetails(bean.getId()); + if (deleteDetails > 0) { + return AjaxResult.success("删除成功"); + } else { + throw new RuntimeException("删除失败"); + } + } + return AjaxResult.error("删除失败"); + } catch (Exception e) { + log.error("删除退料预约:{}", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error("删除失败"); + } + } + + @Override + public List export(MaterialBackPreApply bean) { + try { + Set userRoles = SecurityUtils.getLoginUser().getRoles(); + String username = SecurityUtils.getLoginUser().getUsername(); + BmTeam teamData = null; + // 检查用户是否具有特殊角色 + boolean hasSpecialRole = hasSpecialRole(userRoles); + if (!hasSpecialRole) { + // 根据用户名判断用户是否为班组长 + teamData = materialMachineMapper.getTeamData(username); + if (teamData == null) { + // 根据用户名查询项目部信息 + List departId = selectMapper.getDepartId(username); + // 根据项目部id查询工程信息 + List projectIdList = selectMapper.getProjectId(departId); + if (!CollectionUtils.isEmpty(projectIdList)) { + bean.setProjectIdList(projectIdList); + } + bean.setIdCard(null); + } + } + List list = mapper.export(bean); + // 如果列表为空,直接返回空列表 + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + if (!hasSpecialRole) { + // 数据权限划分,获取当前用户的deptId + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + if (!CollectionUtils.isEmpty(list) && deptId != null) { + // 删除元素 + list.removeIf(info -> !deptId.toString().equals(info.getImpUnit())); + } + } + if (!org.springframework.util.CollectionUtils.isEmpty(list)) { + // 班组长权限 + if (teamData != null) { + // 将sortedList中班组身份证号与username相同的元素过滤处理 + list = list.stream() + .filter(item -> StringUtils.isBlank(item.getIdCard()) || username.equals(item.getIdCard())) + .collect(Collectors.toList()); + } + } + // 物资类型过滤 + if (!StringHelper.isNullOrEmptyString(bean.getTypeName())) { + list = list.stream() + .filter(item -> bean.getTypeName().contains(item.getTypeName())) + .collect(Collectors.toList()); + } + return list; + } catch (Exception e) { + log.error("导出退料预约列表:{}", e); + return new ArrayList<>(); + } + } + + /** + * 生成退料单号 + * @param + * @return + */ + public String genderLeaseCode() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String result = format.replace("-", ""); + int num = mapper.selectNumByMonth(nowDate); + num = num + 1; + String code; + if (num > 9 && num < 100) { + code = "MT" + result + "-0" + num; + } else if (num > 99 && num < 1000) { + code = "MT" + result + "-" + num; + } else { + code = "MT" + result + "-00" + num; + } + return code; + } + + /** + * 检查用户是否具有特殊角色 + * @param userRoles + * @return + */ + private boolean hasSpecialRole(Set userRoles) { + if (userRoles == null) { + return false; + } + List allowedRoles = Collections.singletonList("clzcx"); + return allowedRoles.stream().anyMatch(userRoles::contains); + } +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java index 16587c84..a5227df9 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java @@ -6,6 +6,7 @@ import com.bonus.common.biz.domain.TypeTreeNode; import com.bonus.material.back.domain.BackApplyInfo; import com.bonus.material.basic.domain.BmProject; import com.bonus.material.basic.domain.BmUnit; +import com.bonus.material.clz.domain.back.MaterialBackPreApply; import com.bonus.material.clz.domain.BmTeam; import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo; import com.bonus.material.common.domain.dto.SelectDto; @@ -347,4 +348,11 @@ public interface SelectMapper { * @return */ List getProjectIdByUseName(String username); + + /** + * 获取部门下拉选 + * @param bean + * @return + */ + List getProDepartmentByPro(MaterialBackPreApply bean); } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/BmTeamMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/BmTeamMapper.xml index f21778b0..6a844a3b 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/BmTeamMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/BmTeamMapper.xml @@ -107,10 +107,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT DISTINCT bu.unit_id AS id, bu.unit_name AS teamName, bu.link_man AS relName, - bu.telphone AS relPhone + bu.telphone AS relPhone, + bai.agreement_id as agreementId FROM bm_project bpl LEFT JOIN clz_bm_agreement_info bai ON bpl.pro_id = bai.project_id AND bai.`status` = '1' LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id AND bu.del_flag = '0' WHERE bpl.pro_id = #{proId} AND bpl.del_flag = '0' + and bu.unit_name is not null + and bu.unit_id is not null \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackAppointmentMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackAppointmentMapper.xml new file mode 100644 index 00000000..aad44920 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackAppointmentMapper.xml @@ -0,0 +1,266 @@ + + + + + insert into clz_back_pre_apply + + clz_agreement_id, + back_time, + back_person, + back_code, + remark, + status, + create_by, + create_time, + update_by, + update_time, + + + #{agreementId}, + #{backTime}, + #{backPerson}, + #{code}, + #{remark}, + #{status}, + #{createBy}, + NOW(), + #{updateBy}, + #{updateTime}, + + + + insert into clz_back_pre_details + + apply_id, + type_id, + ma_id, + back_num, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{parentId}, + #{typeId}, + #{maId}, + #{backNum}, + #{remark}, + #{createBy}, + NOW(), + #{updateBy}, + #{updateTime}, + + + + update clz_back_pre_apply + + clz_agreement_id = #{agreementId}, + back_time = #{backTime}, + back_person = #{backPerson}, + remark = #{remark}, + status = #{status}, + update_by = #{updateBy}, + update_time = NOW(), + + where id = #{id} + + + delete + from clz_back_pre_details + where apply_id = #{parentId} + + + delete + from clz_back_pre_apply + where id = #{id} + + + + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml index 2abf0ac3..c591dc38 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml @@ -1089,4 +1089,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE bzz_idcard = #{username} +