package com.sinata.web.controller.applet;
|
import java.util.Date;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.sinata.common.core.domain.R;
|
import com.sinata.common.core.domain.entity.SysUser;
|
import com.sinata.common.entity.PageDTO;
|
import com.sinata.common.utils.SecurityUtils;
|
import com.sinata.system.domain.*;
|
import com.sinata.system.domain.dto.*;
|
import com.sinata.system.domain.query.MwCollectRecordQuery;
|
import com.sinata.system.domain.vo.MedicalWasteProcessVO;
|
import com.sinata.system.domain.vo.MwCollectRecordVO;
|
import com.sinata.system.service.*;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiParam;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletResponse;
|
import javax.validation.Valid;
|
import java.io.IOException;
|
import java.time.LocalDate;
|
|
/**
|
* <p>
|
* 暂存间入库记录 前端控制器
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-12-02
|
*/
|
@Validated
|
@RestController
|
@Api(tags = {"医院工作人员"})
|
@RequiredArgsConstructor
|
@RequestMapping("/applet/mwCollectRecord")
|
public class AppMwCollectRecordController {
|
private final MwCollectRecordService collectRecordService;
|
@Autowired
|
private ISysUserService userService;
|
private final MwBoxService boxService;
|
private final MwCheckoutRecordService checkoutRecordService;
|
private final MwCheckoutRecordItemService checkoutRecordItemService;
|
private final SysDepartmentService departmentService;
|
private final MwDisposalRecordService disposalRecordService;
|
private final MwDisposalRecordItemService disposalRecordItemService;
|
private final MwDisposalHandleRecordService disposalHandleRecordService;
|
private final MwDisposalHandleRecordItemService disposalHandleRecordItemService;
|
private final MwStagingRoomService roomService;
|
|
|
@ApiOperation("新增医废记录")
|
@PostMapping("/add")
|
public R<?> add(@Valid @RequestBody MwCollectRecord mwCollectRecord) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
|
MwBox one = boxService.lambdaQuery().eq(MwBox::getBoxNumber, mwCollectRecord.getBoxNumber()).one();
|
mwCollectRecord.setBoxId(one.getId());
|
MwStagingRoom one1 = roomService.lambdaQuery().eq(MwStagingRoom::getDepartmentId, sysUser.getDepartmentId()).one();
|
if (one1==null){
|
return R.fail("当前单位没有暂存间");
|
}
|
mwCollectRecord.setStagingRoomId(one1.getId());
|
mwCollectRecord.setDepartmentId(sysUser.getDepartmentId());
|
|
// 创建一个随机数生成器实例
|
Random random = new Random();
|
|
// 生成一个6位数范围内的随机整数(100000 到 999999)
|
int randomNumber = 10000000 + random.nextInt(90000000);
|
mwCollectRecord.setMedicalWasteNumber(String.valueOf(randomNumber));
|
collectRecordService.save(mwCollectRecord);
|
return R.ok();
|
}
|
|
@ApiOperation(value = "扫描箱号获取医废",tags = "运输人员")
|
@PostMapping("/box/list")
|
public R<List<CollectDto>> boxlist(@RequestParam String boxNumber) {
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(MwCollectRecord::getStatus,1).eq(MwCollectRecord::getBoxNumber, boxNumber).list();
|
if (list.isEmpty()){
|
return R.ok();
|
}
|
Long departmentId = list.get(0).getDepartmentId();
|
List<CollectDto> collectDtos = collectRecordService.getGroup1(boxNumber,departmentId);
|
return R.ok(collectDtos);
|
}
|
|
@ApiOperation(value = "装车",tags = "运输人员")
|
@PostMapping("/box/collect")
|
public R<List<CollectDto>> collect(@RequestBody SignCollectDto signCollectDto) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
|
//将收集记录的状态改变
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(MwCollectRecord::getStatus,1).in(MwCollectRecord::getBoxNumber, signCollectDto.getBoxNumbers()).list();
|
if (list.isEmpty()){
|
return R.ok();
|
}
|
Set<String> boxes = new HashSet<>();
|
BigDecimal sum = new BigDecimal(0);
|
for (MwCollectRecord mwCollectRecord : list) {
|
mwCollectRecord.setStatus(2);
|
mwCollectRecord.setCheckoutUserId(sysUser.getUserId());
|
mwCollectRecord.setDriverId(sysUser.getUserId());
|
mwCollectRecord.setCarId(sysUser.getCarId());
|
boxes.add(mwCollectRecord.getBoxNumber());
|
sum= sum.add(mwCollectRecord.getWeight());
|
}
|
//插入入库记录以及中间表数据
|
MwCheckoutRecord mwCheckoutRecord = new MwCheckoutRecord();
|
mwCheckoutRecord.setCheckoutTime(new Date());
|
mwCheckoutRecord.setDepartmentId(list.get(0).getDepartmentId());
|
mwCheckoutRecord.setHospitalName(list.get(0).getHospitalName());
|
mwCheckoutRecord.setStagingRoomId(list.get(0).getStagingRoomId());
|
mwCheckoutRecord.setHospitalSignature(signCollectDto.getSignUrl());
|
mwCheckoutRecord.setDriverId(sysUser.getUserId());
|
mwCheckoutRecord.setCarId(sysUser.getCarId());
|
mwCheckoutRecord.setBoxNum(boxes.size());
|
mwCheckoutRecord.setBagNum(list.size());
|
mwCheckoutRecord.setTotalWeight(sum);
|
checkoutRecordService.save(mwCheckoutRecord);
|
//插入中间表数据
|
List<MwCheckoutRecordItem> recordItems = new ArrayList<>();
|
for (MwCollectRecord mwCollectRecord : list) {
|
MwCheckoutRecordItem mwCheckoutRecordItem = new MwCheckoutRecordItem();
|
mwCheckoutRecordItem.setCollectRecordId(mwCollectRecord.getId());
|
mwCheckoutRecordItem.setCheckoutRecordId(mwCheckoutRecord.getId());
|
recordItems.add(mwCheckoutRecordItem);
|
}
|
checkoutRecordItemService.saveBatch(recordItems);
|
collectRecordService.updateBatchById(list);
|
return R.ok();
|
|
}
|
|
@ApiOperation(value = "运输统计上",tags = "运输人员")
|
@PostMapping("/trans/collect/total")
|
public R<List<CollectTotalUpDto>> tanscollecttotal1(LocalDate date) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
return R.ok(collectRecordService.collectTotal1(date,sysUser.getUserId(),null));
|
}
|
|
@ApiOperation(value = "运输统计上(医院数量)",tags = "运输人员")
|
@PostMapping("/trans/collect/hospital/count")
|
public R<Long> tanscollecttotal12(LocalDate date) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
Long count = collectRecordService.lambdaQuery().eq(date!=null,MwCollectRecord::getCheckoutTime,date).eq(MwCollectRecord::getCheckoutUserId, sysUser.getUserId()).groupBy(MwCollectRecord::getDepartmentId).count();
|
return R.ok(count);
|
}
|
|
@ApiOperation(value = "运输统计下",tags = "运输人员")
|
@PostMapping("/trans/down/collect/total")
|
public R<List<HospitalCollectTotalUpDto>> tanscollecttotal2(LocalDate date) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
//先获取医院ids
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(date!=null,MwCollectRecord::getCheckoutTime,date).eq(MwCollectRecord::getCheckoutUserId, sysUser.getUserId()).groupBy(MwCollectRecord::getDepartmentId).list();
|
//循环医院,然后放入
|
List<HospitalCollectTotalUpDto> list1 = new ArrayList<>();
|
for (MwCollectRecord mwCollectRecord : list) {
|
List<CollectTotalUpDto> collectTotalUpDtos = collectRecordService.collectTotal1(date, sysUser.getUserId(), mwCollectRecord.getDepartmentId());
|
HospitalCollectTotalUpDto hospitalCollectTotalUpDto = new HospitalCollectTotalUpDto();
|
hospitalCollectTotalUpDto.setHospitalName(mwCollectRecord.getHospitalName());
|
hospitalCollectTotalUpDto.setCollectTotalUpDtos(collectTotalUpDtos);
|
list1.add(hospitalCollectTotalUpDto);
|
}
|
return R.ok(list1);
|
}
|
|
@ApiOperation(value = "扫码接收列表",tags = "处置人员")
|
@PostMapping("/end/down/collect/total")
|
public R<List<HospitalCollectTotalUpDto>> tanscollecttotal3(String boxNum) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
MwCollectRecord one = collectRecordService.lambdaQuery().eq(MwCollectRecord::getBoxNumber, boxNum).eq(MwCollectRecord::getStatus, 2).last("limit 1").one();
|
if (one==null){
|
return R.ok();
|
}
|
//先获取医院ids
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(MwCollectRecord::getStatus,2).eq(MwCollectRecord::getCheckoutUserId, one.getCheckoutUserId()).groupBy(MwCollectRecord::getDepartmentId).list();
|
//循环医院,然后放入
|
List<HospitalCollectTotalUpDto> list1 = new ArrayList<>();
|
for (MwCollectRecord mwCollectRecord : list) {
|
List<CollectTotalUpDto> collectTotalUpDtos = collectRecordService.collectTotal1(null, sysUser.getUserId(), mwCollectRecord.getDepartmentId());
|
HospitalCollectTotalUpDto hospitalCollectTotalUpDto = new HospitalCollectTotalUpDto();
|
hospitalCollectTotalUpDto.setHospitalName(mwCollectRecord.getHospitalName());
|
hospitalCollectTotalUpDto.setCollectTotalUpDtos(collectTotalUpDtos);
|
list1.add(hospitalCollectTotalUpDto);
|
}
|
return R.ok(list1);
|
}
|
|
@ApiOperation(value = "确认接受",tags = "处置人员")
|
@PostMapping("/end/down/collect/confirm")
|
public R tanscollecttotal4(String boxNum) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
SysDepartment byId = departmentService.getById(sysUser.getDepartmentId());
|
//将record变为已接受
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(MwCollectRecord::getStatus,2).eq(MwCollectRecord::getBoxNumber, boxNum).list();
|
Set<String> boxes = new HashSet<>();
|
BigDecimal receiveQuantity = BigDecimal.ZERO;
|
for (MwCollectRecord mwCollectRecord : list) {
|
mwCollectRecord.setStatus(3);
|
boxes.add(mwCollectRecord.getBoxNumber());
|
mwCollectRecord.setReceiveUserId(sysUser.getUserId());
|
mwCollectRecord.setReceiveTime(new Date());
|
mwCollectRecord.setReceiveDepartmentId(sysUser.getDepartmentId());
|
receiveQuantity = receiveQuantity.add(mwCollectRecord.getWeight());
|
}
|
collectRecordService.updateBatchById(list);
|
//插入接收记录以及子表
|
MwDisposalRecord mwDisposalRecord = new MwDisposalRecord();
|
mwDisposalRecord.setDepartmentId(sysUser.getDepartmentId());
|
mwDisposalRecord.setDisposalUnitName(byId.getDepartmentName());
|
mwDisposalRecord.setReceiveQuantity(boxes.size());
|
mwDisposalRecord.setReceiveTime(new Date());
|
mwDisposalRecord.setReceiveWeight(receiveQuantity);
|
mwDisposalRecord.setReceiverId(sysUser.getUserId());
|
mwDisposalRecord.setUnloadQuantity(boxes.size());
|
mwDisposalRecord.setUnloadWeight(receiveQuantity);
|
mwDisposalRecord.setTotalHandledQuantity(list.size());
|
mwDisposalRecord.setDisposalFlag(0);
|
mwDisposalRecord.setTotalHandledWeight(receiveQuantity);
|
mwDisposalRecord.setDriverId(list.get(0).getDriverId());
|
mwDisposalRecord.setCarId(list.get(0).getCarId());
|
disposalRecordService.save(mwDisposalRecord);
|
//插入子表
|
List<MwDisposalRecordItem> items = new ArrayList<>();
|
for (MwCollectRecord mwCollectRecord : list) {
|
MwDisposalRecordItem mwDisposalRecordItem = new MwDisposalRecordItem();
|
mwDisposalRecordItem.setCollectRecordId(mwCollectRecord.getId());
|
mwDisposalRecordItem.setDisposalRecordId(mwDisposalRecord.getId());
|
items.add(mwDisposalRecordItem);
|
}
|
disposalRecordItemService.saveBatch(items);
|
return R.ok();
|
}
|
|
@ApiOperation(value = "待处置列表",tags = "处置人员")
|
@PostMapping("/wait/list")
|
public R<List<CollectDto>> list1(String boxNumber) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
List<CollectDto> collectDtos = collectRecordService.getGroupWithStatus(boxNumber,sysUser.getDepartmentId(),3);
|
return R.ok(collectDtos);
|
}
|
@ApiOperation(value = "处置操作",tags = "处置人员")
|
@PostMapping("/wait/out")
|
public R<List<CollectDto>> list2(String boxNumber) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
SysDepartment byId = departmentService.getById(sysUser.getDepartmentId());
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(MwCollectRecord::getStatus, 3).eq(MwCollectRecord::getBoxNumber, boxNumber).list();
|
|
//新增处置记录
|
MwDisposalHandleRecord mwDisposalHandleRecord = new MwDisposalHandleRecord();
|
mwDisposalHandleRecord.setDepartmentId(byId.getId());
|
mwDisposalHandleRecord.setDisposalUnitName(byId.getDepartmentName());
|
mwDisposalHandleRecord.setDisposalTime(new Date());
|
mwDisposalHandleRecord.setDisposalUserId(sysUser.getUserId());
|
mwDisposalHandleRecord.setDriverId(list.get(0).getDriverId());
|
mwDisposalHandleRecord.setCarId(list.get(0).getCarId());
|
disposalHandleRecordService.save(mwDisposalHandleRecord);
|
//将收集记录以及子表改变为已处置
|
if (!list.isEmpty()) {
|
List<Long> ids = new ArrayList<>();
|
List<MwDisposalHandleRecordItem> mwDisposalHandleRecordItems = new ArrayList<>();
|
for (MwCollectRecord mwCollectRecord : list) {
|
ids.add(mwCollectRecord.getId());
|
mwCollectRecord.setStatus(4);
|
mwCollectRecord.setDisposalUserId(sysUser.getUserId());
|
mwCollectRecord.setDisposalTime(new Date());
|
MwDisposalHandleRecordItem mwDisposalHandleRecordItem = new MwDisposalHandleRecordItem();
|
mwDisposalHandleRecordItem.setCollectRecordId(mwCollectRecord.getId());
|
mwDisposalHandleRecordItem.setDisposalRecordId(mwDisposalHandleRecord.getId());
|
mwDisposalHandleRecordItems.add(mwDisposalHandleRecordItem);
|
}
|
disposalHandleRecordItemService.saveBatch(mwDisposalHandleRecordItems);
|
collectRecordService.updateBatchById(list);
|
//将接收记录以及子表变为已处置
|
List<MwDisposalRecordItem> list1 = disposalRecordItemService.lambdaQuery().in(MwDisposalRecordItem::getCollectRecordId, ids).list();
|
if (!list1.isEmpty()){
|
List<Long> ids2 = new ArrayList<>();
|
for (MwDisposalRecordItem mwDisposalRecordItem : list1) {
|
mwDisposalRecordItem.setDisposalFlag(1);
|
mwDisposalRecordItem.setDisposalUserId(sysUser.getUserId());
|
mwDisposalRecordItem.setDisposalTime(new Date());
|
ids2.add(mwDisposalRecordItem.getId());
|
}
|
disposalRecordItemService.updateBatchById(list1);
|
List<MwDisposalRecord> list2 = disposalRecordService.lambdaQuery().in(MwDisposalRecord::getId, ids2).list();
|
for (MwDisposalRecord mwDisposalRecord : list2) {
|
mwDisposalRecord.setDisposalFlag(1);
|
mwDisposalRecord.setDisposalTime(new Date());
|
mwDisposalRecord.setDisposalUserId(sysUser.getUserId());
|
}
|
disposalRecordService.updateBatchById(list2);
|
}
|
}
|
return R.ok();
|
}
|
|
|
|
|
@ApiOperation(value = "已装车列表",tags = "运输人员")
|
@PostMapping("/box/has/collect")
|
public R<List<CollectCarTotalUpDto>> hascollect() {
|
//获取车辆id
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
//通过车辆id查询列表
|
List<CollectCarTotalUpDto> list = collectRecordService.carGroup(sysUser.getCarId());
|
return R.ok(list);
|
|
}
|
|
@ApiOperation(value = "已装车列表详情",tags = "运输人员")
|
@PostMapping("/box/has/collect/detail")
|
public R<List<CollectDto>> hascollectdetail(@RequestParam Long hospitalId) {
|
List<CollectDto> collectDtos = collectRecordService.getGroup1("",hospitalId);
|
return R.ok(collectDtos);
|
}
|
|
@ApiOperation("库存信息")
|
@PostMapping("/list")
|
public R<List<CollectDto>> list(String boxNumber) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
List<CollectDto> collectDtos = collectRecordService.getGroup(boxNumber,sysUser.getDepartmentId());
|
return R.ok(collectDtos);
|
}
|
@ApiOperation("收集详情")
|
@PostMapping("/record")
|
public R<List<MwCollectRecord>> record(@RequestParam String boxNumber) {
|
List<MwCollectRecord> list = collectRecordService.lambdaQuery().eq(MwCollectRecord::getBoxNumber, boxNumber).orderByDesc(MwCollectRecord::getCollectTime).list();
|
return R.ok(list);
|
}
|
|
@ApiOperation("收集统计上")
|
@PostMapping("/collect/total")
|
public R<List<CollectTotalUpDto>> collecttotal1(LocalDate date) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
return R.ok(collectRecordService.collectTotal(date,sysUser.getDepartmentId()));
|
}
|
@ApiOperation("收集统计下")
|
@PostMapping("/collect/down/total")
|
public R<Page<MwCollectRecord>> collecttotal2(LocalDate date,@RequestParam Integer pageNum, @RequestParam Integer pageSize) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
Page<MwCollectRecord> page = collectRecordService.lambdaQuery().eq(date!=null,MwCollectRecord::getCollectTime,date).eq(MwCollectRecord::getDepartmentId, sysUser.getDepartmentId()).orderByDesc(MwCollectRecord::getCollectTime).page(Page.of(pageNum, pageSize));
|
return R.ok(page);
|
}
|
|
|
@ApiOperation("库存信息底部统计")
|
@PostMapping("/total")
|
public R<CollectTotalDto> total(String boxNumber) {
|
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
|
CollectTotalDto collectTotalDto = new CollectTotalDto();
|
List<CollectDto> collectDtos = collectRecordService.getGroup(boxNumber,sysUser.getDepartmentId());
|
for (CollectDto collectDto : collectDtos) {
|
collectTotalDto.setBoxNum(collectTotalDto.getBoxNum()+1);
|
collectTotalDto.setCarNum(collectTotalDto.getCarNum()+collectDto.getNum());
|
collectTotalDto.setWeight(collectTotalDto.getWeight().add(collectDto.getWeight()));
|
}
|
return R.ok(collectTotalDto);
|
}
|
|
}
|