退货指令列表查询:返回结果增加操作历史

This commit is contained in:
1378012178@qq.com 2025-12-05 09:37:26 +08:00
parent d784dc8862
commit d46423ec1c
5 changed files with 154 additions and 29 deletions

View File

@ -0,0 +1,85 @@
package com.nu.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: 进销存-退货-日志
* @Author: jeecg-boot
* @Date: 2025-12-04
* @Version: V1.0
*/
@Data
public class InvoicingThdLogEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* createBy
*/
private String createBy;
/**
* createTime
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* updateBy
*/
private String updateBy;
/**
* updateTime
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 退货单id nu_invoicing_thd_main.id
*/
private String thdId;
/**
* 退货单单号
*/
private String thdNo;
/**
* 退货状态 0待执行 1已开始 2已入库 3已完成
*/
private String status;
/**
* 操作人
*/
private String opeBy;
/**
* 提交时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date opeTime;
/**
* nuid nu_base_info.nu_id
*/
private String nuId;
/**
* 长者id nu_biz_elder_info.id
*/
private String elderId;
private String opeByName;//操作人
private String statusText;//操作节点名称
}

View File

@ -6,6 +6,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @Description: 进销存-退货单-主表
@ -97,4 +98,6 @@ public class InvoicingThdMainEntity implements Serializable {
*/
private String statusText;
private List<InvoicingThdLogEntity> logList;
}

View File

@ -1,10 +1,11 @@
package com.nu.modules.thd.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nu.modules.thd.entity.NuInvoicingThdLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nu.entity.InvoicingThdLogEntity;
import com.nu.modules.thd.entity.NuInvoicingThdLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Description: 进销存-退货-日志
@ -14,4 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface NuInvoicingThdLogMapper extends BaseMapper<NuInvoicingThdLog> {
List<InvoicingThdLogEntity> selectLogsByThdNos(@Param("thdIds") List<String> thdIds);
}

View File

@ -2,4 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.thd.mapper.NuInvoicingThdLogMapper">
</mapper>
<select id="selectLogsByThdNos" resultType="com.nu.entity.InvoicingThdLogEntity">
SELECT
log.*,
emp.realname AS opeByName,
logStatus.item_text AS statusText
FROM nu_invoicing_thd_log log
LEFT JOIN sys_user emp ON log.ope_by = emp.id
LEFT JOIN sys_dict dict ON dict.dict_code = 'thd_status'
LEFT JOIN sys_dict_item logStatus ON logStatus.dict_id = dict.id AND logStatus.item_value = log.status
WHERE log.thd_id IN
<foreach collection="thdIds" item="thdId" open="(" separator="," close=")">
#{thdId}
</foreach>
ORDER BY log.create_time asc
</select>
</mapper>

View File

