This commit is contained in:
zjf committed 2025-02-26 13:35:24 +08:00
1 parent 53b969600b
commit aeaea0b325
17 files changed
+285 -40

No files matched your search

@@ -12,12 +12,12 @@ import java.util.List;
* 新增一个采购计划
*/
@Data
@Schema(description = "采购计划保存对象")
@Schema(description = "采购保存对象")
public class InventoryRecordSaveDTO {
/**
* 采购计划编号
* 采编号
*/
@Schema(description="编号")
private String inventoryCode;
@@ -74,6 +74,20 @@ public class InventoryRecordSaveDTO {
@Schema(description="关联码")
private String linkCode;
/**
* 单据类型(字典inventory_type)采购入库、采购退货、盘点入库等
*/
@Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等")
private String inventoryType;
/**
* 订单类型(1入库 2出库)
*/
@Schema(description="订单类型(1入库 2出库)")
private String orderType;
/**
* @Link SmCgPlanSaveItemDTO
*/
@@ -161,4 +161,13 @@ public class SmErpCgDdEntity extends Model<SmErpCgDdEntity> {
@Schema(description="关联编码")
private String linkCode;
@Schema(description="商品名称")
@TableField(exist = false)
private String productName;
@Schema(description="经办人名称")
@TableField(exist = false)
public String handlerUserName;
}
@@ -139,4 +139,9 @@ public class SmErpCgPlanEntity extends Model<SmErpCgPlanEntity> {
@TableField(exist = false)
@Schema(description="商品名称")
private String productName;
@Schema(description="经办人名称")
@TableField(exist = false)
public String handlerUserName;
}
@@ -161,4 +161,8 @@ public class SmErpInventoryRecordsEntity extends Model<SmErpInventoryRecordsEnti
*/
@Schema(description="租户编号")
private Long tenantId;
@Schema(description="商品名称")
@TableField(exist = false)
private String productName;
}
@@ -16,17 +16,13 @@ public class SmErpCgDdVo {
@Schema(description ="id")
private Long id;
/**
* 采购计划编号
*/
@Schema(description="采购计划编号")
private String planCode;
/**
* 采购计划单据日期
*/
@Schema(description="采购计划单据日期")
private LocalDate planDate;
@Schema(description="编号")
private String code;
@Schema(description="据日期")
private LocalDate ddDate;
/**
* 仓库id
@@ -92,6 +88,8 @@ public class SmErpCgDdVo {
private String checkStatus;
@Schema(description="商品名称")
private String productName;
/**
* @Link SmErpCgPlanVo
*/
@@ -16,6 +16,10 @@ public class SmErpCgPlanVo {
@Schema(description ="id")
private Long id;
@Schema(description="商品名称")
private String productName;
/**
* 采购计划编号
*/
@@ -66,7 +66,7 @@ public class SmErpCgDdController {
@PreAuthorize("@pms.hasPermission('supermarket_smErpCgDd_view')" )
public R getSmErpCgDdPage(@ParameterObject Page page, @ParameterObject SmErpCgDdEntity smErpCgDd) {
LambdaQueryWrapper<SmErpCgDdEntity> wrapper = Wrappers.lambdaQuery();
return R.ok(smErpCgDdService.page(page, wrapper));
return R.ok(smErpCgDdService.pageScope(page, wrapper));
}
@@ -66,7 +66,7 @@ public class SmErpInventoryRecordsController {
LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper = Wrappers.lambdaQuery();
wrapper.eq(Objects.nonNull(smErpInventoryRecords.getHandlerUserId()),SmErpInventoryRecordsEntity::getHandlerUserId,smErpInventoryRecords.getHandlerUserId());
wrapper.eq(StrUtil.isNotBlank(smErpInventoryRecords.getCheckStatus()),SmErpInventoryRecordsEntity::getCheckStatus,smErpInventoryRecords.getCheckStatus());
return R.ok(smErpInventoryRecordsService.page(page, wrapper));
return R.ok(smErpInventoryRecordsService.pageScope(page, wrapper));
}
@@ -220,7 +220,7 @@ public class SmErpInventoryRecordsController {
//todo 审核成功条件
// wrapper.eq(SmErpCgPlanEntity::getCheckStatus,);
return R.ok(smErpCgDdService.pageScope(page, wrapper));
return R.ok(smErpCgDdService.pageCgddScope(page, wrapper));
}
}
@@ -33,5 +33,8 @@ public interface SmErpCgDdService extends IService<SmErpCgDdEntity> {
* @param wrapper
* @return
*/
Object pageCgddScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper);
Object pageScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper);
}
@@ -1,5 +1,7 @@
package com.bsd.pjcloud.supermarket.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO;
import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity;
@@ -13,4 +15,12 @@ public interface SmErpInventoryRecordsService extends IService<SmErpInventoryRec
* @return
*/
Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO);
/**
* 分页查询
* @param page
* @param wrapper
* @return
*/
Object pageScope(Page page, LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper);
}
@@ -3,6 +3,8 @@ package com.bsd.pjcloud.supermarket.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
@@ -13,13 +15,8 @@ import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDEditItemDTO;
import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDSaveItemDTO;
import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanEditItemDTO;
import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanSaveItemDTO;
import com.bsd.pjcloud.supermarket.entity.SmErpCgDdEntity;
import com.bsd.pjcloud.supermarket.entity.SmErpCgDdItemEntity;
import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity;
import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanItemEntity;
import com.bsd.pjcloud.supermarket.mapper.SmErpCgDdItemMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpCgDdMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpCgPlanMapper;
import com.bsd.pjcloud.supermarket.entity.*;
import com.bsd.pjcloud.supermarket.mapper.*;
import com.bsd.pjcloud.supermarket.service.SmErpCgDdService;
import com.bsd.pjcloud.supermarket.vo.cgdd.SmErpCgDdVo;
import com.bsd.pjcloud.supermarket.vo.cgdd.SmeErpCgDdItemVo;
@@ -49,6 +46,13 @@ public class SmErpCgDdServiceImpl extends ServiceImpl<SmErpCgDdMapper, SmErpCgDd
private final SmErpCgPlanMapper smErpCgPlanMapper;
private final SmErpSpuMapper smErpSpuMapper;
private final RemoteUserService remoteUserService;
private final SmErpUnitMapper smErpUnitMapper;
@Override
@Transactional
public Object saveCGDD(ErpCgDDSaveDTO erpCgDDSaveDTO) {
@@ -98,7 +102,7 @@ public class SmErpCgDdServiceImpl extends ServiceImpl<SmErpCgDdMapper, SmErpCgDd
}
@Override
public Object pageScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper) {
public Object pageCgddScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper) {
// 1. 查询主表分页数据
Page<SmErpCgDdEntity> pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
List<SmErpCgDdEntity> records = pageData.getRecords();
@@ -110,30 +114,112 @@ public class SmErpCgDdServiceImpl extends ServiceImpl<SmErpCgDdMapper, SmErpCgDd
// 3. 批量查询所有子表数据(仅1次数据库查询)
Map<Long, List<SmErpCgDdItemEntity>> itemMap;
List<SmErpCgDdItemEntity> items;
List<SmErpUnitEntity> unitList;
if (!planIds.isEmpty()) {
LambdaQueryWrapper<SmErpCgDdItemEntity> itemWrapper = new LambdaQueryWrapper<>();
itemWrapper.in(SmErpCgDdItemEntity::getHId, planIds);
List<SmErpCgDdItemEntity> items = smErpCgDDItemMapper.selectList(itemWrapper);
items = smErpCgDDItemMapper.selectList(itemWrapper);
// 按planId分组建立映射关系
itemMap = items.stream()
.collect(Collectors.groupingBy(SmErpCgDdItemEntity::getHId));
//获取采购item下已选择的item的所有包装单位
List<Long> spuIds =items.stream().map(vo -> vo.getErpSpuId()).collect(Collectors.toList());
unitList = smErpUnitMapper.selectList(new LambdaQueryWrapper<SmErpUnitEntity>().in(SmErpUnitEntity::getSpuId, spuIds));
} else {
itemMap = Collections.emptyMap();
items= Collections.emptyList();
unitList = Collections.emptyList();
}
// 4. 转换主表VO并关联子表数据
Set<Long> erpSpuIds = items.stream().map(SmErpCgDdItemEntity::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));
List<SmErpCgDdVo> voList = BeanUtils.toBean(records, SmErpCgDdVo.class);
voList.forEach(vo -> {
List<SmeErpCgDdItemVo> itemVos = BeanUtils.toBean(
itemMap.getOrDefault(vo.getId(), Collections.emptyList()),
SmeErpCgDdItemVo.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);
});
// 分组商品名称
Map<Long, List<String>> planGoodsMap = items.stream()
.collect(Collectors.groupingBy(
SmErpCgDdItemEntity::getHId,
Collectors.mapping(
item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(),
Collectors.toList()
)
));
Page<SmErpCgDdVo> 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;
}
@Override
public Object pageScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper) {
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
List<SmErpCgDdEntity> records = pageData.getRecords();
// 2. 提前收集所有主表ID(去重处理)
Set<Long> planIds = records.stream()
.map(SmErpCgDdEntity::getId)
.collect(Collectors.toSet());
//收集userids
Set<Long> userIds = records.stream()
.map(SmErpCgDdEntity::getHandlerUserId)
.collect(Collectors.toSet());
//请求得到所有的userIds
Map<Long, SysUser> userMap = remoteUserService.getUserMap(userIds).getData();
LambdaQueryWrapper<SmErpCgDdItemEntity> smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpCgDdItemEntity::getHId,planIds);
List<SmErpCgDdItemEntity> cgPlanItemEntities = smErpCgDDItemMapper.selectList(smErpCgPlanItemEntityLambdaQueryWrapper);
Set<Long> erpSpuIds = cgPlanItemEntities.stream().map(SmErpCgDdItemEntity::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 = cgPlanItemEntities.stream()
.collect(Collectors.groupingBy(
SmErpCgDdItemEntity::getHId,
Collectors.mapping(
item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(),
Collectors.toList()
)
));
// 设置商品名称到主表实体
records.forEach(plan -> {
SysUser sysUser = userMap.getOrDefault(plan.getHandlerUserId(), new SysUser());
plan.setHandlerUserName(sysUser.getUsername());
List<String> names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList());
plan.setProductName(String.join(", ", names));
});
return pageData;
}
}
@@ -4,6 +4,8 @@ import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
@@ -12,10 +14,7 @@ import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanEditDTO;
import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanSaveDTO;
import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanEditItemDTO;
import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanSaveItemDTO;
import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity;
import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanItemEntity;
import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity;
import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity;
import com.bsd.pjcloud.supermarket.entity.*;
import com.bsd.pjcloud.supermarket.mapper.SmErpCgPlanItemMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpCgPlanMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper;
@@ -46,6 +45,8 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl<SmErpCgPlanMapper, SmErp
private final SmErpUnitMapper smErpUnitMapper;
private final SmErpSpuMapper smErpSpuMapper;
private final RemoteUserService remoteUserService;
@@ -107,10 +108,11 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl<SmErpCgPlanMapper, SmErp
// 3. 批量查询所有子表数据(仅1次数据库查询)
Map<Long, List<SmErpCgPlanItemEntity>> itemMap;
List<SmErpUnitEntity> unitList;
List<SmErpCgPlanItemEntity> items;
if (!planIds.isEmpty()) {
LambdaQueryWrapper<SmErpCgPlanItemEntity> itemWrapper = new LambdaQueryWrapper<>();
itemWrapper.in(SmErpCgPlanItemEntity::getPlanId, planIds);
List<SmErpCgPlanItemEntity> items = smErpCgPlanItemMapper.selectList(itemWrapper);
items = smErpCgPlanItemMapper.selectList(itemWrapper);
//获取采购item下已选择的item的所有包装单位
List<Long> spuIds =items.stream().map(vo -> vo.getErpSpuId()).collect(Collectors.toList());
@@ -124,6 +126,7 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl<SmErpCgPlanMapper, SmErp
} else {
itemMap = Collections.emptyMap();
unitList = Collections.emptyList();
items= Collections.emptyList();
}
@@ -148,10 +151,28 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl<SmErpCgPlanMapper, SmErp
});
vo.setItems(itemVos);
});
//商品名称赋值
Set<Long> erpSpuIds = items.stream().map(SmErpCgPlanItemEntity::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(
SmErpCgPlanItemEntity::getPlanId,
Collectors.mapping(
item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(),
Collectors.toList()
)
));
Page<SmErpCgPlanVo> 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;
}
@@ -164,10 +185,20 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl<SmErpCgPlanMapper, SmErp
Set<Long> planIds = records.stream()
.map(SmErpCgPlanEntity::getId)
.collect(Collectors.toSet());
//收集userids
Set<Long> userIds = records.stream()
.map(SmErpCgPlanEntity::getHandlerUserId)
.collect(Collectors.toSet());
//请求得到所有的userIds
Map<Long, SysUser> userMap = remoteUserService.getUserMap(userIds).getData();
//查询出采购计划下的所有item
LambdaQueryWrapper<SmErpCgPlanItemEntity> smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpCgPlanItemEntity::getPlanId,planIds);
List<SmErpCgPlanItemEntity> cgPlanItemEntities = smErpCgPlanItemMapper.selectList(smErpCgPlanItemEntityLambdaQueryWrapper);
//获取所有的erpspu,分组
Set<Long> erpSpuIds = cgPlanItemEntities.stream().map(SmErpCgPlanItemEntity::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));
@@ -182,8 +213,12 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl<SmErpCgPlanMapper, SmErp
Collectors.toList()
)
));
//设置经办人名称
// 设置商品名称到主表实体
records.forEach(plan -> {
SysUser sysUser = userMap.getOrDefault(plan.getHandlerUserId(), new SysUser());
plan.setHandlerUserName(sysUser.getUsername());
List<String> names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList());
plan.setProductName(String.join(", ", names));
});
@@ -1,26 +1,25 @@
package com.bsd.pjcloud.supermarket.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.dto.cgdd.SmCgDDSaveItemDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveItemDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO;
import com.bsd.pjcloud.supermarket.entity.*;
import com.bsd.pjcloud.supermarket.mapper.SmErpCgDdMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpInventoryRecordsItemMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpInventoryRecordsMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper;
import com.bsd.pjcloud.supermarket.mapper.*;
import com.bsd.pjcloud.supermarket.service.SmErpInventoryRecordsService;
import com.bsd.pjcloud.supermarket.service.SmErpStockService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 出入库记录表
@@ -37,6 +36,8 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
private final SmErpStockService smErpStockService;
private final SmErpCgDdMapper smErpCgDdMapper;
private final SmErpSpuMapper smErpSpuMapper;
@Override
@Transactional
public Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO) {
@@ -75,5 +76,39 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
return insert;
}
@Override
public Object pageScope(Page page, LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper) {
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
List<SmErpInventoryRecordsEntity> records = pageData.getRecords();
// 2. 提前收集所有主表ID(去重处理)
Set<Long> planIds = records.stream()
.map(SmErpInventoryRecordsEntity::getId)
.collect(Collectors.toSet());
LambdaQueryWrapper<SmErpInventoryRecordsItemEntity> smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpInventoryRecordsItemEntity::getInventoryId,planIds);
List<SmErpInventoryRecordsItemEntity> cgPlanItemEntities = smErpInventoryRecordsItemMapper.selectList(smErpCgPlanItemEntityLambdaQueryWrapper);
Set<Long> erpSpuIds = cgPlanItemEntities.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 = cgPlanItemEntities.stream()
.collect(Collectors.groupingBy(
SmErpInventoryRecordsItemEntity::getInventoryId,
Collectors.mapping(
item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(),
Collectors.toList()
)
));
// 设置商品名称到主表实体
records.forEach(plan -> {
List<String> names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList());
plan.setProductName(String.join(", ", names));
});
return pageData;
}
}
@@ -1,6 +1,7 @@
package com.bsd.pjcloud.supermarket.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.common.core.util.BeanUtils;
@@ -9,12 +10,14 @@ import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuQueryDTO;
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuUpdateStockReqDTO;
import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO;
import com.bsd.pjcloud.supermarket.entity.*;
import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper;
import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper;
import com.bsd.pjcloud.supermarket.mapper.SmSpuMapper;
import com.bsd.pjcloud.supermarket.service.SmErpAuxiliaryCodeService;
import com.bsd.pjcloud.supermarket.service.SmErpSpuService;
import com.bsd.pjcloud.supermarket.service.SmErpStockService;
import com.bsd.pjcloud.supermarket.service.SmErpUnitService;
import com.bsd.pjcloud.supermarket.vo.app.SupermarketAppSpuDetailsVo;
import com.bsd.pjcloud.supermarket.vo.app.SupermarketAppUnitVo;
@@ -52,6 +55,8 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
private final SmSpuMapper spuMapper;
private final SmErpStockService smErpStockService;
@Override
@Transactional
public R saveSpu(SmErpSpuEntity supermarketSpu) {
@@ -160,18 +165,30 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
@Override
@Transactional
public R updateSpuStock(SupermarketSpuUpdateStockReqDTO updateStockReqDTO) {
List<UpdateStockDTO> updateStockDTOS=new ArrayList<UpdateStockDTO>();
for (SupermarketSpuUpdateStockReqDTO.Item v : updateStockReqDTO.getItems()) {
// 查询当前库存
SmErpSpuEntity spu = baseMapper.selectById(v.getId());
if (spu == null) {
return R.failed(spu.getProductName() + "商品不存在");
}
if (v.getIncrCount() == 0){
return R.failed("扣减不能为0");
}
LambdaUpdateWrapper<SmErpStockEntity> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(SmErpStockEntity::getErpSpuId, v.getId());
SmErpStockEntity smErpStockEntity = smErpStockMapper.selectOne(lambdaUpdateWrapper);
// 检查库存是否足够
if (v.getIncrCount() < 0 && Math.abs(v.getIncrCount()) > spu.getStock()) {
if (v.getIncrCount() < 0 && Math.abs(v.getIncrCount()) > smErpStockEntity.getCurrentStock()) {
return R.failed(spu.getProductName() + "库存不足,无法完成操作");
}
int i = baseMapper.updateStock(v.getId(), v.getIncrCount());
UpdateStockDTO updateStockDTO = new UpdateStockDTO(v.getId(), v.getIncrCount());
updateStockDTOS.add(updateStockDTO);
}
smErpStockService.updateStock(updateStockDTOS);
return R.ok();
}
@@ -37,7 +37,7 @@
SELECT
stock.inventory_upper_limit,
stock.inventory_lower_limit,
stock.current_stock+stock+base_stock as stock,
stock.current_stock as stock,
spu.product_code,
spu.product_name,
spu.barcode,
@@ -52,7 +52,7 @@
ELSE '1'
END AS warn_type
FROM sm_erp_stock stock
LEFT JOIN sm_erp_spu spu ON stock.spu_id = spu.id
LEFT JOIN sm_erp_spu spu ON stock.erp_spu_id = spu.id
<where>
<!-- 库存预警条件 -->
(stock.current_stock) &lt; stock.inventory_lower_limit or ( stock.current_stock) > stock.inventory_upper_limit
@@ -19,6 +19,7 @@
package com.bsd.pjcloud.admin.api.feign;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bsd.pjcloud.admin.api.dto.UserDTO;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.entity.SysUser;
@@ -26,10 +27,13 @@ import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.feign.annotation.NoToken;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author pjcloud
@@ -163,4 +167,12 @@ public interface RemoteUserService {
@NoToken
@GetMapping("/user/getUserByMobile")
R<List<SysUser>> getUserByMobile(@RequestParam("mobile") String mobile);
/**
* 根据ids获取map集合
* @param userIds
* @return
*/
@GetMapping("/user/getUserMap")
R<Map<Long, SysUser>> getUserMap(@RequestParam(value = "userIds") Set<Long> userIds);
}
@@ -56,6 +56,9 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author pjcloud
@@ -385,7 +388,17 @@ public class SysUserController {
sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(mobile), SysUser::getPhone, mobile);
sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(name), SysUser::getName, name);
List<SimpleUserAllListVO> list = userService.listScope(sysUserLambdaQueryWrapper);
return R.ok(list);
}
@GetMapping("/getUserMap")
@Schema(description = "根据ids获取用户map")
public R<Map<Long, SysUser>> getUserMap(@RequestParam(value = "userIds") Set<Long> userIds) {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.in(SysUser::getUserId, userIds);
List<SysUser> list = userService.list(sysUserLambdaQueryWrapper);
Map<Long, SysUser> userMap = list.stream().collect(Collectors.toMap(SysUser::getUserId, user -> user));
return R.ok(userMap);
}
}