优化,修改材料管理、机械管理相关代码逻辑

This commit is contained in:
lcj
2025-04-11 15:55:22 +08:00
parent f5a63d6927
commit c6842a00f2
23 changed files with 354 additions and 91 deletions

View File

@ -55,6 +55,16 @@ public class BusMachinery extends BaseEntity {
*/ */
private String principal; private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/**
* 供应商
*/
private String provider;
/** /**
* 备注 * 备注
*/ */

View File

@ -0,0 +1,24 @@
package org.dromara.machinery.domain.enums;
import lombok.Getter;
/**
* @author lcj
* @date 2025/4/11 13:53
*/
@Getter
public enum MaterialsInventoryOutputEnum {
PUT("入库", "0"),
OUT("出库", "1");
private final String text;
private final String value;
MaterialsInventoryOutputEnum(String text, String value) {
this.text = text;
this.value = value;
}
}

View File

@ -40,6 +40,16 @@ public class MachineryCreateReq implements Serializable {
*/ */
private String principal; private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/**
* 供应商
*/
private String provider;
/** /**
* 备注 * 备注
*/ */

View File

@ -45,6 +45,16 @@ public class MachineryQueryReq implements Serializable {
*/ */
private String principal; private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/**
* 供应商
*/
private String provider;
/** /**
* 备注 * 备注
*/ */

View File

@ -45,6 +45,16 @@ public class MachineryUpdateReq implements Serializable {
*/ */
private String principal; private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/**
* 供应商
*/
private String provider;
/** /**
* 备注 * 备注
*/ */

View File

@ -61,6 +61,18 @@ public class BusMachineryVo implements Serializable {
@ExcelProperty(value = "负责人") @ExcelProperty(value = "负责人")
private String principal; private String principal;
/**
* 负责人电话
*/
@ExcelProperty(value = "负责人电话")
private String principalPhone;
/**
* 供应商
*/
@ExcelProperty(value = "供应商")
private String provider;
/** /**
* 备注 * 备注
*/ */

View File

@ -1,6 +1,7 @@
package org.dromara.machinery.service.impl; package org.dromara.machinery.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -103,7 +104,7 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
BusMachinery machinery = new BusMachinery(); BusMachinery machinery = new BusMachinery();
BeanUtils.copyProperties(req, machinery); BeanUtils.copyProperties(req, machinery);
// 数据校验 // 数据校验
validEntityBeforeSave(machinery); validEntityBeforeSave(machinery, true);
// 操作数据库 // 操作数据库
boolean save = this.save(machinery); boolean save = this.save(machinery);
if (!save) { if (!save) {
@ -124,7 +125,7 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
BusMachinery machinery = new BusMachinery(); BusMachinery machinery = new BusMachinery();
BeanUtils.copyProperties(req, machinery); BeanUtils.copyProperties(req, machinery);
// 数据校验 // 数据校验
validEntityBeforeSave(machinery); validEntityBeforeSave(machinery, false);
// 判断是否存在 // 判断是否存在
BusMachinery oldMachinery = this.getById(machinery.getId()); BusMachinery oldMachinery = this.getById(machinery.getId());
if (oldMachinery == null) { if (oldMachinery == null) {
@ -137,18 +138,31 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(BusMachinery entity) { private void validEntityBeforeSave(BusMachinery entity, Boolean create) {
// 做一些数据校验,如唯一约束 // 做一些数据校验,如唯一约束
Long projectId = entity.getProjectId(); Long projectId = entity.getProjectId();
String machineryName = entity.getMachineryName();
String principal = entity.getPrincipal();
String principalPhone = entity.getPrincipalPhone();
if (projectId == null) { if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST); throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
} }
if (create) {
if (StrUtil.isBlank(machineryName)) {
throw new ServiceException("机械名称不能为空", HttpStatus.BAD_REQUEST);
}
if (StringUtils.isBlank(principal)) {
throw new ServiceException("负责人不能为空", HttpStatus.BAD_REQUEST);
}
if (StringUtils.isBlank(principalPhone)) {
throw new ServiceException("负责人手机号不能为空", HttpStatus.BAD_REQUEST);
}
}
if (projectService.getById(projectId) == null) { if (projectService.getById(projectId) == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
} }
String machineryName = entity.getMachineryName(); if (StringUtils.isNotBlank(principalPhone) && !PhoneUtil.isPhone(principalPhone)) {
if (StrUtil.isBlank(machineryName)) { throw new ServiceException("负责人手机号格式不正确", HttpStatus.BAD_REQUEST);
throw new ServiceException("机械名称不能为空", HttpStatus.BAD_REQUEST);
} }
// 判断用户是否对项目下的内容有操作权限 // 判断用户是否对项目下的内容有操作权限
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
@ -222,10 +236,14 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
Long projectId = req.getProjectId(); Long projectId = req.getProjectId();
Long number = req.getNumber(); Long number = req.getNumber();
String principal = req.getPrincipal(); String principal = req.getPrincipal();
String principalPhone = req.getPrincipalPhone();
String provider = req.getProvider();
String remark = req.getRemark(); String remark = req.getRemark();
// 模糊查询 // 模糊查询
lqw.like(StringUtils.isNotBlank(machineryName), BusMachinery::getMachineryName, machineryName); lqw.like(StringUtils.isNotBlank(machineryName), BusMachinery::getMachineryName, machineryName);
lqw.like(StringUtils.isNotBlank(principal), BusMachinery::getPrincipal, principal); lqw.like(StringUtils.isNotBlank(principal), BusMachinery::getPrincipal, principal);
lqw.like(StringUtils.isNotBlank(principalPhone), BusMachinery::getPrincipalPhone, principalPhone);
lqw.like(StringUtils.isNotBlank(provider), BusMachinery::getProvider, provider);
lqw.like(StringUtils.isNotBlank(machineryNumber), BusMachinery::getMachineryNumber, machineryNumber); lqw.like(StringUtils.isNotBlank(machineryNumber), BusMachinery::getMachineryNumber, machineryNumber);
lqw.like(StringUtils.isNotBlank(remark), BusMachinery::getRemark, remark); lqw.like(StringUtils.isNotBlank(remark), BusMachinery::getRemark, remark);
// 精确查询 // 精确查询

View File

@ -56,7 +56,7 @@ public class BusMaterialsInventoryController extends BaseController {
@PostMapping("/export") @PostMapping("/export")
public void export(MaterialsInventoryQueryReq req, HttpServletResponse response) { public void export(MaterialsInventoryQueryReq req, HttpServletResponse response) {
List<BusMaterialsInventoryVo> list = busMaterialsInventoryService.queryList(req); List<BusMaterialsInventoryVo> list = busMaterialsInventoryService.queryList(req);
ExcelUtil.exportExcel(list, "材料出/入库", BusMaterialsInventoryVo.class, response); ExcelUtil.exportExcel(list, "材料出入库", BusMaterialsInventoryVo.class, response);
} }
/** /**

View File

@ -40,6 +40,16 @@ public class BusCompany extends BaseEntity {
*/ */
private Long projectId; private Long projectId;
/**
* 负责人
*/
private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/** /**
* 帐号状态0正常 1停用 * 帐号状态0正常 1停用
*/ */

View File

@ -25,6 +25,16 @@ public class CompanyCreateReq implements Serializable {
*/ */
private Long projectId; private Long projectId;
/**
* 负责人
*/
private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/** /**
* 备注 * 备注
*/ */

View File

@ -30,6 +30,16 @@ public class CompanyQueryReq implements Serializable {
*/ */
private Long projectId; private Long projectId;
/**
* 负责人
*/
private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/** /**
* 帐号状态0正常 1停用 * 帐号状态0正常 1停用
*/ */

View File

@ -30,6 +30,16 @@ public class CompanyUpdateReq implements Serializable {
*/ */
private Long projectId; private Long projectId;
/**
* 负责人
*/
private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/** /**
* 帐号状态0正常 1停用 * 帐号状态0正常 1停用
*/ */

View File

@ -41,11 +41,6 @@ public class MaterialsInventoryCreateReq implements Serializable {
*/ */
private Date outPutTime; private Date outPutTime;
/**
* 剩余库存数量(记录最后一次操作留下的库存数)
*/
private Long residue;
/** /**
* 操作人(入库人、领料人) * 操作人(入库人、领料人)
*/ */

View File

@ -36,21 +36,11 @@ public class MaterialsInventoryUpdateReq implements Serializable {
*/ */
private String outPut; private String outPut;
/**
* 出/入库的数量
*/
private Long number;
/** /**
* 出/入库操作时间 * 出/入库操作时间
*/ */
private Date outPutTime; private Date outPutTime;
/**
* 剩余库存数量(记录最后一次操作留下的库存数)
*/
private Long residue;
/** /**
* 材料出入证明 * 材料出入证明
*/ */

View File

@ -45,6 +45,18 @@ public class BusCompanyVo implements Serializable {
@ExcelProperty(value = "项目id") @ExcelProperty(value = "项目id")
private Long projectId; private Long projectId;
/**
* 负责人
*/
@ExcelProperty(value = "负责人")
private String principal;
/**
* 负责人电话
*/
@ExcelProperty(value = "负责人电话")
private String principalPhone;
/** /**
* 帐号状态0正常 1停用 * 帐号状态0正常 1停用
*/ */

View File

@ -4,8 +4,6 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.materials.domain.BusMaterialsInventory; import org.dromara.materials.domain.BusMaterialsInventory;
import java.io.Serial; import java.io.Serial;
@ -40,10 +38,9 @@ public class BusMaterialsInventoryVo implements Serializable {
private Long materialsId; private Long materialsId;
/** /**
* 材料信息 * 材料名称
*/ */
@ExcelProperty(value = "材料信息") private String materialsName;
private BusMaterialsVo materialsVo;
/** /**
* 项目id * 项目id
@ -60,27 +57,25 @@ public class BusMaterialsInventoryVo implements Serializable {
/** /**
* 出/入库的数量 * 出/入库的数量
*/ */
@ExcelProperty(value = "/入库的数量") @ExcelProperty(value = "出入库的数量")
private Long number; private Long number;
/** /**
* 出/入库操作时间 * 出/入库操作时间
*/ */
@ExcelProperty(value = "/入库操作时间") @ExcelProperty(value = "出入库操作时间")
private Date outPutTime; private Date outPutTime;
/** /**
* 剩余库存数量(记录最后一次操作留下的库存数) * 剩余库存数量(记录最后一次操作留下的库存数)
*/ */
@ExcelProperty(value = "剩余库存数量", converter = ExcelDictConvert.class) @ExcelProperty(value = "剩余库存数量")
@ExcelDictFormat(readConverterExp = "记录最后一次操作留下的库存数")
private Long residue; private Long residue;
/** /**
* 操作人(入库人、领料人) * 操作人(入库人、领料人)
*/ */
@ExcelProperty(value = "操作人", converter = ExcelDictConvert.class) @ExcelProperty(value = "操作人")
@ExcelDictFormat(readConverterExp = "入库人、领料人")
private String operator; private String operator;
/** /**
@ -98,8 +93,7 @@ public class BusMaterialsInventoryVo implements Serializable {
/** /**
* 交接单位(班组) * 交接单位(班组)
*/ */
@ExcelProperty(value = "交接单位", converter = ExcelDictConvert.class) @ExcelProperty(value = "交接单位")
@ExcelDictFormat(readConverterExp = "班=组")
private String recipient; private String recipient;
/** /**

View File

@ -72,6 +72,14 @@ public interface IBusCompanyService extends IService<BusCompany> {
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 获取封装视图对象
*
* @param company 实体对象
* @return 封装视图对象
*/
BusCompanyVo getVo(BusCompany company);
/** /**
* 构建查询条件封装 * 构建查询条件封装
* *

View File

@ -1,6 +1,7 @@
package org.dromara.materials.service.impl; package org.dromara.materials.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.PhoneUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -25,6 +26,7 @@ import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -39,9 +41,6 @@ import java.util.List;
public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusCompany> public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusCompany>
implements IBusCompanyService { implements IBusCompanyService {
@Resource
private BusCompanyMapper baseMapper;
@Resource @Resource
private IBusProjectService projectService; private IBusProjectService projectService;
@ -57,7 +56,11 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
*/ */
@Override @Override
public BusCompanyVo queryById(Long id) { public BusCompanyVo queryById(Long id) {
return baseMapper.selectVoById(id); BusCompany company = this.getById(id);
if (company == null) {
throw new ServiceException("对应材料提供商不存在", HttpStatus.NOT_FOUND);
}
return this.getVo(company);
} }
/** /**
@ -83,7 +86,7 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
@Override @Override
public List<BusCompanyVo> queryList(CompanyQueryReq req) { public List<BusCompanyVo> queryList(CompanyQueryReq req) {
LambdaQueryWrapper<BusCompany> lqw = this.buildQueryWrapper(req); LambdaQueryWrapper<BusCompany> lqw = this.buildQueryWrapper(req);
return baseMapper.selectVoList(lqw); return this.list(lqw).stream().map(this::getVo).toList();
} }
/** /**
@ -98,7 +101,12 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
BusCompany company = new BusCompany(); BusCompany company = new BusCompany();
BeanUtils.copyProperties(req, company); BeanUtils.copyProperties(req, company);
// 数据校验 // 数据校验
validEntityBeforeSave(company); validEntityBeforeSave(company, true);
// 公司名不能重复
Long count = this.lambdaQuery().eq(BusCompany::getCompanyName, req.getCompanyName()).count();
if (count > 0) {
throw new ServiceException("公司名重复", HttpStatus.BAD_REQUEST);
}
// 写入数据库 // 写入数据库
boolean save = this.save(company); boolean save = this.save(company);
if (!save) { if (!save) {
@ -119,12 +127,18 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
BusCompany company = new BusCompany(); BusCompany company = new BusCompany();
BeanUtils.copyProperties(req, company); BeanUtils.copyProperties(req, company);
// 数据校验 // 数据校验
validEntityBeforeSave(company); validEntityBeforeSave(company, false);
// 判断是否存在 // 判断是否存在
BusCompany oldCompany = this.getById(company.getId()); BusCompany oldCompany = this.getById(company.getId());
if (oldCompany == null) { if (oldCompany == null) {
throw new ServiceException("修改公司失败,数据不存在", HttpStatus.NOT_FOUND); throw new ServiceException("修改公司失败,数据不存在", HttpStatus.NOT_FOUND);
} }
if (!req.getCompanyName().equals(oldCompany.getCompanyName())) {
Long count = this.lambdaQuery().eq(BusCompany::getCompanyName, oldCompany.getCompanyName()).count();
if (count > 0) {
throw new ServiceException("公司名重复", HttpStatus.BAD_REQUEST);
}
}
// 操作数据库 // 操作数据库
return this.updateById(company); return this.updateById(company);
} }
@ -132,27 +146,33 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(BusCompany entity) { private void validEntityBeforeSave(BusCompany entity, Boolean create) {
// 做一些数据校验,如唯一约束 // 做一些数据校验,如唯一约束
String companyName = entity.getCompanyName(); String companyName = entity.getCompanyName();
Long projectId = entity.getProjectId(); Long projectId = entity.getProjectId();
if (StringUtils.isBlank(companyName)) { String principal = entity.getPrincipal();
throw new ServiceException("公司名称不能为空", HttpStatus.BAD_REQUEST); String principalPhone = entity.getPrincipalPhone();
} if (create) {
// 公司名不能重复 if (StringUtils.isBlank(principal)) {
LambdaQueryWrapper<BusCompany> queryWrapper = new LambdaQueryWrapper<>(); throw new ServiceException("负责人不能为空", HttpStatus.BAD_REQUEST);
queryWrapper.eq(BusCompany::getCompanyName, companyName); }
long count = this.count(queryWrapper); if (StringUtils.isBlank(principalPhone)) {
if (count > 0) { throw new ServiceException("负责人手机号不能为空", HttpStatus.BAD_REQUEST);
throw new ServiceException("公司名重复", HttpStatus.BAD_REQUEST); }
} if (StringUtils.isBlank(companyName)) {
if (projectId == null) { throw new ServiceException("公司名称不能为空", HttpStatus.BAD_REQUEST);
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST); }
if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
}
} }
// 查询项目是否存在 // 查询项目是否存在
if (projectService.getById(projectId) == null) { if (projectId != null && projectService.getById(projectId) == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
} }
if (StringUtils.isNotBlank(principalPhone) && !PhoneUtil.isPhone(principalPhone)) {
throw new ServiceException("负责人手机号格式不正确", HttpStatus.BAD_REQUEST);
}
} }
/** /**
@ -163,6 +183,7 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
* @return 是否删除成功 * @return 是否删除成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 获取当前登录用户 // 获取当前登录用户
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
@ -184,7 +205,24 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
if (companyList.size() != ids.size()) { if (companyList.size() != ids.size()) {
throw new ServiceException("删除公司失败,数据缺失", HttpStatus.BAD_REQUEST); throw new ServiceException("删除公司失败,数据缺失", HttpStatus.BAD_REQUEST);
} }
return baseMapper.deleteByIds(ids) > 0; return this.removeBatchByIds(ids);
}
/**
* 获取封装视图对象
*
* @param company 实体对象
* @return 封装视图对象
*/
@Override
public BusCompanyVo getVo(BusCompany company) {
// 对象转封装类
BusCompanyVo companyVo = new BusCompanyVo();
if (company == null) {
return companyVo;
}
BeanUtils.copyProperties(company, companyVo);
return companyVo;
} }
/** /**
@ -203,11 +241,15 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
Long id = req.getId(); Long id = req.getId();
String companyName = req.getCompanyName(); String companyName = req.getCompanyName();
Long projectId = req.getProjectId(); Long projectId = req.getProjectId();
String principal = req.getPrincipal();
String principalPhone = req.getPrincipalPhone();
String status = req.getStatus(); String status = req.getStatus();
String remark = req.getRemark(); String remark = req.getRemark();
String qualification = req.getQualification(); String qualification = req.getQualification();
// 模糊查询 // 模糊查询
lqw.like(StringUtils.isNotBlank(companyName), BusCompany::getCompanyName, companyName); lqw.like(StringUtils.isNotBlank(companyName), BusCompany::getCompanyName, companyName);
lqw.like(StringUtils.isNotBlank(principal), BusCompany::getPrincipal, principal);
lqw.like(StringUtils.isNotBlank(principalPhone), BusCompany::getPrincipalPhone, principalPhone);
lqw.like(StringUtils.isNotBlank(qualification), BusCompany::getQualification, qualification); lqw.like(StringUtils.isNotBlank(qualification), BusCompany::getQualification, qualification);
lqw.like(StringUtils.isNotBlank(remark), BusCompany::getRemark, remark); lqw.like(StringUtils.isNotBlank(remark), BusCompany::getRemark, remark);
// 精确查询 // 精确查询

View File

@ -2,7 +2,7 @@ package org.dromara.materials.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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 jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -13,6 +13,7 @@ import org.dromara.common.core.utils.StringUtils;
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.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.machinery.domain.enums.MaterialsInventoryOutputEnum;
import org.dromara.materials.domain.BusMaterials; import org.dromara.materials.domain.BusMaterials;
import org.dromara.materials.domain.BusMaterialsInventory; import org.dromara.materials.domain.BusMaterialsInventory;
import org.dromara.materials.domain.req.materialsinventory.MaterialsInventoryCreateReq; import org.dromara.materials.domain.req.materialsinventory.MaterialsInventoryCreateReq;
@ -25,10 +26,10 @@ import org.dromara.materials.service.IBusMaterialsService;
import org.dromara.project.service.IBusProjectService; import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection; import java.util.*;
import java.util.Date; import java.util.stream.Collectors;
import java.util.List;
/** /**
* 材料出/入库Service业务层处理 * 材料出/入库Service业务层处理
@ -40,9 +41,6 @@ import java.util.List;
public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsInventoryMapper, BusMaterialsInventory> public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsInventoryMapper, BusMaterialsInventory>
implements IBusMaterialsInventoryService { implements IBusMaterialsInventoryService {
@Resource
private BusMaterialsInventoryMapper baseMapper;
@Resource @Resource
private IBusMaterialsService materialsService; private IBusMaterialsService materialsService;
@ -102,7 +100,26 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
BusMaterialsInventory materialsInventory = new BusMaterialsInventory(); BusMaterialsInventory materialsInventory = new BusMaterialsInventory();
BeanUtils.copyProperties(req, materialsInventory); BeanUtils.copyProperties(req, materialsInventory);
// 数据校验 // 数据校验
validEntityBeforeSave(materialsInventory); validEntityBeforeSave(materialsInventory, true);
// 获取最后一次库存数量
BusMaterialsInventory lastMaterialsInventory = this.getOne(Wrappers.<BusMaterialsInventory>lambdaQuery()
.eq(BusMaterialsInventory::getMaterialsId, req.getMaterialsId())
.eq(BusMaterialsInventory::getProjectId, req.getProjectId())
.orderByDesc(BusMaterialsInventory::getCreateTime)
.last("limit 1"));
if (lastMaterialsInventory != null) {
if (MaterialsInventoryOutputEnum.OUT.getValue().equals(req.getOutPut())) {
long left = lastMaterialsInventory.getResidue() - req.getNumber();
if (left < 0) {
throw new ServiceException("库存不足", HttpStatus.BAD_REQUEST);
}
materialsInventory.setResidue(left);
} else {
materialsInventory.setResidue(lastMaterialsInventory.getResidue() + req.getNumber());
}
} else {
materialsInventory.setResidue(req.getNumber());
}
// 操作数据库 // 操作数据库
boolean save = this.save(materialsInventory); boolean save = this.save(materialsInventory);
if (!save) { if (!save) {
@ -123,7 +140,7 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
BusMaterialsInventory materialsInventory = new BusMaterialsInventory(); BusMaterialsInventory materialsInventory = new BusMaterialsInventory();
BeanUtils.copyProperties(req, materialsInventory); BeanUtils.copyProperties(req, materialsInventory);
// 数据校验 // 数据校验
validEntityBeforeSave(materialsInventory); validEntityBeforeSave(materialsInventory, false);
// 判断是否存在 // 判断是否存在
BusMaterialsInventory oldBusMaterialsInventory = this.getById(materialsInventory.getId()); BusMaterialsInventory oldBusMaterialsInventory = this.getById(materialsInventory.getId());
if (oldBusMaterialsInventory == null) { if (oldBusMaterialsInventory == null) {
@ -136,25 +153,31 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(BusMaterialsInventory entity) { private void validEntityBeforeSave(BusMaterialsInventory entity, Boolean create) {
Long materialsId = entity.getMaterialsId(); Long materialsId = entity.getMaterialsId();
Long projectId = entity.getProjectId(); Long projectId = entity.getProjectId();
String outPut = entity.getOutPut(); String outPut = entity.getOutPut();
if (materialsId == null) { Long number = entity.getNumber();
throw new ServiceException("材料信息 id 不能为空", HttpStatus.BAD_REQUEST); if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
}
if (create) {
if (number == null) {
throw new ServiceException("出/入库数量不能为空", HttpStatus.BAD_REQUEST);
}
if (materialsId == null) {
throw new ServiceException("材料信息 id 不能为空", HttpStatus.BAD_REQUEST);
}
if (StringUtils.isEmpty(outPut)) {
throw new ServiceException("出入库状态不能为空", HttpStatus.BAD_REQUEST);
}
} }
if (materialsService.getById(materialsId) == null) { if (materialsService.getById(materialsId) == null) {
throw new ServiceException("对应材料信息不存在", HttpStatus.BAD_REQUEST); throw new ServiceException("对应材料信息不存在", HttpStatus.BAD_REQUEST);
} }
if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
}
if (projectService.getById(projectId) == null) { if (projectService.getById(projectId) == null) {
throw new ServiceException("对应项目不存在", HttpStatus.BAD_REQUEST); throw new ServiceException("对应项目不存在", HttpStatus.BAD_REQUEST);
} }
if (StringUtils.isEmpty(outPut)) {
throw new ServiceException("出入库状态不能为空", HttpStatus.BAD_REQUEST);
}
} }
/** /**
@ -165,6 +188,7 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
* @return 是否删除成功 * @return 是否删除成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 获取当前登录用户 // 获取当前登录用户
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
@ -180,7 +204,7 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
if (materialsInventoryList.size() != ids.size()) { if (materialsInventoryList.size() != ids.size()) {
throw new ServiceException("删除材料出/入库失败,数据缺失", HttpStatus.BAD_REQUEST); throw new ServiceException("删除材料出/入库失败,数据缺失", HttpStatus.BAD_REQUEST);
} }
return baseMapper.deleteByIds(ids) > 0; return this.removeBatchByIds(ids);
} }
/** /**
@ -197,10 +221,10 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
return materialsInventoryVo; return materialsInventoryVo;
} }
BeanUtils.copyProperties(materialsInventory, materialsInventoryVo); BeanUtils.copyProperties(materialsInventory, materialsInventoryVo);
// 关联查询项目信息 // 关联查询材料信息
Long materialsId = materialsInventory.getMaterialsId(); Long materialsId = materialsInventory.getMaterialsId();
if (materialsId != null) { if (materialsId != null) {
materialsInventoryVo.setMaterialsVo(materialsService.queryById(materialsId)); materialsInventoryVo.setMaterialsName(materialsService.queryById(materialsId).getMaterialsName());
} }
return materialsInventoryVo; return materialsInventoryVo;
} }
@ -233,9 +257,9 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
String remark = req.getRemark(); String remark = req.getRemark();
// 联表查询 // 联表查询
if (StringUtils.isNotBlank(materialsName)) { if (StringUtils.isNotBlank(materialsName)) {
QueryWrapper<BusMaterials> materialsQueryWrapper = new QueryWrapper<>(); LambdaQueryWrapper<BusMaterials> materialsQueryWrapper = Wrappers.lambdaQuery(BusMaterials.class)
materialsQueryWrapper.select("id"); .select(BusMaterials::getId)
materialsQueryWrapper.like("materials_name", materialsName); .like(BusMaterials::getMaterialsName, materialsName);
List<Long> materialsIdList = materialsService.listObjs(materialsQueryWrapper, obj -> (Long) obj); List<Long> materialsIdList = materialsService.listObjs(materialsQueryWrapper, obj -> (Long) obj);
lqw.in(BusMaterialsInventory::getMaterialsId, materialsIdList); lqw.in(BusMaterialsInventory::getMaterialsId, materialsIdList);
} }
@ -253,6 +277,8 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
lqw.eq(ObjectUtils.isNotEmpty(outPutTime), BusMaterialsInventory::getOutPutTime, outPutTime); lqw.eq(ObjectUtils.isNotEmpty(outPutTime), BusMaterialsInventory::getOutPutTime, outPutTime);
lqw.eq(ObjectUtils.isNotEmpty(residue), BusMaterialsInventory::getResidue, residue); lqw.eq(ObjectUtils.isNotEmpty(residue), BusMaterialsInventory::getResidue, residue);
lqw.eq(ObjectUtils.isNotEmpty(outPut), BusMaterialsInventory::getOutPut, outPut); lqw.eq(ObjectUtils.isNotEmpty(outPut), BusMaterialsInventory::getOutPut, outPut);
// 排序
lqw.orderByDesc(BusMaterialsInventory::getCreateTime);
return lqw; return lqw;
} }
@ -272,8 +298,23 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
if (CollUtil.isEmpty(materialsInventoryList)) { if (CollUtil.isEmpty(materialsInventoryList)) {
return materialsInventoryVoPage; return materialsInventoryVoPage;
} }
// 获取材料id列表
Set<Long> materialsIdList = materialsInventoryList.stream().map(BusMaterialsInventory::getMaterialsId).collect(Collectors.toSet());
Map<Long, List<BusMaterials>> materialsIdBusMaterialsMap = materialsService.listByIds(materialsIdList).stream()
.collect(Collectors.groupingBy(BusMaterials::getId));
// 对象列表 => 封装对象列表 // 对象列表 => 封装对象列表
List<BusMaterialsInventoryVo> materialsInventoryVoList = materialsInventoryList.stream().map(this::getVo).toList(); List<BusMaterialsInventoryVo> materialsInventoryVoList = materialsInventoryList.stream().map(materialsInventory -> {
BusMaterialsInventoryVo materialsInventoryVo = new BusMaterialsInventoryVo();
BeanUtils.copyProperties(materialsInventory, materialsInventoryVo);
// 关联查询材料信息
Long materialsId = materialsInventory.getMaterialsId();
String materialsName = null;
if (materialsIdBusMaterialsMap.containsKey(materialsId)) {
materialsName = materialsIdBusMaterialsMap.get(materialsId).get(0).getMaterialsName();
}
materialsInventoryVo.setMaterialsName(materialsName);
return materialsInventoryVo;
}).toList();
materialsInventoryVoPage.setRecords(materialsInventoryVoList); materialsInventoryVoPage.setRecords(materialsInventoryVoList);
return materialsInventoryVoPage; return materialsInventoryVoPage;
} }

View File

@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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 jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.ObjectUtils;
@ -43,14 +42,10 @@ import java.util.Map;
* @author lcj * @author lcj
* @date 2025-03-06 * @date 2025-03-06
*/ */
@RequiredArgsConstructor
@Service @Service
public class BusMaterialsServiceImpl extends ServiceImpl<BusMaterialsMapper, BusMaterials> public class BusMaterialsServiceImpl extends ServiceImpl<BusMaterialsMapper, BusMaterials>
implements IBusMaterialsService { implements IBusMaterialsService {
@Resource
private BusMaterialsMapper baseMapper;
@Resource @Resource
private IBusCompanyService companyService; private IBusCompanyService companyService;

View File

@ -1,6 +1,8 @@
package org.dromara.project.service.impl; package org.dromara.project.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.PhoneUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -485,6 +487,8 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
Long contractorId = entity.getContractorId(); Long contractorId = entity.getContractorId();
String typeOfWork = entity.getTypeOfWork(); String typeOfWork = entity.getTypeOfWork();
String wageMeasureUnit = entity.getWageMeasureUnit(); String wageMeasureUnit = entity.getWageMeasureUnit();
String phone = entity.getPhone();
String sfzNumber = entity.getSfzNumber();
if (projectId == null) { if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST); throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
} }
@ -522,6 +526,12 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
throw new ServiceException("当前工种没有定义工资标准,请前往工种薪水设置进行设置后再选择", HttpStatus.BAD_REQUEST); throw new ServiceException("当前工种没有定义工资标准,请前往工种薪水设置进行设置后再选择", HttpStatus.BAD_REQUEST);
} }
} }
if (StringUtils.isNotEmpty(phone) && !PhoneUtil.isPhone(phone)) {
throw new ServiceException("手机号码格式不正确", HttpStatus.BAD_REQUEST);
}
if (StringUtils.isNotEmpty(sfzNumber) && !IdcardUtil.isValidCard(sfzNumber)) {
throw new ServiceException("身份证号码格式不正确", HttpStatus.BAD_REQUEST);
}
} }
/** /**

View File

@ -1,6 +1,7 @@
package org.dromara.project.service.impl; package org.dromara.project.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -109,6 +110,10 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
contractor.setFiles(fileMapStr); contractor.setFiles(fileMapStr);
// 数据校验 // 数据校验
validEntityBeforeSave(contractor, true); validEntityBeforeSave(contractor, true);
Long count = this.lambdaQuery().eq(BusContractor::getName, req.getName()).count();
if (count > 0) {
throw new ServiceException("分包单位名称重复", HttpStatus.BAD_REQUEST);
}
// 操作数据库 // 操作数据库
boolean save = this.save(contractor); boolean save = this.save(contractor);
if (!save) { if (!save) {
@ -139,6 +144,13 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
if (oldContractor == null) { if (oldContractor == null) {
throw new ServiceException("修改施工人员失败,数据不存在", HttpStatus.NOT_FOUND); throw new ServiceException("修改施工人员失败,数据不存在", HttpStatus.NOT_FOUND);
} }
// 判断名称是否重复
if (!oldContractor.getName().equals(req.getName())) {
Long count = this.lambdaQuery().eq(BusContractor::getName, req.getName()).count();
if (count > 0) {
throw new ServiceException("分包单位名称重复", HttpStatus.BAD_REQUEST);
}
}
// 操作数据库 // 操作数据库
return this.updateById(contractor); return this.updateById(contractor);
} }
@ -146,17 +158,28 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(BusContractor entity, Boolean add) { private void validEntityBeforeSave(BusContractor entity, Boolean create) {
// 做一些数据校验,如唯一约束 // 做一些数据校验,如唯一约束
if (add) { String name = entity.getName();
String name = entity.getName(); String principal = entity.getPrincipal();
String principalPhone = entity.getPrincipalPhone();
String custodianPhone = entity.getCustodianPhone();
if (create) {
if (StringUtils.isBlank(name)) { if (StringUtils.isBlank(name)) {
throw new ServiceException("分包单位名称不能为空", HttpStatus.BAD_REQUEST); throw new ServiceException("分包单位名称不能为空", HttpStatus.BAD_REQUEST);
} }
String principal = entity.getPrincipal();
if (StringUtils.isBlank(principal)) { if (StringUtils.isBlank(principal)) {
throw new ServiceException("分包单位负责人不能为空", HttpStatus.BAD_REQUEST); throw new ServiceException("分包单位负责人不能为空", HttpStatus.BAD_REQUEST);
} }
if (StringUtils.isBlank(principalPhone)) {
throw new ServiceException("分包单位负责人手机号不能为空", HttpStatus.BAD_REQUEST);
}
}
if (StringUtils.isNotBlank(principalPhone) && !PhoneUtil.isPhone(principalPhone)) {
throw new ServiceException("负责人手机号格式不正确", HttpStatus.BAD_REQUEST);
}
if (StringUtils.isNotBlank(custodianPhone) && !PhoneUtil.isPhone(custodianPhone)) {
throw new ServiceException("管理人手机号格式不正确", HttpStatus.BAD_REQUEST);
} }
} }

View File

@ -1,6 +1,7 @@
package org.dromara.project.service.impl; package org.dromara.project.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.PhoneUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -150,6 +151,10 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
project.setPunchRange(punchRange); project.setPunchRange(punchRange);
// 数据校验 // 数据校验
validEntityBeforeSave(project, true); validEntityBeforeSave(project, true);
Long count = this.lambdaQuery().eq(BusProject::getProjectName, req.getProjectName()).count();
if (count > 0) {
throw new ServiceException("项目名称已存在", HttpStatus.BAD_REQUEST);
}
// 写入数据库 // 写入数据库
boolean save = this.save(project); boolean save = this.save(project);
if (!save) { if (!save) {
@ -200,6 +205,13 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
if (oldProject == null) { if (oldProject == null) {
throw new ServiceException("修改项目失败,数据不存在", HttpStatus.NOT_FOUND); throw new ServiceException("修改项目失败,数据不存在", HttpStatus.NOT_FOUND);
} }
// 判断名称是否重复
if (!req.getProjectName().equals(oldProject.getProjectName())) {
Long count = this.lambdaQuery().eq(BusProject::getProjectName, req.getProjectName()).count();
if (count > 0) {
throw new ServiceException("项目名称重复", HttpStatus.BAD_REQUEST);
}
}
// 操作数据库 // 操作数据库
return this.updateById(project); return this.updateById(project);
} }
@ -210,11 +222,18 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
private void validEntityBeforeSave(BusProject entity, Boolean create) { private void validEntityBeforeSave(BusProject entity, Boolean create) {
// TODO 做一些数据校验,如唯一约束 // TODO 做一些数据校验,如唯一约束
String projectName = entity.getProjectName(); String projectName = entity.getProjectName();
String principalPhone = entity.getPrincipalPhone();
// 新增项目参数验证 // 新增项目参数验证
if (create) { if (create) {
if (StringUtils.isBlank(projectName)) { if (StringUtils.isBlank(projectName)) {
throw new ServiceException("项目名称不能为空", HttpStatus.BAD_REQUEST); throw new ServiceException("项目名称不能为空", HttpStatus.BAD_REQUEST);
} }
if (StringUtils.isBlank(principalPhone)) {
throw new ServiceException("负责人电话不能为空", HttpStatus.BAD_REQUEST);
}
}
if (StringUtils.isNotBlank(principalPhone) && !PhoneUtil.isPhone(principalPhone)) {
throw new ServiceException("负责人手机号格式不正确", HttpStatus.BAD_REQUEST);
} }
} }