package com.glxp.api.controller.collect; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.constant.WorkOperType; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.basic.BasicSkPrescribeEntity; import com.glxp.api.entity.basic.SysWorkplaceDocumentEntity; import com.glxp.api.entity.collect.*; import com.glxp.api.req.basic.BasicCollectUserRequest; import com.glxp.api.req.basic.PrescribeBindWorkRequest; import com.glxp.api.req.basic.WorkBindBusTypeRequest; import com.glxp.api.req.collect.CollectOrderBindWorkRequest; import com.glxp.api.req.collect.CollectOrderBizRequest; import com.glxp.api.req.collect.CollectOrderRequest; import com.glxp.api.req.collect.CollectOrderSaveRequest; import com.glxp.api.req.system.DeleteRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.basic.SysWorkplaceDocumentResponse; import com.glxp.api.res.basic.UserWorkResponse; import com.glxp.api.res.collect.CollectOrderBizResponse; import com.glxp.api.res.collect.IoCollectOrderResponse; import com.glxp.api.service.basic.BasicCollectUserService; import com.glxp.api.service.basic.SysWorkplaceDocumentService; import com.glxp.api.service.collect.*; import com.glxp.api.util.IntUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; 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 java.util.*; import java.util.stream.Collectors; @RestController public class IoCollectOrderController extends BaseController { @Resource IoCollectOrderService collectOrderService; @Resource IoCollectOrderOriginService collectOrderOriginService; @Resource IoCollectOrderBizOriginService collectOrderBizOriginService; @Resource IoCollectOrderBizService collectOrderBizService; @Resource IoCollectOrderBizBackupService collectOrderBizBackupService; @Resource private BasicCollectUserService basicCollectUserService; @GetMapping("/udiwms/basic/collect/order/filter") public BaseResponse filterOrder(CollectOrderRequest collectOrderRequest) { List workPlaceCodes = null; List sysWorkplaceDocumentResponses = null; List page; WorkBindBusTypeRequest workBindBusTypeRequest = new WorkBindBusTypeRequest(); if (collectOrderRequest.getWorkPlaceCode() == null) { Long userId = getUserId(); BasicCollectUserRequest request = new BasicCollectUserRequest(); request.setPage(1); request.setLimit(100); request.setUserId(userId.toString()); page = basicCollectUserService.filterList(request); if (page != null) { workPlaceCodes = page.stream() .map(UserWorkResponse::getWorkplaceId) .collect(Collectors.toList()); } //通过工位列表 获取出 业务列表 workBindBusTypeRequest.setWorkPlaceCodes(workPlaceCodes); sysWorkplaceDocumentResponses = sysWorkplaceDocumentService.filterListByWorkplace(workBindBusTypeRequest); } else { workBindBusTypeRequest.setWorkplaceCode(collectOrderRequest.getWorkPlaceCode()); sysWorkplaceDocumentResponses = sysWorkplaceDocumentService.filterListByWorkplace(workBindBusTypeRequest); collectOrderRequest.setWorkPlaceCode(null); } if (CollUtil.isNotEmpty(sysWorkplaceDocumentResponses)) { Set uniqueDocumentTypeCodesLinkedHashSet = sysWorkplaceDocumentResponses.stream() .map(SysWorkplaceDocumentResponse::getDocumentTypeCode) .collect(Collectors.toCollection(LinkedHashSet::new)); List documentTypeCodes = new ArrayList<>(uniqueDocumentTypeCodesLinkedHashSet); collectOrderRequest.setDocumentTypeCodes(documentTypeCodes); } List orderResponses = collectOrderService.filterList(collectOrderRequest); PageInfo pageInfo = new PageInfo<>(orderResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(orderResponses); return ResultVOUtils.success(pageSimpleResponse); } /** * 获取下一单据 * * @param collectOrderRequest * @return */ @GetMapping("/udiwms/basic/collect/order/next") public BaseResponse getNextOrder(CollectOrderRequest collectOrderRequest) { if (collectOrderRequest.getWorkPlaceCode() == null) { return ResultVOUtils.error(500, "工位不能为空!"); } CollectOrderRequest request = new CollectOrderRequest(); request.setLimit(1); request.setWorkPlaceCode(collectOrderRequest.getWorkPlaceCode()); request.setTagStatusList(List.of(1)); List orderResponses = collectOrderService.filterList(request); if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); return ResultVOUtils.error(500, "未查到待处理单据"); } @Resource IoCollectSetService collectSetService; /** * 获取当前正在处理的单据 * * @param collectOrderRequest * @return */ @GetMapping("/udiwms/basic/collect/order/current") public BaseResponse getCurrentOrder(CollectOrderRequest collectOrderRequest) { if (collectOrderRequest.getWorkPlaceCode() == null) { return ResultVOUtils.error(500, "工位不能为空!"); } CollectOrderRequest request = new CollectOrderRequest(); request.setPage(1); request.setLimit(1); request.setWorkPlaceCode(collectOrderRequest.getWorkPlaceCode()); request.setBusType(collectOrderRequest.getBusType()); request.setTagStatus(2); List orderResponses = collectOrderService.filterList(request); if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); else { request.setTagStatus(-1); orderResponses = collectOrderService.filterList(request); if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); else { IoCollectSet collectSet = collectSetService.getSet(); if (IntUtil.value(collectSet.getAutoDealOrder())) { request.setTagStatus(1); orderResponses = collectOrderService.filterList(request); return ResultVOUtils.success(orderResponses.get(0)); } } } return ResultVOUtils.error(500, "未查到待处理单据"); } /** * 获取当前正在处理的单据 * * @param collectOrderRequest * @return */ @GetMapping("/udiwms/basic/collect/order/findByBill") public BaseResponse findByBill(CollectOrderRequest collectOrderRequest) { if (collectOrderRequest.getWorkPlaceCode() == null) { return ResultVOUtils.error(500, "工位不能为空!"); } CollectOrderRequest request = new CollectOrderRequest(); request.setPage(1); request.setLimit(1); request.setBillNo(collectOrderRequest.getBillNo()); List orderResponses = collectOrderService.filterList(request); if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); else { request.setTagStatus(-1); orderResponses = collectOrderService.filterList(request); if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); } return ResultVOUtils.error(500, "未查到待处理单据"); } @GetMapping("/udiwms/basic/collect/order/detail") public BaseResponse detail(CollectOrderBizRequest collectOrderBizRequest) { if (StrUtil.isBlank(collectOrderBizRequest.getOrderIdFk())) { return ResultVOUtils.error(500, "单据号不能为空"); } IoCollectOrder collectOrder = collectOrderService.getByBillNo(collectOrderBizRequest.getOrderIdFk()); if (collectOrder == null) { return ResultVOUtils.error(500, "未找到单据"); } List list = collectOrderBizService.filterList(collectOrderBizRequest); PageInfo pageInfo = new PageInfo<>(list); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(list); return ResultVOUtils.success(pageSimpleResponse); } @GetMapping("/udiwms/basic/collect/order/allDetail") public BaseResponse allDetail(CollectOrderBizRequest collectOrderBizRequest) { if (StrUtil.isBlank(collectOrderBizRequest.getOrderIdFk())) { return ResultVOUtils.error(500, "单据号不能为空"); } IoCollectOrder collectOrder = collectOrderService.getByBillNo(collectOrderBizRequest.getOrderIdFk()); if (collectOrder == null) { return ResultVOUtils.error(500, "未找到单据"); } List collectOrderBizResponses = collectOrderService.combieOrderDetail(collectOrderBizRequest); PageInfo pageInfo = new PageInfo<>(collectOrderBizResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(collectOrderBizResponses); return ResultVOUtils.success(pageSimpleResponse); } @PostMapping("/udiwms/basic/collect/order/deleteOrder") public BaseResponse deleteOrder(@RequestBody DeleteRequest deleteRequest) { String billNo = deleteRequest.getBillNo(); if (StrUtil.isBlank(billNo)) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } collectOrderService.remove(new LambdaQueryWrapper().eq(IoCollectOrder::getBillNo, billNo)); //更改 原始单据表 为未处理 collectOrderOriginService.update(new LambdaUpdateWrapper().eq(IoCollectOrderOrigin::getBillNo, billNo).set(IoCollectOrderOrigin::getTagStatus, 0)); return ResultVOUtils.success(); } @PostMapping("/udiwms/basic/collect/order/deleteOriginOrder") public BaseResponse deleteOrderOrigin(@RequestBody DeleteRequest deleteRequest) { String billNo = deleteRequest.getBillNo(); if (StrUtil.isBlank(billNo)) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } collectOrderOriginService.remove(new LambdaQueryWrapper().eq(IoCollectOrderOrigin::getBillNo, billNo)); collectOrderBizOriginService.remove(new LambdaQueryWrapper().eq(IoCollectOrderBizOrigin::getOrderIdFk, billNo)); return ResultVOUtils.success(); } /** * 保存前端处方信息 * * @return */ @GetMapping("/udiwms/basic/collect/order/save") public BaseResponse saveOrder(@RequestBody CollectOrderSaveRequest collectOrderSaveRequest) { List list = collectOrderSaveRequest.getList(); collectOrderService.saveOrUpdateBatch(list); return ResultVOUtils.success(); } /** * 更新biz信息 * * @return */ @PostMapping("/udiwms/basic/collect/order/biz/save") public BaseResponse saveOrderBiz(@RequestBody IoCollectOrderBizBackup collectOrderBiz) { collectOrderBizBackupService.updateById(collectOrderBiz); return ResultVOUtils.success("更新成功"); } /** * 单据挂起 * * @return */ @PostMapping("/udiwms/basic/collect/order/update") public BaseResponse updateOrder(@RequestBody CollectOrderRequest collectOrderRequest) { IoCollectOrder collectOrder = new IoCollectOrder(); BeanUtils.copyProperties(collectOrderRequest, collectOrder); collectOrder.setUpdateTime(new Date()); collectOrder.setUpdateUser(getUserId()); collectOrderService.updateById(collectOrder); if (collectOrder.getTagStatus() == 2) { collectOrderOriginService.update(new LambdaUpdateWrapper().eq(IoCollectOrderOrigin::getBillNo, collectOrder.getBillNo()) .set(IoCollectOrderOrigin::getTagStatus, 2)); } return ResultVOUtils.success(); } /** * 单据挂起 * * @return */ @PostMapping("/udiwms/basic/collect/order/draft") public BaseResponse saveDraftOrder(@RequestBody CollectOrderRequest collectOrderRequest) { IoCollectOrder collectOrder = new IoCollectOrder(); BeanUtils.copyProperties(collectOrderRequest, collectOrder); collectOrder.setTagStatus(-1); collectOrder.setUpdateTime(new Date()); collectOrder.setUpdateUser(getUserId()); collectOrderService.updateById(collectOrder); return ResultVOUtils.success(); } @Resource IoCollectOrderCodeManService collectOrderCodeManService; /** * 单据取消操作 * * @param collectOrderRequest * @return */ @PostMapping("/udiwms/basic/collect/order/cancel") public BaseResponse cancelOrder(@RequestBody CollectOrderRequest collectOrderRequest) { IoCollectOrder collectOrder = new IoCollectOrder(); BeanUtils.copyProperties(collectOrderRequest, collectOrder); collectOrder.setTagStatus(1); collectOrder.setUpdateTime(new Date()); collectOrder.setUpdateUser(getUserId()); collectOrderService.updateById(collectOrder); collectOrderCodeManService.removeByBillNo(collectOrder.getBillNo()); SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByWorkplaceCode(null, collectOrderRequest.getBusType()); if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_GEN_ORDER) { collectOrderBizService.removeByBillNo(collectOrder.getBillNo()); } else { List collectOrderBizs = collectOrderBizService.listByBillNo(collectOrderRequest.getBillNo()); for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { collectOrderBiz.setScanCount(0); collectOrderBiz.setScanActCount(0); collectOrderBiz.setTempSplitCount(0); collectOrderBiz.setTempWorkPlaceCount(0); if (collectOrderBiz.getCount() == 0) { collectOrderBizService.removeById(collectOrderBiz.getId()); } } collectOrderBizService.updateBatchById(collectOrderBizs); } return ResultVOUtils.success("取消成功"); } @Resource SysWorkplaceDocumentService sysWorkplaceDocumentService; /** * 单据挂起 * * @return */ @PostMapping("/udiwms/basic/collect/order/finish") @Transactional(rollbackFor = Exception.class) public BaseResponse saveFinishOrder(@RequestBody CollectOrderRequest collectOrderRequest) { if (!IntUtil.value(collectOrderRequest.getConfirmFinish())) { //1.校验是否全部自动赋码 CollectOrderBizRequest collectOrderBizRequest = new CollectOrderBizRequest(); collectOrderBizRequest.setOrderIdFk(collectOrderRequest.getBillNo()); List collectOrderBizResponses = collectOrderService.combieOrderDetail(collectOrderBizRequest); boolean isAllTag = collectOrderBizResponses.stream() .allMatch(obj -> StrUtil.isNotEmpty(obj.getFinishUdiCode()) || obj.getAutoTagStatus() == 2); if (!isAllTag) { SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(collectOrderRequest.getBusType()); // if (IntUtil.value(sysWorkplaceDocumentEntity.getOrderFinishVerify()) == 1) { // // } else { // return ResultVOUtils.error(503, "该业务单据未全部赋码,无法完成单据?"); // } return ResultVOUtils.error(502, "该业务单据未全部赋码,是否强制完成单据?"); } } collectOrderRequest.setUpdateUser(getUserId()); collectOrderService.finishOrder(collectOrderRequest); return ResultVOUtils.success(); } @PostMapping("/udiwms/basic/collect/order/vailFinish") public BaseResponse vailOrderFinish(@RequestBody CollectOrderRequest collectOrderRequest) { if (StrUtil.isEmpty(collectOrderRequest.getBillNo())) return ResultVOUtils.error(500, "单据号不能为空!"); CollectOrderBizRequest collectOrderBizRequest = new CollectOrderBizRequest(); collectOrderBizRequest.setOrderIdFk(collectOrderRequest.getBillNo()); List collectOrderBizResponses = collectOrderService.combieOrderDetail(collectOrderBizRequest); boolean isAllTag = collectOrderBizResponses.stream() .allMatch(obj -> StrUtil.isNotEmpty(obj.getFinishUdiCode()) || obj.getAutoTagStatus() == 2); boolean isAllTag2 = collectOrderBizResponses.stream() .allMatch(obj -> IntUtil.value(obj.getActCount()) >= IntUtil.value(obj.getCount())); return ResultVOUtils.success(isAllTag || isAllTag2); } @PostMapping("/udiwms/basic/collect/order/bindWork") public BaseResponse bindWork(@RequestBody CollectOrderBindWorkRequest bindWorkRequest) { if (bindWorkRequest.getCollOrder() != null) { IoCollectOrder collectOrder = bindWorkRequest.getCollOrder(); collectOrder.setWorkPlaceCode(bindWorkRequest.getWorkplaceCode()); collectOrder.setTagStatus(1); collectOrderService.updateById(collectOrder); } else { for (IoCollectOrder collectOrder : bindWorkRequest.getList()) { collectOrder.setTagStatus(1); collectOrder.setWorkPlaceCode(bindWorkRequest.getWorkplaceCode()); } collectOrderService.updateBatchById(bindWorkRequest.getList()); } return ResultVOUtils.success("绑定成功"); } @GetMapping("/udiwms/collect/order/import") public BaseResponse importOrder() { collectOrderService.importOrder(); return ResultVOUtils.success(); } @GetMapping("/udiwms/collect/order/clearAll") public BaseResponse clearAll() { collectOrderService.clearOrder(); return ResultVOUtils.success(); } /** * 置顶 * * @param collectOrderRequest * @return */ @PostMapping("/udiwms/basic/collect/order/orderTop") public BaseResponse orderTop(@RequestBody CollectOrderRequest collectOrderRequest) { collectOrderService.orderTop(collectOrderRequest); return ResultVOUtils.success(); } /** * 单据上传 * * @param * @return */ // @PostMapping("/udiwms/basic/collect/order/upload") // public BaseResponse orderUpload(@RequestBody CollectOrderRequest collectOrderRequest) { // if (StrUtil.isEmpty(collectOrderRequest.getBillNo())) // return ResultVOUtils.error(500, "单据号不能为空"); // collectOrderService.orderUpload(collectOrderRequest.getBillNo()); // return ResultVOUtils.success(); // } @PostMapping("/udiwms/basic/collect/decideOrder") public BaseResponse decideOrder(@RequestBody CollectOrderRequest request) { Boolean isExis = collectOrderService.decideOrder(request); if (!isExis) { return ResultVOUtils.error("当前工位存在正在处理单据!"); } return ResultVOUtils.success(); } }