@ -6,11 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps;
import com.nu.entity.InvoicingOrdersEntity;
import com.nu.entity.InvoicingThdGwcEntity;
import com.nu.entity.InvoicingThdLogEntity;
import com.nu.entity.InvoicingThdMainEntity;
import com.nu.entity.NuKcslEntity;
import com.nu.modules.care.api.IInvoicingOrdersApi;
import com.nu.modules.cgd.entity.NuWarehouseMaterialCrkInfo;
import com.nu.modules.cgd.service.INuWarehouseMaterialCrkInfoService;
import com.nu.modules.invoicing.api.ITuiHuoApi;
@ -19,9 +18,6 @@ import com.nu.modules.nu.entity.NuInvoicingNuKcsl;
import com.nu.modules.nu.mapper.NuInvoicingNuKcslMapper;
import com.nu.modules.nu.service.INuInvoicingNuCrkLogService;
import com.nu.modules.nu.service.INuInvoicingNuKcslService;
import com.nu.modules.qld.entity.NuInvoicingQldInfo;
import com.nu.modules.qld.entity.NuInvoicingQldLog;
import com.nu.modules.qld.entity.NuInvoicingQldMain;
import com.nu.modules.thd.entity.NuInvoicingThdGwc;
import com.nu.modules.thd.entity.NuInvoicingThdInfo;
import com.nu.modules.thd.entity.NuInvoicingThdLog;
@ -44,9 +40,7 @@ import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -81,8 +75,45 @@ public class ThdServiceImpl implements ITuiHuoApi {
@Override
public IPage<InvoicingThdMainEntity> thdList(Integer pageNo, Integer pageSize, InvoicingThdMainEntity dto) {
// 退货指令退货单
Page<NuInvoicingThdMain> page = new Page<>(pageNo, pageSize);
return thdMainMapper.thdList(page, dto);
IPage<InvoicingThdMainEntity> result = thdMainMapper.thdList(page, dto);
// 操作日志
List<InvoicingThdMainEntity> mainList = result.getRecords();
if (!CollectionUtils.isEmpty(mainList)) {
List<String> ids = mainList.stream().map(InvoicingThdMainEntity::getId).collect(Collectors.toList());
List<InvoicingThdLogEntity> logList = thdLogMapper.selectLogsByThdNos(ids);
// thdId 分组日志
Map<String, List<InvoicingThdLogEntity>> logGroupMap = logList.stream()
.collect(Collectors.groupingBy(
InvoicingThdLogEntity::getThdId,
Collectors.collectingAndThen(
Collectors.toList(),
logs -> logs.stream()
.sorted(Comparator.comparing(InvoicingThdLogEntity::getCreateTime)) // 时间正序
.collect(Collectors.collectingAndThen(
Collectors.toList(),
list -> {
int size = list.size();
return size <= 2 ? list : list.subList(size - 2, size);
}
))
)
));
// 为每个主表实体设置对应的日志列表
for (InvoicingThdMainEntity main : mainList) {
List<InvoicingThdLogEntity> logsForMain = logGroupMap.getOrDefault(main.getId(), new ArrayList<>());
main.setLogList(logsForMain);
}
// 将处理后的主表列表放回结果中
result.setRecords(mainList);
}
return result;
}
@Override
@ -213,9 +244,7 @@ public class ThdServiceImpl implements ITuiHuoApi {
//检测购物车各物料是否大于护理单元库存
List<InvoicingThdGwcEntity> validateList = thdGwcMapper.validateNum(dto);
if (!CollectionUtils.isEmpty(validateList)) {
String wls = validateList.stream()
.map(InvoicingThdGwcEntity::getF1)
.collect(Collectors.joining(","));
String wls = validateList.stream().map(InvoicingThdGwcEntity::getF1).collect(Collectors.joining(","));
result.put("status", "wlError");
result.put("message", "以下物料退货数量大于护理单元库存数量:" + wls);
return result;
@ -322,14 +351,7 @@ public class ThdServiceImpl implements ITuiHuoApi {
QueryWrapper<BlWarehouseMaterialInfo> kcQW = new QueryWrapper<>();
kcQW.in("wl_id", wlList);
List<BlWarehouseMaterialInfo> kfnumList = warehouseMaterialInfoService.list(kcQW);
Map<String, Map<String, String>> kfWlSlMap = kfnumList.stream()
.collect(Collectors.groupingBy(
BlWarehouseMaterialInfo::getNuId,
Collectors.toMap(
BlWarehouseMaterialInfo::getWlId,
BlWarehouseMaterialInfo::getKcsl
)
));
Map<String, Map<String, String>> kfWlSlMap = kfnumList.stream().collect(Collectors.groupingBy(BlWarehouseMaterialInfo::getNuId, Collectors.toMap(BlWarehouseMaterialInfo::getWlId, BlWarehouseMaterialInfo::getKcsl)));
List<NuWarehouseMaterialCrkInfo> kfCrkLogList = Lists.newArrayList();
for (int i = 0; i < infoList.size(); i++) {
NuInvoicingThdInfo item = infoList.get(i);
@ -353,8 +375,7 @@ public class ThdServiceImpl implements ITuiHuoApi {
warehouseMaterialCrkInfoService.saveBatch(kfCrkLogList);
//库房库存调整
Map<String, Integer> thdWlNumMap = infoList.stream()
.collect(Collectors.toMap(NuInvoicingThdInfo::getWlId, NuInvoicingThdInfo::getThNum));
Map<String, Integer> thdWlNumMap = infoList.stream().collect(Collectors.toMap(NuInvoicingThdInfo::getWlId, NuInvoicingThdInfo::getThNum));
List<BlWarehouseMaterialInfo> kfUpdateList = Lists.newArrayList();
kfnumList.stream().forEach(item -> {
if (thdWlNumMap.get(item.getWlId()) != null) {
@ -389,8 +410,7 @@ public class ThdServiceImpl implements ITuiHuoApi {
List<NuInvoicingNuKcsl> nuKcslList = invoicingNuKcslService.list(nuKcslQW);
List<NuInvoicingNuKcsl> needUpdateList = Lists.newArrayList();
if (!CollectionUtils.isEmpty(nuKcslList)) {
Map<String, NuInvoicingNuKcsl> nuKcslMap = nuKcslList.stream()
.collect(Collectors.toMap(NuInvoicingNuKcsl::getWlId, kcsl -> kcsl));
Map<String, NuInvoicingNuKcsl> nuKcslMap = nuKcslList.stream().collect(Collectors.toMap(NuInvoicingNuKcsl::getWlId, kcsl -> kcsl));
infoList.stream().forEach(item -> {
NuInvoicingNuKcsl nuInvoicingNuKcsl = new NuInvoicingNuKcsl();
nuInvoicingNuKcsl.setNuId(item.getNuId());