package com.glxp.api.service.collect; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.dao.basic.SysWorkplaceDocumentDao; import com.glxp.api.entity.basic.BasicSkPrescribeEntity; import com.glxp.api.entity.basic.BasicSkPrescribeItemEntity; import com.glxp.api.entity.basic.SysWorkplaceDocumentEntity; import com.glxp.api.entity.collect.IoCollectOrder; import com.glxp.api.entity.collect.IoCollectOrderBiz; import com.glxp.api.exception.JsonException; import com.glxp.api.http.ErpBasicClient; import com.glxp.api.req.basic.GetSickPrescribeRequest; import com.glxp.api.req.basic.WorkBindBusTypeRequest; import com.glxp.api.req.collect.CollectOrderRequest; import com.glxp.api.req.inout.FilterOrderRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.basic.BasicSkPrescribeResponse; import com.glxp.api.res.basic.SysWorkplaceDocumentResponse; import com.glxp.api.service.basic.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; /** * 原始单据下载 */ @Service public class IoCollectOriginService { @Resource private ErpBasicClient erpBasicClient; @Resource private BasicSkPrescribeService basicSkPrescribeService; @Resource private BasicSkPrescirbeDetailService basicSkPrescirbeDetailService; @Resource private IoCollectOrderService ioCollectOrderService; @Resource IoCollectOrderService collectOrderService; @Resource IoCollectOrderBizService collectOrderBizService; @Resource private DownloadFactory downloadFactory; @Resource private SysWorkplaceDocumentDao sysWorkplaceDocumentDao; @Resource private SysWorkplaceDocumentService sysWorkplaceDocumentService; public BaseResponse downloadOrder(CollectOrderRequest collectOrderRequest) { //拉取药品处方 if (collectOrderRequest.getBusType().equals("YPCF002")) { GetSickPrescribeRequest getSickPrescribeRequest = new GetSickPrescribeRequest(); getSickPrescribeRequest.setPage(1); getSickPrescribeRequest.setLimit(100); getSickPrescribeRequest.setCode(collectOrderRequest.getBillNo()); getSickPrescribeRequest.setThirdSys("thirdId"); BaseResponse> baseResponse = erpBasicClient.getPrescribe(getSickPrescribeRequest); if (baseResponse.getCode() == 20000) { List list = baseResponse.getData().getList(); List basicSkPrescribeEntities = new ArrayList<>(); list.forEach(item -> { BasicSkPrescribeEntity basicSkPrescribeEntity = new BasicSkPrescribeEntity(); BeanUtil.copyProperties(item, basicSkPrescribeEntity); basicSkPrescribeEntity.setSickerCode(item.getSickCode()); basicSkPrescribeEntity.setUpdateTime(LocalDateTime.now()); List skPrescribeItemEntities = item.getItemList(); if (CollUtil.isNotEmpty(skPrescribeItemEntities)) { basicSkPrescirbeDetailService.remove(new QueryWrapper().eq("prescribeCode", item.getCode())); for (BasicSkPrescribeItemEntity skPrescribeItemEntity : skPrescribeItemEntities) { skPrescribeItemEntity.setPrescribeCode(item.getCode()); skPrescribeItemEntity.setSickerCode(item.getSickCode()); skPrescribeItemEntity.setAdNum(basicSkPrescribeEntity.getAdNum()); skPrescribeItemEntity.setId(IdUtil.getSnowflakeNextId()); basicSkPrescirbeDetailService.save(skPrescribeItemEntity); } } basicSkPrescribeEntities.add(basicSkPrescribeEntity); basicSkPrescribeService.saveOrUpdate(basicSkPrescribeEntity); }); collectOrderService.importPrescribe(basicSkPrescribeEntities); return ResultVOUtils.success("下载成功"); } } return ResultVOUtils.error("下载失败"); } public BaseResponse downloadOrderV2(CollectOrderRequest collectOrderRequest) { //条件 String busType = collectOrderRequest.getBusType(); if (StrUtil.isBlank(busType)) { //下载工位下的类型 List list = sysWorkplaceDocumentService.list(); if (CollUtil.isNotEmpty(list)) { for (SysWorkplaceDocumentEntity item : list) { collectOrderRequest.setBusType(item.getDocumentTypeCode()); downloadFactory.downloadOrder(collectOrderRequest); } }else{ return ResultVOUtils.error("未配置业务类型"); } return ResultVOUtils.success("下载成功"); } else { return downloadFactory.downloadOrder(collectOrderRequest); } } /** * 异常处理 * * @param collectOrderRequest */ @Transactional(rollbackFor = Exception.class) public void errorHandle(CollectOrderRequest collectOrderRequest) { if (StrUtil.isBlank(collectOrderRequest.getBillNo())) { throw new JsonException(500, "单据号不能为空"); } if (collectOrderRequest.getTagStatus() != 4) { throw new JsonException(500, "非异常单据,无需处理"); } if (StrUtil.isBlank(collectOrderRequest.getBusType())) { throw new JsonException(500, "单据类型不能为空"); } if (collectOrderRequest.getWorkPlaceCode() == null) { throw new JsonException(500, "工位号不能为空"); } //删除异常单据 collectOrderBizService.remove(new LambdaQueryWrapper() .eq(IoCollectOrderBiz::getOrderIdFk, collectOrderRequest.getBillNo())); collectOrderService.remove(new LambdaQueryWrapper() .eq(IoCollectOrder::getBillNo, collectOrderRequest.getBillNo()) .eq(IoCollectOrder::getTagStatus, 4)); //重新拉取 this.downloadOrderV2(collectOrderRequest); } }