|
|
|
|
package com.glxp.api.controller.inout;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
|
|
import com.glxp.api.common.enums.ResultEnum;
|
|
|
|
|
import com.glxp.api.common.res.BaseResponse;
|
|
|
|
|
import com.glxp.api.common.util.ResultVOUtils;
|
|
|
|
|
import com.glxp.api.controller.BaseController;
|
|
|
|
|
import com.glxp.api.entity.basic.*;
|
|
|
|
|
import com.glxp.api.entity.collect.IoCollectOrder;
|
|
|
|
|
import com.glxp.api.entity.inout.IoSplitCodeEntity;
|
|
|
|
|
import com.glxp.api.entity.thrsys.BasicInsChdrugEntity;
|
|
|
|
|
import com.glxp.api.req.inout.AddTagCodeReqeust;
|
|
|
|
|
import com.glxp.api.req.inout.IoSplitCodeRequest;
|
|
|
|
|
import com.glxp.api.req.inout.IoSplitDetailCodeRequest;
|
|
|
|
|
import com.glxp.api.req.thrsys.ThrInsChDrugFeeRequest;
|
|
|
|
|
import com.glxp.api.res.PageSimpleResponse;
|
|
|
|
|
import com.glxp.api.res.basic.UdiRelevanceResponse;
|
|
|
|
|
import com.glxp.api.res.inout.IoSplitCodeDetailResponse;
|
|
|
|
|
import com.glxp.api.service.basic.*;
|
|
|
|
|
import com.glxp.api.service.collect.IoCollectOrderService;
|
|
|
|
|
import com.glxp.api.service.inout.IoSplitCodeDetailService;
|
|
|
|
|
import com.glxp.api.service.inout.IoSplitCodeService;
|
|
|
|
|
import com.glxp.api.service.inout.IoSplitFifoCodeService;
|
|
|
|
|
import com.glxp.api.util.IntUtil;
|
|
|
|
|
import com.glxp.api.util.udi.FilterUdiUtils;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.validation.BindingResult;
|
|
|
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import javax.validation.Valid;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@RestController
|
|
|
|
|
public class IoSplitController extends BaseController {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
IoSplitCodeService splitCodeService;
|
|
|
|
|
@Resource
|
|
|
|
|
IoSplitCodeDetailService splitCodeDetailService;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
BasicSkPrescribeDiService basicSkPrescribeDiService;
|
|
|
|
|
@Resource
|
|
|
|
|
UdiRelevanceService udiRelevanceService;
|
|
|
|
|
@Resource
|
|
|
|
|
IoSplitFifoCodeService splitFifoCodeService;
|
|
|
|
|
@Resource
|
|
|
|
|
BasicSkPrescribeService basicSkPrescribeService;
|
|
|
|
|
@Resource
|
|
|
|
|
BasicSkPrescribeItemCodeService basicSkPrescribeItemCodeService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 器械拆零按码查询
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/udiwms/ioSplit/material/code/filter")
|
|
|
|
|
public BaseResponse filterByCode(IoSplitCodeRequest splitCodeRequest,
|
|
|
|
|
BindingResult bindingResult) {
|
|
|
|
|
if (bindingResult.hasErrors()) {
|
|
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
|
|
|
|
|
}
|
|
|
|
|
List<IoSplitCodeEntity> splitCodeEntities = splitCodeService.filterList(splitCodeRequest);
|
|
|
|
|
PageInfo<IoSplitCodeEntity> pageInfo = new PageInfo<>(splitCodeEntities);
|
|
|
|
|
PageSimpleResponse<IoSplitCodeEntity> pageSimpleResponse = new PageSimpleResponse<>();
|
|
|
|
|
pageSimpleResponse.setTotal(pageInfo.getTotal());
|
|
|
|
|
pageSimpleResponse.setList(splitCodeEntities);
|
|
|
|
|
return ResultVOUtils.success(pageSimpleResponse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 器械拆零按处方查询赋码明细
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/udiwms/ioSplit/material/prescribe/filter")
|
|
|
|
|
public BaseResponse filterByPrescribe(IoSplitDetailCodeRequest splitDetailCodeRequest,
|
|
|
|
|
BindingResult bindingResult) {
|
|
|
|
|
if (bindingResult.hasErrors()) {
|
|
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
|
|
|
|
|
}
|
|
|
|
|
List<IoSplitCodeDetailResponse> splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest);
|
|
|
|
|
PageInfo<IoSplitCodeDetailResponse> pageInfo = new PageInfo<>(splitCodeEntities);
|
|
|
|
|
PageSimpleResponse<IoSplitCodeDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
|
|
|
|
|
pageSimpleResponse.setTotal(pageInfo.getTotal());
|
|
|
|
|
pageSimpleResponse.setList(splitCodeEntities);
|
|
|
|
|
return ResultVOUtils.success(pageSimpleResponse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 器械拆零按扫码查询处方赋码明细
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/udiwms/ioSplit/material/tagCode/filter")
|
|
|
|
|
public BaseResponse filterByTagCode(IoSplitDetailCodeRequest splitDetailCodeRequest,
|
|
|
|
|
BindingResult bindingResult) {
|
|
|
|
|
if (bindingResult.hasErrors()) {
|
|
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
|
|
|
|
|
}
|
|
|
|
|
List<IoSplitCodeDetailResponse> splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest);
|
|
|
|
|
PageInfo<IoSplitCodeDetailResponse> pageInfo = new PageInfo<>(splitCodeEntities);
|
|
|
|
|
PageSimpleResponse<IoSplitCodeDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
|
|
|
|
|
pageSimpleResponse.setTotal(pageInfo.getTotal());
|
|
|
|
|
pageSimpleResponse.setList(splitCodeEntities);
|
|
|
|
|
return ResultVOUtils.success(pageSimpleResponse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
IoCollectOrderService collectOrderService;
|
|
|
|
|
@Resource
|
|
|
|
|
SysWorkplaceDocumentService sysWorkplaceDocumentService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 开始自动赋码
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/udiwms/ioSplit/material/order/split")
|
|
|
|
|
public BaseResponse startSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust) {
|
|
|
|
|
IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
|
|
if (collectOrder == null) {
|
|
|
|
|
return ResultVOUtils.error(500, "未找到单据");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if (collectOrder.getTagStatus() == 2) {
|
|
|
|
|
// return ResultVOUtils.error(501, "当前单据正在处理中,请重新选择单据");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByWorkplaceCode(collectOrder.getWorkPlaceCode(), collectOrder.getBusType());
|
|
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getAutoTag()) == 1) {
|
|
|
|
|
collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
|
|
splitCodeService.preAutoTagCode(collectOrder);
|
|
|
|
|
collectOrderService.updateById(collectOrder);
|
|
|
|
|
return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看");
|
|
|
|
|
} else {
|
|
|
|
|
return ResultVOUtils.success("无需自动赋码");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 开始自动赋码
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/udiwms/ioSplit/material/order/backSplit")
|
|
|
|
|
public BaseResponse backSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust,
|
|
|
|
|
BindingResult bindingResult) {
|
|
|
|
|
IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
|
|
if (collectOrder == null) {
|
|
|
|
|
return ResultVOUtils.error(500, "未找到单据");
|
|
|
|
|
}
|
|
|
|
|
splitCodeService.backSplit(collectOrder);
|
|
|
|
|
|
|
|
|
|
return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 器械拆零处方赋码(手动赋码)
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/udiwms/ioSplit/material/prescribe/tagCode")
|
|
|
|
|
public BaseResponse prescribeTagCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust,
|
|
|
|
|
BindingResult bindingResult) {
|
|
|
|
|
if (bindingResult.hasErrors()) {
|
|
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BasicSkPrescribeEntity basicSkPrescribeEntity = basicSkPrescribeService.getByCode(addTagCodeReqeust.getPrescribeNum());
|
|
|
|
|
if (basicSkPrescribeEntity == null)
|
|
|
|
|
return ResultVOUtils.error(500, "处方不存在!");
|
|
|
|
|
//1.校验UDI码完整性
|
|
|
|
|
String code = addTagCodeReqeust.getCode();
|
|
|
|
|
if (StringUtils.isBlank(code)) return ResultVOUtils.error(ResultEnum.DATA_ERROR);
|
|
|
|
|
if (code.endsWith("\u001D")) {
|
|
|
|
|
code = code.replace("\u001D", "");
|
|
|
|
|
}
|
|
|
|
|
UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
|
|
|
|
|
if (udiEntity == null)
|
|
|
|
|
return ResultVOUtils.error(500, "无效条码!");
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse;
|
|
|
|
|
List<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null);
|
|
|
|
|
if (CollUtil.isEmpty(udiRelevanceResponses))
|
|
|
|
|
return ResultVOUtils.error(500, "耗材字典不存在此产品!");
|
|
|
|
|
else
|
|
|
|
|
udiRelevanceResponse = udiRelevanceResponses.get(0);
|
|
|
|
|
//2.校验是否处方单UDI码
|
|
|
|
|
List<BasicSkPrescribeDiEntity> basicSkPrescribeDiEntities = basicSkPrescribeDiService.findByPrescribe(addTagCodeReqeust.getPrescribeNum());
|
|
|
|
|
BasicSkPrescribeDiEntity basicSkPrescribeDiEntity = vailPrescribeProduct(udiRelevanceResponses, basicSkPrescribeDiEntities, udiEntity);
|
|
|
|
|
if (basicSkPrescribeDiEntity == null)
|
|
|
|
|
return ResultVOUtils.error(500, "非此处方单UDI码!");
|
|
|
|
|
|
|
|
|
|
//3.校验该UDI码是否已经出库(是否在预出库队列)
|
|
|
|
|
Boolean b1 = splitFifoCodeService.isExitCode(code, basicSkPrescribeEntity.getWorkPlaceCode());
|
|
|
|
|
if (!b1) {
|
|
|
|
|
return ResultVOUtils.error(500, "该UDI码未出库,无法使用!");
|
|
|
|
|
}
|
|
|
|
|
//4.
|
|
|
|
|
BasicSkPrescribeItemCode exitCode = basicSkPrescribeItemCodeService.findByCode(basicSkPrescribeDiEntity.getPrescribeCode(), code);
|
|
|
|
|
if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) {
|
|
|
|
|
exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1);
|
|
|
|
|
basicSkPrescribeItemCodeService.updateById(exitCode);
|
|
|
|
|
} else if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) {
|
|
|
|
|
return ResultVOUtils.error(500, "重复扫码!");
|
|
|
|
|
} else {
|
|
|
|
|
BasicSkPrescribeItemCode basicSkPrescribeItemCode =
|
|
|
|
|
BasicSkPrescribeItemCode.builder()
|
|
|
|
|
.udiCode(code)
|
|
|
|
|
.itemCode(basicSkPrescribeDiEntity.getItemCode())
|
|
|
|
|
.itemName(basicSkPrescribeDiEntity.getItemName())
|
|
|
|
|
.relId(basicSkPrescribeDiEntity.getRelId())
|
|
|
|
|
.nameCode(udiRelevanceResponse.getNameCode())
|
|
|
|
|
.sickerCode(basicSkPrescribeDiEntity.getSickerCode())
|
|
|
|
|
.prescribeCode(basicSkPrescribeDiEntity.getPrescribeCode())
|
|
|
|
|
.createTime(new Date())
|
|
|
|
|
.createUser(getUserId())
|
|
|
|
|
.updateTime(new Date())
|
|
|
|
|
.updateUser(getUserId())
|
|
|
|
|
.scanCount(1)
|
|
|
|
|
.build();
|
|
|
|
|
basicSkPrescribeItemCodeService.save(basicSkPrescribeItemCode);
|
|
|
|
|
}
|
|
|
|
|
return ResultVOUtils.success("赋码成功");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public BasicSkPrescribeDiEntity vailPrescribeProduct(List<UdiRelevanceResponse> udiRelevanceResponses, List<BasicSkPrescribeDiEntity> basicSkPrescribeDiEntities, UdiEntity udiEntity) {
|
|
|
|
|
for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) {
|
|
|
|
|
for (BasicSkPrescribeDiEntity basicSkPrescribeDiEntity : basicSkPrescribeDiEntities) {
|
|
|
|
|
if (udiRelevanceResponse.getId().equals(basicSkPrescribeDiEntity) &&
|
|
|
|
|
(StrUtil.isNotEmpty(basicSkPrescribeDiEntity.getBatchNo()) && basicSkPrescribeDiEntity.getBatchNo().equals(udiEntity.getBatchNo()))
|
|
|
|
|
) {
|
|
|
|
|
return basicSkPrescribeDiEntity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 器械拆零处方赋码明细
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/udiwms/ioSplit/material/prescribe/tagCode/list")
|
|
|
|
|
public BaseResponse prescribeTagCodeList(IoSplitDetailCodeRequest splitDetailCodeRequest,
|
|
|
|
|
BindingResult bindingResult) {
|
|
|
|
|
if (bindingResult.hasErrors()) {
|
|
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
|
|
|
|
|
}
|
|
|
|
|
List<IoSplitCodeDetailResponse> splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest);
|
|
|
|
|
PageInfo<IoSplitCodeDetailResponse> pageInfo = new PageInfo<>(splitCodeEntities);
|
|
|
|
|
PageSimpleResponse<IoSplitCodeDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
|
|
|
|
|
pageSimpleResponse.setTotal(pageInfo.getTotal());
|
|
|
|
|
pageSimpleResponse.setList(splitCodeEntities);
|
|
|
|
|
return ResultVOUtils.success(pageSimpleResponse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|