package com.ruoyi.quality.controller;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.framework.web.domain.AjaxResult;
|
import com.ruoyi.project.system.domain.SysUser;
|
import com.ruoyi.project.system.mapper.SysUserMapper;
|
import com.ruoyi.project.system.service.ISysUserService;
|
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
|
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
|
import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl;
|
import com.ruoyi.quality.dto.QualityInspectDto;
|
import com.ruoyi.quality.pojo.QualityInspect;
|
import com.ruoyi.quality.pojo.QualityInspectFile;
|
import com.ruoyi.quality.pojo.QualityInspectParam;
|
import com.ruoyi.quality.pojo.QualityUnqualified;
|
import com.ruoyi.quality.service.IQualityInspectFileService;
|
import com.ruoyi.quality.service.IQualityInspectParamService;
|
import com.ruoyi.quality.service.IQualityInspectService;
|
import com.ruoyi.quality.service.IQualityUnqualifiedService;
|
import com.ruoyi.quality.util.QualityInspectionValueValidator;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* 原材料检验/过程检验/出厂检验
|
*/
|
@RestController
|
@RequestMapping("/quality/qualityInspect")
|
public class QualityInspectController {
|
|
@Resource
|
private IQualityInspectService qualityInspectService;
|
|
@Resource
|
private IQualityInspectParamService qualityInspectParamService;
|
|
@Resource
|
private IQualityInspectFileService qualityInspectFileService;
|
@Autowired
|
private ProcurementRecordService procurementRecordService;
|
|
@Resource
|
private ISysUserService sysUserService;
|
|
@Resource
|
private SysUserMapper sysUserMapper;
|
|
|
/**
|
* 新增
|
* @param qualityInspectDto
|
* @return
|
*/
|
@PostMapping("/add")
|
public AjaxResult add(@RequestBody QualityInspectDto qualityInspectDto) {
|
String validationMessage = validateInspect(qualityInspectDto, false);
|
if (validationMessage != null) {
|
return AjaxResult.error(validationMessage);
|
}
|
return AjaxResult.success(qualityInspectService.add(qualityInspectDto));
|
}
|
|
/**
|
* 删除
|
* @param ids
|
* @return
|
*/
|
@DeleteMapping("/del")
|
public AjaxResult delQualityInspect(@RequestBody List<Integer> ids) {
|
if(CollectionUtils.isEmpty(ids)){
|
return AjaxResult.error("请选择至少一条数据");
|
}
|
//删除检验参数
|
qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery()
|
.in(QualityInspectParam::getInspectId,ids));
|
//删除检验附件
|
qualityInspectFileService.remove(Wrappers.<QualityInspectFile>lambdaQuery()
|
.in(QualityInspectFile::getInspectId,ids));
|
//删除入库记录
|
procurementRecordService.remove(Wrappers.<ProcurementRecordStorage>lambdaQuery().in(ProcurementRecordStorage::getQualityInspectId,ids));
|
//删除检验单
|
return AjaxResult.success(qualityInspectService.removeBatchByIds(ids));
|
}
|
|
/**
|
* 详情
|
* @param id
|
* @return
|
*/
|
@GetMapping("/{id}")
|
public AjaxResult QualityInspectDetail(@PathVariable("id") Integer id) {
|
return AjaxResult.success(qualityInspectService.getDetailById(id));
|
}
|
|
/**
|
* 修改
|
* @param qualityInspectDto
|
* @return
|
*/
|
@PostMapping("/update")
|
public AjaxResult update(@RequestBody QualityInspectDto qualityInspectDto) {
|
String validationMessage = validateInspect(qualityInspectDto, true);
|
if (validationMessage != null) {
|
return AjaxResult.error(validationMessage);
|
}
|
QualityInspect stored = qualityInspectService.getById(qualityInspectDto.getId());
|
if (stored == null) {
|
return AjaxResult.error("检验记录不存在");
|
}
|
if (Integer.valueOf(1).equals(stored.getInspectState())) {
|
return AjaxResult.error("已提交的检验记录不能修改");
|
}
|
return AjaxResult.success(qualityInspectService.updateQualityInspect(qualityInspectDto));
|
}
|
|
/** 仅分配检验员,避免触发整张检验单的必填校验。 */
|
@PostMapping("/assignInspector")
|
public AjaxResult assignInspector(@RequestBody QualityInspect inspect) {
|
if (inspect == null || inspect.getId() == null) {
|
return AjaxResult.error("检验记录ID不能为空");
|
}
|
if (inspect.getCheckUserId() == null) {
|
return AjaxResult.error("请选择检验员");
|
}
|
QualityInspect stored = qualityInspectService.getById(inspect.getId());
|
if (stored == null) {
|
return AjaxResult.error("检验记录不存在");
|
}
|
if (Integer.valueOf(1).equals(stored.getInspectState())) {
|
return AjaxResult.error("已提交的检验记录不能重新分配检验员");
|
}
|
SysUser inspector = sysUserService.selectUserById(inspect.getCheckUserId());
|
if (inspector == null || "2".equals(inspector.getDelFlag())) {
|
return AjaxResult.error("所选用户不存在或已删除");
|
}
|
if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())
|
&& !Objects.equals(SecurityUtils.getLoginUser().getTenantId(), inspector.getTenantId())) {
|
return AjaxResult.error("只能分配给当前公司用户");
|
}
|
if (!"0".equals(inspector.getStatus())) {
|
return AjaxResult.error("所选用户已停用");
|
}
|
QualityInspect update = new QualityInspect();
|
update.setId(inspect.getId());
|
update.setCheckUserId(inspector.getUserId());
|
update.setCheckName(StringUtils.defaultIfBlank(inspector.getNickName(), inspector.getUserName()));
|
return AjaxResult.success(qualityInspectService.updateById(update));
|
}
|
|
/** 仅返回当前租户中正常、未删除的系统用户,供质检员分配使用。 */
|
@GetMapping("/inspectorCandidates")
|
public AjaxResult inspectorCandidates() {
|
Long tenantId = SecurityUtils.isAdmin(SecurityUtils.getUserId())
|
? null : SecurityUtils.getLoginUser().getTenantId();
|
return AjaxResult.success(sysUserMapper.selectActiveUsers(tenantId));
|
}
|
|
/**
|
*分页查询
|
* @param page
|
* @param qualityInspect
|
* @return
|
*/
|
@GetMapping("/listPage")
|
public AjaxResult qualityInspectListPage(Page page, QualityInspect qualityInspect) {
|
return AjaxResult.success(qualityInspectService.qualityInspectListPage(page, qualityInspect));
|
}
|
|
/**
|
* 导出
|
* @param response
|
* @param qualityInspect
|
*/
|
@PostMapping("/export")
|
public void qualityInspectExport(HttpServletResponse response,QualityInspect qualityInspect) {
|
qualityInspectService.qualityInspectExport(response, qualityInspect);
|
}
|
|
/**
|
* 提交
|
* @param qualityInspect
|
* @return
|
*/
|
@PostMapping("/submit")
|
public AjaxResult submit(@RequestBody QualityInspect qualityInspect) {
|
return AjaxResult.success(qualityInspectService.submit(qualityInspect));
|
}
|
|
/**
|
* 下载
|
* @param response
|
* @param qualityInspect
|
*/
|
@PostMapping("/down")
|
public void down(HttpServletResponse response,@RequestBody QualityInspect qualityInspect) {
|
qualityInspectService.down(response, qualityInspect);
|
}
|
|
private String validateInspect(QualityInspectDto inspect, boolean requireId) {
|
if (inspect == null) {
|
return "检验数据不能为空";
|
}
|
if (requireId && inspect.getId() == null) {
|
return "检验记录ID不能为空";
|
}
|
if (inspect.getInspectType() == null || inspect.getInspectType() < 0 || inspect.getInspectType() > 2) {
|
return "检验类别不正确";
|
}
|
if (inspect.getProductId() == null) {
|
return "请选择产品";
|
}
|
if (inspect.getCheckTime() == null) {
|
return "请选择检测日期";
|
}
|
if (inspect.getQuantity() == null || inspect.getQuantity().signum() <= 0) {
|
return "检验数量必须大于0";
|
}
|
if (!"合格".equals(inspect.getCheckResult()) && !"不合格".equals(inspect.getCheckResult())) {
|
return "请选择有效的检测结果";
|
}
|
if (inspect.getInspectType() == 1 && StringUtils.isBlank(inspect.getProcess())) {
|
return "过程检验必须选择工序";
|
}
|
if (CollectionUtils.isEmpty(inspect.getQualityInspectParams())) {
|
return "当前产品未配置检验指标,请先维护指标";
|
}
|
for (QualityInspectParam parameter : inspect.getQualityInspectParams()) {
|
if (StringUtils.isBlank(parameter.getParameterItem())) {
|
return "检验项目不能为空";
|
}
|
if (StringUtils.isBlank(parameter.getTestValue())) {
|
return "请填写“" + parameter.getParameterItem() + "”的检验值";
|
}
|
}
|
if ("合格".equals(inspect.getCheckResult())) {
|
String valueMessage = QualityInspectionValueValidator.validateQualified(inspect.getQualityInspectParams());
|
if (valueMessage != null) {
|
return valueMessage;
|
}
|
}
|
return null;
|
}
|
}
|