feat:样品库接口调整

This commit is contained in:
FCL
2025-11-17 16:57:37 +08:00
parent 24a6e95f26
commit 12cd5a4d94
17 changed files with 139 additions and 13 deletions

View File

@@ -87,6 +87,7 @@ public interface ErrorCodeConstants {
ErrorCode CONFIG_PERMISSION_NOT_EXISTS = new ErrorCode(1_032_050_000, "权限配置不存在");
ErrorCode CONFIG_PERMISSION_DUPLICATE = new ErrorCode(1_032_050_000, "权限配置数据有误");
ErrorCode CONFIG_WAREHOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1_032_050_000, "存放位置不存在");
ErrorCode CONFIG_WAREHOUSE_LOCATION_CODE_DUPLICATE = new ErrorCode(1_032_050_000, "库位编码重复,请检查库位数据,或联系管理员处理!");
/*=================================bus 检验业务 1_032_100_000 ~ 1_032_149_999==================================*/
ErrorCode BUSINESS_SAMPLE_ENTRUST_REGISTRATION_NOT_EXISTS = new ErrorCode(1_032_100_000, "委检登记业务不存在");

View File

@@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSONObject;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchPageReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchSaveReqVO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.bus.service.BusinessSubSampleService;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -30,6 +33,7 @@ import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.BUSINESS_SUB_SAMPLE_NOT_EXISTS;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleDispatchDO;
import com.zt.plat.module.qms.business.bus.service.BusinessSampleDispatchService;
@@ -41,8 +45,8 @@ import com.zt.plat.module.qms.business.bus.service.BusinessSampleDispatchService
public class BusinessSampleDispatchController implements BusinessControllerMarker {
@Resource
private BusinessSampleDispatchService businessSampleDispatchService;
@Resource private BusinessSampleDispatchService businessSampleDispatchService;
@Resource private BusinessSubSampleService businessSubSampleService;
@PostMapping("/createTempData")
@Operation(summary = "创建临时数据")
@@ -67,6 +71,32 @@ public class BusinessSampleDispatchController implements BusinessControllerMarke
return success(true);
}
@PutMapping("/addBySampleCode")
@Operation(summary = "增加或移除样品")
public CommonResult<Boolean> addBySampleCode(HttpServletRequest request) {
String id = request.getParameter("id");
String sampleCode = request.getParameter("sampleCode");
BusinessSubSampleDO businessSubSampleDO = businessSubSampleService.getBySampleCode(sampleCode);
if(businessSubSampleDO == null)
return CommonResult.error(BUSINESS_SUB_SAMPLE_NOT_EXISTS.getCode(), "未查询到此样品!");
//判断样品状态
String returnStatus = businessSubSampleDO.getReturnStatus();
if(!QmsCommonConstant.COMPLETED.equals(returnStatus)){
return CommonResult.error(BUSINESS_SUB_SAMPLE_NOT_EXISTS.getCode(), "样品状态为:"+returnStatus+",不能调拨!");
}
String dispatchStatus = businessSubSampleDO.getDispatchStatus();
if("1".equals(dispatchStatus)){
return CommonResult.error(BUSINESS_SUB_SAMPLE_NOT_EXISTS.getCode(), "样品已被调拨:请归还后再调拨!");
}
List<Long> sampleIds = new ArrayList<>();
sampleIds.add(businessSubSampleDO.getId());
BusinessSampleDispatchSaveReqVO updateReqVO = new BusinessSampleDispatchSaveReqVO();
updateReqVO.setId(Long.valueOf(id));
updateReqVO.setAddSubSampleIds(sampleIds);
businessSampleDispatchService.addOrRemoveSample(updateReqVO);
return success(true);
}
@PostMapping("/createProcessInstance")
@Operation(summary = "发起流程")
public CommonResult<BusinessSampleDispatchRespVO> createProcessInstance(@Valid @RequestBody BusinessSampleDispatchSaveReqVO vo) {

View File

@@ -1,9 +1,10 @@
package com.zt.plat.module.qms.business.bus.controller.admin;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchDetailExtendRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchDetailPageReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchDetailRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchDetailSaveReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.bus.service.BusinessSubSampleService;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -30,6 +31,8 @@ import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.BUSINESS_SAMPLE_DISPATCH_DETAIL_NOT_EXISTS;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.BUSINESS_SUB_SAMPLE_NOT_EXISTS;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleDispatchDetailDO;
import com.zt.plat.module.qms.business.bus.service.BusinessSampleDispatchDetailService;
@@ -41,8 +44,28 @@ import com.zt.plat.module.qms.business.bus.service.BusinessSampleDispatchDetailS
public class BusinessSampleDispatchDetailController implements BusinessControllerMarker {
@Resource
private BusinessSampleDispatchDetailService businessSampleDispatchDetailService;
@Resource private BusinessSampleDispatchDetailService businessSampleDispatchDetailService;
@Resource private BusinessSubSampleService businessSubSampleService;
@GetMapping("/searchBySampleCode")
@Operation(summary = "扫码查询待归还样品")
public CommonResult<BusinessSampleDispatchDetailExtendRespVO> searchBySampleCode(HttpServletRequest request) {
String sampleCode = request.getParameter("sampleCode");
if(ObjectUtils.isEmpty(sampleCode))
return CommonResult.error(BUSINESS_SAMPLE_DISPATCH_DETAIL_NOT_EXISTS.getCode(), "请输入样品编号!");
BusinessSampleDispatchDetailPageReqVO reqVO = new BusinessSampleDispatchDetailPageReqVO();
reqVO.setSampleCode(sampleCode);
reqVO.setBorrowStatus("1");
reqVO.setGivebackStatus("0");
PageResult<BusinessSampleDispatchDetailExtendRespVO> pageResult = businessSampleDispatchDetailService.getBusinessSampleDispatchDetailPage(reqVO);
if(pageResult.getTotal() == 0)
return CommonResult.error(BUSINESS_SAMPLE_DISPATCH_DETAIL_NOT_EXISTS.getCode(), "未查询到此样品!");
if(pageResult.getList().size() > 1)
return CommonResult.error(BUSINESS_SAMPLE_DISPATCH_DETAIL_NOT_EXISTS.getCode(), "样品编号重复,请联系管理员检查数据!");
BusinessSampleDispatchDetailExtendRespVO businessSampleDispatchDetailExtendRespVO = pageResult.getList().get(0);
return success(businessSampleDispatchDetailExtendRespVO);
}
@PostMapping("/create")
@Operation(summary = "创建样品调拨明细")

View File

@@ -24,6 +24,9 @@ public class BusinessSampleDispatchDetailExtendRespVO extends BusinessSampleDisp
//调拨状态
private String dispatchStatus;
//归库状态
private String returnStatus;
//库位编码
private String warehouseLocationCode;

View File

@@ -66,5 +66,9 @@ public class BusinessSampleDispatchDetailPageReqVO extends PageParam {
@Schema(description = "idsList")
private List<Long> idList;
@Schema(description = "调拨状态")
private String dispatchStatus;
@Schema(description = "归库状态")
private String returnStatus;
}

View File

@@ -34,6 +34,9 @@ public class BusinessSampleDispatchPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] applyTime;
@Schema(description = "申请原因")
private String applyContent;
@Schema(description = "库管员")
private String warehouseUser;

View File

@@ -43,6 +43,10 @@ public class BusinessSampleDispatchRespVO {
@ExcelProperty("申请时间")
private LocalDateTime applyTime;
@Schema(description = "申请原因")
@ExcelProperty("申请原因")
private String applyContent;
@Schema(description = "库管员")
@ExcelProperty("库管员")
private String warehouseUser;

View File

@@ -34,6 +34,9 @@ public class BusinessSampleDispatchSaveReqVO {
@Schema(description = "申请时间")
private LocalDateTime applyTime;
@Schema(description = "申请原因")
private String applyContent;
@Schema(description = "库管员")
private String warehouseUser;

View File

@@ -23,4 +23,10 @@ public class BusinessSubSampleExtendRespVO extends BusinessSubSampleRespVO {
@Schema(description = "样品标签打印模版")
private String printTemplate;
@Schema(description = "库位编码")
private String warehouseLocationCode;
@Schema(description = "仓库名称")
private String warehouseName;
}

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -99,6 +100,9 @@ public class BusinessSubSamplePageReqVO extends PageParam {
@Schema(description = "归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁", example = "2")
private String returnStatus;
@Schema(description = "调拨状态")
private String dispatchStatus;
@Schema(description = "打印次数", example = "32651")
private Integer returnCodePrintCount;
@@ -128,4 +132,8 @@ public class BusinessSubSamplePageReqVO extends PageParam {
@Schema(description = "备注")
private String remark;
//扩展字段
@Schema(description = "库位编码")
private String warehouseLocationCode;
}

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@@ -123,6 +124,7 @@ public class BusinessSubSampleRespVO {
@Schema(description = "归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁", example = "2")
@ExcelProperty("归库状态,【字典】【jy_sample_return_status】待归库、已归库、已调拨、已下架、待销毁、已销毁")
@Dict(dicCode = "jy_sample_return_status")
private String returnStatus;
@Schema(description = "调拨状态")

View File

@@ -66,6 +66,13 @@ public class BusinessSampleDispatchDO extends BusinessBaseDO {
*/
@TableField("APL_TM")
private LocalDateTime applyTime;
/**
* 申请原因
*/
@TableField("APL_CNTT")
private LocalDateTime applyContent;
/**
* 库管员
*/

View File

@@ -44,6 +44,7 @@ public interface BusinessSampleDispatchDetailMapper extends BaseMapperX<Business
.inIfPresent(BusinessSampleDispatchDetailDO::getId, reqVO.getIdList())
.eqIfPresent(BusinessSampleDispatchDetailDO::getParentId, reqVO.getParentId())
.eqIfPresent(BusinessSampleDispatchDetailDO::getBusinessSubSampleId, reqVO.getBusinessSubSampleId())
.eqIfPresent(BusinessSubSampleDO::getSampleCode, reqVO.getSampleCode())
.eqIfPresent(BusinessSampleDispatchDetailDO::getBorrowUser, reqVO.getBorrowUser())
.eqIfPresent(BusinessSampleDispatchDetailDO::getBorrowUserId, reqVO.getBorrowUserId())
.betweenIfPresent(BusinessSampleDispatchDetailDO::getBorrowTime, reqVO.getBorrowTime())

View File

@@ -4,14 +4,18 @@ import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSampleDispatchDetailExtendRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubSampleExtendRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubSamplePageReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubSampleReqVO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigWarehouseLocationDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigWarehouseLocationParDO;
import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.enums.QmsWarehouseLocationConstant;
import jakarta.validation.Valid;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
@@ -29,10 +33,18 @@ public interface BusinessSubSampleMapper extends BaseMapperX<BusinessSubSampleDO
.selectSub(BusinessAssayTaskDataDO.class, s -> s.selectCount(BusinessAssayTaskDataDO::getId).eq(BusinessAssayTaskDataDO::getBusinessSubSampleId, BusinessSubSampleDO::getId), BusinessSubSampleExtendRespVO::getAssayTaskCount)
.leftJoin(ConfigSubSampleDO.class, ConfigSubSampleDO::getId, BusinessSubSampleDO::getConfigSubSampleId)
.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, BusinessSubSampleDO::getDictionaryBusinessId)
//库位
.leftJoin(ConfigWarehouseLocationDO.class, ConfigWarehouseLocationDO::getId, BusinessSubSampleDO::getConfigWarehouseLocationInfomationId, w->{
w.eq(ConfigWarehouseLocationDO::getWarehouseType, QmsWarehouseLocationConstant.WAREHOUSE_TYPE_SAMPLE);
})
//仓库
.leftJoin(ConfigWarehouseLocationParDO.class, ConfigWarehouseLocationParDO::getId, ConfigWarehouseLocationDO::getParentId)
.selectAll(BusinessSubSampleDO.class)
.selectAs(DictionaryBusinessDO::getName, BusinessSubSampleExtendRespVO::getDictionaryBusinessName)
.selectAs(ConfigSubSampleDO::getIsPrint, BusinessSubSampleExtendRespVO::getIsPrint)
.selectAs(ConfigSubSampleDO::getPrintTemplate, BusinessSubSampleExtendRespVO::getPrintTemplate)
.selectAs(ConfigWarehouseLocationDO::getCode, BusinessSubSampleExtendRespVO::getWarehouseLocationCode)
.selectAs(ConfigWarehouseLocationParDO::getName, BusinessSubSampleExtendRespVO::getWarehouseName)
.eqIfPresent(BusinessSubSampleDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId())
.eqIfPresent(BusinessSubSampleDO::getBusinessSubParentSampleId, reqVO.getBusinessSubParentSampleId())
.eqIfPresent(BusinessSubSampleDO::getConfigSubSampleId, reqVO.getConfigSubSampleId())
@@ -60,6 +72,7 @@ public interface BusinessSubSampleMapper extends BaseMapperX<BusinessSubSampleDO
.betweenIfPresent(BusinessSubSampleDO::getReportTime, reqVO.getReportTime())
.betweenIfPresent(BusinessSubSampleDO::getReturnTime, reqVO.getReturnTime())
.eqIfPresent(BusinessSubSampleDO::getReturnStatus, reqVO.getReturnStatus())
.eqIfPresent(BusinessSubSampleDO::getDispatchStatus, reqVO.getDispatchStatus())
.eqIfPresent(BusinessSubSampleDO::getReturnCodePrintCount, reqVO.getReturnCodePrintCount())
.betweenIfPresent(BusinessSubSampleDO::getPrintLastTime, reqVO.getPrintLastTime())
.eqIfPresent(BusinessSubSampleDO::getUpSampleRecordId, reqVO.getUpSampleRecordId())
@@ -69,6 +82,7 @@ public interface BusinessSubSampleMapper extends BaseMapperX<BusinessSubSampleDO
.eqIfPresent(BusinessSubSampleDO::getUpdateCount, reqVO.getUpdateCount())
.eqIfPresent(BusinessSubSampleDO::getRemark, reqVO.getRemark())
.eqIfPresent(BusinessSubSampleDO::getUpSampleRecordId, reqVO.getUpSampleRecordId())
.likeIfPresent(ConfigWarehouseLocationDO::getCode, reqVO.getWarehouseLocationCode())
.orderByDesc(BusinessSubSampleDO::getSampleFlowNodeTime).orderByAsc(BusinessSubSampleDO::getSampleCode));
}
@@ -108,6 +122,7 @@ public interface BusinessSubSampleMapper extends BaseMapperX<BusinessSubSampleDO
.betweenIfPresent(BusinessSubSampleDO::getReportTime, reqVO.getReportTime())
.betweenIfPresent(BusinessSubSampleDO::getReturnTime, reqVO.getReturnTime())
.eqIfPresent(BusinessSubSampleDO::getReturnStatus, reqVO.getReturnStatus())
.eqIfPresent(BusinessSubSampleDO::getDispatchStatus, reqVO.getDispatchStatus())
.eqIfPresent(BusinessSubSampleDO::getReturnCodePrintCount, reqVO.getReturnCodePrintCount())
.betweenIfPresent(BusinessSubSampleDO::getPrintLastTime, reqVO.getPrintLastTime())
.eqIfPresent(BusinessSubSampleDO::getUpSampleRecordId, reqVO.getUpSampleRecordId())

View File

@@ -187,6 +187,7 @@ public class BusinessSampleDispatchServiceImpl implements BusinessSampleDispatch
}
@Override
@Transactional(rollbackFor = Exception.class)
public CommonResult<String> execGiveback(JSONObject paramVo) {
String givebackUser = paramVo.getString("givebackUser"); //归还人
@@ -236,8 +237,14 @@ public class BusinessSampleDispatchServiceImpl implements BusinessSampleDispatch
@Override
public BusinessSampleDispatchRespVO createBusinessSampleDispatch(BusinessSampleDispatchSaveReqVO createReqVO) {
// 插入
BusinessSampleDispatchDO businessSampleDispatch = BeanUtils.toBean(createReqVO, BusinessSampleDispatchDO.class);
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
String nickName = SecurityFrameworkUtils.getLoginUserNickname();
if(businessSampleDispatch.getApplyUser() == null){
businessSampleDispatch.setApplyUser(nickName);
businessSampleDispatch.setApplyUserId(loginUser.getId());
}
businessSampleDispatchMapper.insert(businessSampleDispatch);
// 返回
return BeanUtils.toBean(businessSampleDispatch, BusinessSampleDispatchRespVO.class);

View File

@@ -11,6 +11,7 @@ import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleHandover
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleHandoverDetailDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigWarehouseLocationDO;
import com.zt.plat.module.qms.business.config.service.ConfigWarehouseLocationService;
import com.zt.plat.module.qms.common.dic.service.DictionaryBusinessService;
import com.zt.plat.module.qms.core.code.SequenceUtil;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.enums.QmsWarehouseLocationConstant;
@@ -55,6 +56,7 @@ public class BusinessSubSampleServiceImpl implements BusinessSubSampleService {
@Resource private BusinessSampleHandoverService businessSampleHandoverService;
@Resource private BusinessSampleHandoverDetailService businessSampleHandoverDetailService;
@Resource private BusinessHandoverRecordSubService businessHandoverRecordSubService;
@Resource private DictionaryBusinessService dictionaryBusinessService;
@Resource private SequenceUtil sequenceUtil;
@Override
@@ -230,7 +232,10 @@ public class BusinessSubSampleServiceImpl implements BusinessSubSampleService {
//创建交接抬头
BusinessSampleHandoverSaveReqVO handoverVO = new BusinessSampleHandoverSaveReqVO();
String code = sequenceUtil.genCode("/XJ|@yyMMdd|*XJ_CODE-3-D");
String codeTemplate = dictionaryBusinessService.getValueByDataKey("sample_take_off_serial");
if(ObjectUtils.isEmpty(codeTemplate))
throw exception0(BUSINESS_SUB_SAMPLE_NOT_EXISTS.getCode(), "缺少“样品下架记录编号规则”的配置,请在业务参数字典增加此配置!");
String code = sequenceUtil.genCode(codeTemplate);
handoverVO.setCode(code);
handoverVO.setName("样品下架记录");
handoverVO.setSampleFlowNodeKey(QmsCommonConstant.FLOW_SAMPLE_STORAGE);

View File

@@ -42,9 +42,13 @@ public class ConfigWarehouseLocationServiceImpl implements ConfigWarehouseLocati
query.eq(ConfigWarehouseLocationDO::getCode, code);
query.eq(ConfigWarehouseLocationDO::getWarehouseType, warehouseType);
query.eq(ConfigWarehouseLocationDO::getDataType, QmsWarehouseLocationConstant.DATA_TYPE_LOCATION);
query.last("limit 1");
ConfigWarehouseLocationDO configWarehouseLocation = configWarehouseLocationMapper.selectOne(query);
return configWarehouseLocation;
// query.last("limit 1");
List<ConfigWarehouseLocationDO> list = configWarehouseLocationMapper.selectList(query);
if(list.size() > 1)
throw exception(CONFIG_WAREHOUSE_LOCATION_CODE_DUPLICATE);
if(list.isEmpty())
return null;
return list.get(0);
}
@Override