完善
This commit is contained in:
1 parent
e3f1b66550
commit
9328cb47f2
8 files changed
+162
-6
No files matched your search
+2
-2
@@ -12,10 +12,10 @@ import java.util.List;
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum OrderTypeEnum {
|
||||
public enum OrderTypeEnum {
|
||||
|
||||
RK("1", "入库"),
|
||||
CK("2", "出库"),
|
||||
CK("2", "出库")
|
||||
;
|
||||
private final String type;
|
||||
private final String description;
|
||||
|
||||
+1
-1
@@ -22,5 +22,5 @@ public class CGDdLinkQueryDTO {
|
||||
* 采购计划单据日期
|
||||
*/
|
||||
@Schema(description="单据日期")
|
||||
private LocalDate dDate;
|
||||
private LocalDate ddDate;
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
|
||||
@Data
|
||||
@Schema(description = "分页查询采购订单条件")
|
||||
public class InventoryLinkQueryDTO {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@Schema(description="订单编号")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 单据日期
|
||||
*/
|
||||
@Schema(description="单据日期")
|
||||
private LocalDate ddDate;
|
||||
|
||||
@Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等")
|
||||
private Integer InventoryType;
|
||||
}
|
||||
+2
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
@@ -86,6 +87,7 @@ public class InventoryRecordSaveDTO {
|
||||
* 订单类型(1入库 2出库)
|
||||
*/
|
||||
@Schema(description="订单类型(1入库 2出库)")
|
||||
@NotNull
|
||||
private String orderType;
|
||||
|
||||
/**
|
||||
|
||||
+3
@@ -29,6 +29,9 @@ public class InventoryRecordVo {
|
||||
private LocalDate inventoryDate;
|
||||
|
||||
|
||||
@Schema(description="商品名称")
|
||||
private String productName;
|
||||
|
||||
/**
|
||||
* 经办人id
|
||||
*/
|
||||
|
||||
+21
-1
@@ -13,6 +13,7 @@ import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
import com.bsd.pjcloud.supermarket.dto.cgdd.CGPlanLinkQueryDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.CGDdLinkQueryDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryLinkQueryDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.*;
|
||||
import com.bsd.pjcloud.supermarket.service.*;
|
||||
@@ -216,11 +217,30 @@ public class SmErpInventoryRecordsController {
|
||||
|
||||
LambdaQueryWrapper<SmErpCgDdEntity> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.like(StrUtil.isNotBlank(cgDdLinkQueryDTO.getCode()),SmErpCgDdEntity::getCode,cgDdLinkQueryDTO.getCode());
|
||||
wrapper.eq(Objects.nonNull(cgDdLinkQueryDTO.getDDate()),SmErpCgDdEntity::getDdDate,cgDdLinkQueryDTO.getDDate());
|
||||
wrapper.eq(Objects.nonNull(cgDdLinkQueryDTO.getDdDate()),SmErpCgDdEntity::getDdDate,cgDdLinkQueryDTO.getDdDate());
|
||||
|
||||
//todo 审核成功条件
|
||||
// wrapper.eq(SmErpCgPlanEntity::getCheckStatus,);
|
||||
return R.ok(smErpCgDdService.pageCgddScope(page, wrapper));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param page 分页对象
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取出入库订单分页" , description = "关联订单" )
|
||||
@GetMapping("/inventory/page" )
|
||||
public R getInventoryPage(@ParameterObject Page page, @ParameterObject InventoryLinkQueryDTO inventoryLinkQueryDTO) {
|
||||
|
||||
LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.like(StrUtil.isNotBlank(inventoryLinkQueryDTO.getCode()),SmErpInventoryRecordsEntity::getInventoryCode,inventoryLinkQueryDTO.getCode());
|
||||
wrapper.eq(Objects.nonNull(inventoryLinkQueryDTO.getDdDate()),SmErpInventoryRecordsEntity::getInventoryDate,inventoryLinkQueryDTO.getDdDate());
|
||||
wrapper.eq(SmErpInventoryRecordsEntity::getInventoryType,inventoryLinkQueryDTO.getInventoryType());
|
||||
//todo 审核成功条件
|
||||
// wrapper.eq(SmErpCgPlanEntity::getCheckStatus,);
|
||||
return R.ok(smErpInventoryRecordsService.pageInventoryScope(page, wrapper));
|
||||
}
|
||||
}
|
||||
+9
@@ -23,4 +23,13 @@ public interface SmErpInventoryRecordsService extends IService<SmErpInventoryRec
|
||||
* @return
|
||||
*/
|
||||
Object pageScope(Page page, LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper);
|
||||
|
||||
|
||||
/**
|
||||
* 关联接口分页
|
||||
* @param page
|
||||
* @param wrapper
|
||||
* @return
|
||||
*/
|
||||
Object pageInventoryScope(Page page, LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper);
|
||||
}
|
||||
+96
-2
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.common.core.util.BeanUtils;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
import com.bsd.pjcloud.supermarket.constant.OrderTypeEnum;
|
||||
import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDSaveItemDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveItemDTO;
|
||||
@@ -14,6 +15,10 @@ import com.bsd.pjcloud.supermarket.entity.*;
|
||||
import com.bsd.pjcloud.supermarket.mapper.*;
|
||||
import com.bsd.pjcloud.supermarket.service.SmErpInventoryRecordsService;
|
||||
import com.bsd.pjcloud.supermarket.service.SmErpStockService;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanItemVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordItemVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordVo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -38,6 +43,8 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
private final SmErpCgDdMapper smErpCgDdMapper;
|
||||
|
||||
private final SmErpSpuMapper smErpSpuMapper;
|
||||
|
||||
private final SmErpUnitMapper smErpUnitMapper;
|
||||
@Override
|
||||
@Transactional
|
||||
public Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO) {
|
||||
@@ -48,7 +55,6 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
smErpCgDdEntity.setCheckStatus("0");
|
||||
smErpCgDdEntity.setDeptId(deptId);
|
||||
int insert = baseMapper.insert(smErpCgDdEntity);
|
||||
|
||||
List<InventoryRecordSaveItemDTO> items = inventoryRecordSaveDTO.getItems();
|
||||
List<SmErpInventoryRecordsItemEntity> cgPlanItemEntities = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class);
|
||||
List<UpdateStockDTO> updateStockDTOS = new ArrayList<>();
|
||||
@@ -58,7 +64,13 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
|
||||
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
|
||||
updateStockDTO.setId(cgPlanItemEntity.getErpSpuId());
|
||||
updateStockDTO.setIncrCount(cgPlanItemEntity.getQuantity());
|
||||
if (smErpCgDdEntity.getOrderType().equals(OrderTypeEnum.RK.getType())){
|
||||
updateStockDTO.setIncrCount(cgPlanItemEntity.getQuantity());
|
||||
}else if (smErpCgDdEntity.getOrderType().equals(OrderTypeEnum.CK.getType())){
|
||||
updateStockDTO.setIncrCount(-cgPlanItemEntity.getQuantity());
|
||||
}else {
|
||||
throw new RuntimeException("订单类型错误");
|
||||
}
|
||||
updateStockDTOS.add(updateStockDTO);
|
||||
}
|
||||
smErpInventoryRecordsItemMapper.insert(cgPlanItemEntities);
|
||||
@@ -110,5 +122,87 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
return pageData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object pageInventoryScope(Page page, LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper) {
|
||||
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
|
||||
|
||||
List<SmErpCgPlanEntity> records = pageData.getRecords();
|
||||
|
||||
// 2. 提前收集所有主表ID(去重处理)
|
||||
Set<Long> planIds = records.stream()
|
||||
.map(SmErpCgPlanEntity::getId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 3. 批量查询所有子表数据(仅1次数据库查询)
|
||||
Map<Long, List<SmErpInventoryRecordsItemEntity>> itemMap;
|
||||
List<SmErpUnitEntity> unitList;
|
||||
List<SmErpInventoryRecordsItemEntity> items;
|
||||
if (!planIds.isEmpty()) {
|
||||
LambdaQueryWrapper<SmErpInventoryRecordsItemEntity> itemWrapper = new LambdaQueryWrapper<>();
|
||||
itemWrapper.in(SmErpInventoryRecordsItemEntity::getInventoryId, planIds);
|
||||
items = smErpInventoryRecordsItemMapper.selectList(itemWrapper);
|
||||
|
||||
//获取采购item下已选择的item的所有包装单位
|
||||
List<Long> spuIds =items.stream().map(vo -> vo.getErpSpuId()).collect(Collectors.toList());
|
||||
unitList = smErpUnitMapper.selectList(new LambdaQueryWrapper<SmErpUnitEntity>().in(SmErpUnitEntity::getSpuId, spuIds));
|
||||
|
||||
// 按planId分组建立映射关系
|
||||
itemMap = items.stream()
|
||||
.collect(Collectors.groupingBy(SmErpInventoryRecordsItemEntity::getInventoryId));
|
||||
|
||||
|
||||
} else {
|
||||
itemMap = Collections.emptyMap();
|
||||
unitList = Collections.emptyList();
|
||||
items= Collections.emptyList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 4. 转换主表VO并关联子表数据
|
||||
List<InventoryRecordVo> voList = BeanUtils.toBean(records,InventoryRecordVo.class);
|
||||
voList.forEach(vo -> {
|
||||
List<InventoryRecordItemVo> itemVos = BeanUtils.toBean(
|
||||
itemMap.getOrDefault(vo.getId(), Collections.emptyList()),
|
||||
InventoryRecordItemVo.class
|
||||
);
|
||||
itemVos.forEach(item -> {
|
||||
List<SmErpUnitEntity> unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(item.getErpSpuId())).collect(Collectors.toList());
|
||||
unitEntities.stream().forEach(unit -> {
|
||||
if(unit.getId().equals(item.getUnitId())){
|
||||
item.setSpec(unit.getSpec());
|
||||
item.setUnit(unit.getUnit());
|
||||
item.setPackageNum(unit.getPackageNum());
|
||||
item.setPurchasePrice(unit.getPurchasePrice());
|
||||
}
|
||||
});
|
||||
});
|
||||
vo.setItems(itemVos);
|
||||
});
|
||||
//商品名称赋值
|
||||
Set<Long> erpSpuIds = items.stream().map(SmErpInventoryRecordsItemEntity::getErpSpuId).collect(Collectors.toSet());
|
||||
List<SmErpSpuEntity> smErpSpuEntities = smErpSpuMapper.selectList(new LambdaQueryWrapper<SmErpSpuEntity>().in(SmErpSpuEntity::getId, erpSpuIds));
|
||||
Map<Long,SmErpSpuEntity> spuMap = smErpSpuEntities.stream().collect(Collectors.toMap(SmErpSpuEntity::getId, spu -> spu));
|
||||
// 分组商品名称
|
||||
Map<Long, List<String>> planGoodsMap = items.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
SmErpInventoryRecordsItemEntity::getInventoryId,
|
||||
Collectors.mapping(
|
||||
item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(),
|
||||
Collectors.toList()
|
||||
)
|
||||
));
|
||||
Page<InventoryRecordVo> resultPage = new Page<>();
|
||||
org.springframework.beans.BeanUtils.copyProperties(pageData, resultPage, "records"); // 复制分页参数
|
||||
|
||||
resultPage.setRecords(voList);
|
||||
// 设置商品名称到主表实体
|
||||
resultPage.getRecords().forEach(plan -> {
|
||||
List<String> names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList());
|
||||
plan.setProductName(String.join(", ", names));
|
||||
});
|
||||
return resultPage;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user