Merge branch 'master' of http://gitea.zianxin.com/zianxin/biz-api-cloud
This commit is contained in:
commit
c2a8b38c7d
29 files changed
+890
-45
No files matched your search
+2
@@ -72,6 +72,8 @@ public class ErpCgDDSaveDTO {
|
||||
private String orderNumber;
|
||||
|
||||
|
||||
@Schema(description="关联码")
|
||||
private String linkCode;
|
||||
/**
|
||||
* @Link SmCgPlanSaveItemDTO
|
||||
*/
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
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 CGDdLinkQueryDTO {
|
||||
|
||||
/**
|
||||
* 采购计划编号
|
||||
*/
|
||||
@Schema(description="采购订单编号")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 采购计划单据日期
|
||||
*/
|
||||
@Schema(description="单据日期")
|
||||
private LocalDate dDate;
|
||||
}
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* 新增一个采购计划
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购计划保存对象")
|
||||
public class InventoryRecordSaveDTO {
|
||||
|
||||
|
||||
/**
|
||||
* 采购计划编号
|
||||
*/
|
||||
@Schema(description="编号")
|
||||
private String inventoryCode;
|
||||
|
||||
/**
|
||||
* 采购计划单据日期
|
||||
*/
|
||||
@Schema(description="单据日期")
|
||||
private LocalDate inventoryDate;
|
||||
|
||||
/**
|
||||
* 仓库id
|
||||
*/
|
||||
@Schema(description="仓库id")
|
||||
private String warehouseId;
|
||||
|
||||
/**
|
||||
* 经办人id
|
||||
*/
|
||||
@Schema(description="经办人id")
|
||||
private Long handlerUserId;
|
||||
|
||||
|
||||
/**
|
||||
* 累计进货数量
|
||||
*/
|
||||
@Schema(description="累计进货数量")
|
||||
private Integer totalNumber;
|
||||
|
||||
/**
|
||||
* 累计总金额
|
||||
*/
|
||||
@Schema(description="累计总金额")
|
||||
private Integer totalAmount;
|
||||
|
||||
/**
|
||||
* 货商
|
||||
*/
|
||||
@Schema(description="货商")
|
||||
private Long supplierId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@Schema(description="备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
@Schema(description="订单编号")
|
||||
private String orderNumber;
|
||||
|
||||
|
||||
@Schema(description="关联码")
|
||||
private String linkCode;
|
||||
/**
|
||||
* @Link SmCgPlanSaveItemDTO
|
||||
*/
|
||||
@Schema(description="采购计划-item")
|
||||
private List<InventoryRecordSaveItemDTO> items;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 采购计划-item
|
||||
*
|
||||
* @author zjf
|
||||
* @date 2025-02-11 17:11:41
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购计划-item")
|
||||
public class InventoryRecordSaveItemDTO {
|
||||
|
||||
|
||||
/**
|
||||
* 库存商品id
|
||||
*/
|
||||
@Schema(description="库存商品id")
|
||||
private Long erpSpuId;
|
||||
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
@Schema(description="数量")
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 进价
|
||||
*/
|
||||
@Schema(description="进价")
|
||||
private Integer unitPrice;
|
||||
|
||||
/**
|
||||
* 累计总金额
|
||||
*/
|
||||
@Schema(description="累计总金额")
|
||||
private Integer totalAmount;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@Schema(description="备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 包装单位id
|
||||
*/
|
||||
@Schema(description="包装单位id")
|
||||
private Long unitId;
|
||||
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 更新库存 DTO
|
||||
*
|
||||
* @author LeeYan9
|
||||
* @since 2022-08-26
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UpdateStockDTO {
|
||||
|
||||
/**
|
||||
* 商品 SKU 编号
|
||||
*/
|
||||
@NotNull(message = "商品 SPU 编号不能为空")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 库存变化数量
|
||||
*
|
||||
* 正数:增加库存
|
||||
* 负数:扣减库存
|
||||
*/
|
||||
@NotNull(message = "库存变化数量不能为空")
|
||||
private Integer incrCount;
|
||||
|
||||
|
||||
}
|
||||
+14
-11
@@ -242,17 +242,6 @@ public class SmErpSpuEntity extends Model<SmErpSpuEntity> {
|
||||
@Schema(description="联营扣率")
|
||||
private BigDecimal jointDeductionRate;
|
||||
|
||||
/**
|
||||
* 库存上限
|
||||
*/
|
||||
@Schema(description="库存上限")
|
||||
private Integer inventoryUpperLimit;
|
||||
|
||||
/**
|
||||
* 库存下限
|
||||
*/
|
||||
@Schema(description="库存下限")
|
||||
private Integer inventoryLowerLimit;
|
||||
|
||||
/**
|
||||
* 毛利率
|
||||
@@ -332,4 +321,18 @@ public class SmErpSpuEntity extends Model<SmErpSpuEntity> {
|
||||
@TableField(exist = false)
|
||||
private List<SmErpUnitEntity> smErpUnitEntityList;
|
||||
|
||||
/**
|
||||
* 库存上限
|
||||
*/
|
||||
@Schema(description="库存上限")
|
||||
@TableField(exist = false)
|
||||
private Integer inventoryUpperLimit;
|
||||
|
||||
/**
|
||||
* 库存下限
|
||||
*/
|
||||
@Schema(description="库存下限")
|
||||
@TableField(exist = false)
|
||||
private Integer inventoryLowerLimit;
|
||||
|
||||
}
|
||||
+16
-1
@@ -33,7 +33,7 @@ public class SmErpStockEntity extends Model<SmErpStockEntity> {
|
||||
* 基础库存数量
|
||||
*/
|
||||
@Schema(description="基础库存数量")
|
||||
private Integer baseStcok;
|
||||
private Integer baseStock;
|
||||
|
||||
/**
|
||||
* 乐观锁版本号
|
||||
@@ -88,4 +88,19 @@ public class SmErpStockEntity extends Model<SmErpStockEntity> {
|
||||
*/
|
||||
@Schema(description="租户编号")
|
||||
private Long tenantId;
|
||||
|
||||
@Schema(description="当前库存")
|
||||
private Integer currentStock;
|
||||
|
||||
/**
|
||||
* 库存上限
|
||||
*/
|
||||
@Schema(description="库存上限")
|
||||
private Integer inventoryUpperLimit;
|
||||
|
||||
/**
|
||||
* 库存下限
|
||||
*/
|
||||
@Schema(description="库存下限")
|
||||
private Integer inventoryLowerLimit;
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
package com.bsd.pjcloud.supermarket.vo.inventoryrecord;
|
||||
|
||||
import com.bsd.pjcloud.common.core.util.MoneyDeserializer;
|
||||
import com.bsd.pjcloud.common.core.util.MoneySerializer;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgplan.ErpUnitVo;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购计划-item
|
||||
*
|
||||
* @author zjf
|
||||
* @date 2025-02-11 17:11:41
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购计划-item")
|
||||
public class InventoryRecordItemVo {
|
||||
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 库存商品id
|
||||
*/
|
||||
@Schema(description="库存商品id")
|
||||
private Long erpSpuId;
|
||||
|
||||
/**
|
||||
* 主表id
|
||||
*/
|
||||
@Schema(description="主表id")
|
||||
private Long inventoryId;
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
@Schema(description="数量")
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 进价
|
||||
*/
|
||||
@Schema(description="进价")
|
||||
@JsonSerialize(using = MoneySerializer.class) // 分 -> 元
|
||||
@JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分
|
||||
private Integer unitPrice;
|
||||
|
||||
/**
|
||||
* 累计总金额
|
||||
*/
|
||||
@Schema(description="累计总金额")
|
||||
@JsonSerialize(using = MoneySerializer.class) // 分 -> 元
|
||||
@JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分
|
||||
private Integer totalAmount;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@Schema(description="备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 包装单位id
|
||||
*/
|
||||
@Schema(description="包装单位id")
|
||||
private Long unitId;
|
||||
|
||||
|
||||
/**
|
||||
* 规格
|
||||
*/
|
||||
@Schema(description="规格")
|
||||
private String spec;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
@Schema(description="单位")
|
||||
private String unit;
|
||||
|
||||
/**
|
||||
* 装数
|
||||
*/
|
||||
@Schema(description="装数")
|
||||
private Integer packageNum;
|
||||
|
||||
/**
|
||||
* 进价(分为单位)
|
||||
*/
|
||||
@Schema(description="进价(分为单位)")
|
||||
@JsonSerialize(using = MoneySerializer.class) // 分 -> 元
|
||||
@JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分
|
||||
private Integer purchasePrice;
|
||||
|
||||
@Schema(description = "包装对象集合对象")
|
||||
private List<ErpUnitVo> erpUnitVos;
|
||||
|
||||
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
package com.bsd.pjcloud.supermarket.vo.inventoryrecord;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "采购根据id查询-编辑回显 vo")
|
||||
@Data
|
||||
public class InventoryRecordVo {
|
||||
|
||||
@Schema(description ="id")
|
||||
private Long id;
|
||||
/**
|
||||
* 采购计划编号
|
||||
*/
|
||||
@Schema(description="编号")
|
||||
private String inventoryCode;
|
||||
|
||||
/**
|
||||
* 采购计划单据日期
|
||||
*/
|
||||
@Schema(description="单据日期")
|
||||
private LocalDate inventoryDate;
|
||||
|
||||
|
||||
/**
|
||||
* 经办人id
|
||||
*/
|
||||
@Schema(description="经办人id")
|
||||
private Long handlerUserId;
|
||||
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@Schema(description="备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(description="创建人")
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(description="创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 审批状态
|
||||
*/
|
||||
@Schema(description="审批状态")
|
||||
private String checkStatus;
|
||||
|
||||
|
||||
/**
|
||||
* @link InventoryRecordItemVo
|
||||
*/
|
||||
@Schema(description="item")
|
||||
private List<InventoryRecordItemVo> items;
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.bsd.pjcloud.supermarket.vo.stockwarn;
|
||||
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StockWarnVO extends SmErpSpuEntity {
|
||||
private String warnType; // 预警类型字段
|
||||
|
||||
private Long spuId;
|
||||
|
||||
private Integer baseStock;
|
||||
|
||||
private Integer currentStock;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.bsd.pjcloud.supermarket.vo.unit;
|
||||
|
||||
import com.bsd.pjcloud.common.core.util.MoneyDeserializer;
|
||||
import com.bsd.pjcloud.common.core.util.MoneySerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "包装单位价格信息")
|
||||
public class UnitPriceInfo {
|
||||
|
||||
/**
|
||||
* 零售价/单位分
|
||||
*/
|
||||
@Schema(description="零售价/单位分")
|
||||
private Integer retailPrice;
|
||||
|
||||
|
||||
/**
|
||||
* 促销价
|
||||
*/
|
||||
@Schema(description="促销价")
|
||||
private Integer promotionPrice;
|
||||
|
||||
}
|
||||
+50
-25
@@ -6,11 +6,19 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.util.BeanUtils;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
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.InventoryRecordSaveDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.*;
|
||||
import com.bsd.pjcloud.supermarket.service.*;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgplan.ErpUnitVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordItemVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordVo;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -43,6 +51,7 @@ public class SmErpInventoryRecordsController {
|
||||
private final SmErpCgPlanService smErpCgPlanService;
|
||||
private final SmErpSpuService smErpSpuService;
|
||||
private final SmErpUnitService smErpUnitService;
|
||||
private final SmErpCgDdService smErpCgDdService;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
@@ -81,47 +90,43 @@ public class SmErpInventoryRecordsController {
|
||||
|
||||
|
||||
//
|
||||
// SmErpCgPlanVo bean = BeanUtils.toBean(smErpCgPlanEntity, SmErpCgPlanVo.class, (source) -> {
|
||||
// List<SmeErpCgPlanItemVo> smeErpCgPlanItemVos = BeanUtils.toBean(list, SmeErpCgPlanItemVo.class);
|
||||
// smeErpCgPlanItemVos.stream().forEach(item -> {
|
||||
// List<SmErpUnitEntity> unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(item.getErpSpuId())).collect(Collectors.toList());
|
||||
//
|
||||
//// unitList.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());
|
||||
//// }
|
||||
//// });
|
||||
// item.setErpUnitVos(BeanUtils.toBean(unitEntities, ErpUnitVo.class));
|
||||
// });
|
||||
// source.setItems(smeErpCgPlanItemVos);
|
||||
// });
|
||||
InventoryRecordVo bean = BeanUtils.toBean(smErpInventoryRecordsEntity, InventoryRecordVo.class, (source) -> {
|
||||
List<InventoryRecordItemVo> smeErpCgPlanItemVos = BeanUtils.toBean(list, InventoryRecordItemVo.class);
|
||||
smeErpCgPlanItemVos.stream().forEach(item -> {
|
||||
List<SmErpUnitEntity> unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(item.getErpSpuId())).collect(Collectors.toList());
|
||||
|
||||
// unitList.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());
|
||||
// }
|
||||
// });
|
||||
item.setErpUnitVos(BeanUtils.toBean(unitEntities, ErpUnitVo.class));
|
||||
});
|
||||
source.setItems(smeErpCgPlanItemVos);
|
||||
});
|
||||
|
||||
// voList.stream().forEach(vo -> {
|
||||
// bean.stream().forEach(vo -> {
|
||||
// List<SmErpUnitEntity> unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(vo.getId())).collect(Collectors.toList());
|
||||
// vo.setErpUnitVos(BeanUtils.toBean(unitEntities, ErpUnitVo.class));
|
||||
// });
|
||||
|
||||
|
||||
|
||||
// return R.ok(bean);
|
||||
return R.ok();
|
||||
return R.ok(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增出入库记录表
|
||||
* @param smErpInventoryRecords 出入库记录表
|
||||
* @param inventoryRecordSaveDTO 出入库记录表
|
||||
* @return R
|
||||
*/
|
||||
@Operation(summary = "新增出入库记录表" , description = "新增出入库记录表" )
|
||||
@SysLog("新增出入库记录表" )
|
||||
@PostMapping
|
||||
@PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_add')" )
|
||||
public R save(@RequestBody SmErpInventoryRecordsEntity smErpInventoryRecords) {
|
||||
return R.ok(smErpInventoryRecordsService.save(smErpInventoryRecords));
|
||||
public R save(@RequestBody InventoryRecordSaveDTO inventoryRecordSaveDTO) {
|
||||
return R.ok(smErpInventoryRecordsService.saveInventoryRecord(inventoryRecordSaveDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -198,4 +203,24 @@ public class SmErpInventoryRecordsController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param page 分页对象
|
||||
* @param cgDdLinkQueryDTO 采购计划
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "采购订单分页查询" , description = "关联采购订单" )
|
||||
@GetMapping("/cgdd/page" )
|
||||
public R getSmErpCgPlanPage(@ParameterObject Page page, @ParameterObject CGDdLinkQueryDTO cgDdLinkQueryDTO) {
|
||||
|
||||
LambdaQueryWrapper<SmErpCgDdEntity> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.like(StrUtil.isNotBlank(cgDdLinkQueryDTO.getCode()),SmErpCgDdEntity::getCode,cgDdLinkQueryDTO.getCode());
|
||||
wrapper.eq(Objects.nonNull(cgDdLinkQueryDTO.getDDate()),SmErpCgDdEntity::getDDate,cgDdLinkQueryDTO.getDDate());
|
||||
|
||||
//todo 审核成功条件
|
||||
// wrapper.eq(SmErpCgPlanEntity::getCheckStatus,);
|
||||
return R.ok(smErpCgDdService.pageScope(page, wrapper));
|
||||
}
|
||||
|
||||
}
|
||||
+24
-1
@@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.util.BeanUtils;
|
||||
@@ -20,6 +22,9 @@ import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity;
|
||||
import com.bsd.pjcloud.supermarket.service.*;
|
||||
import com.bsd.pjcloud.supermarket.vo.app.SupermarketAppSpuVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.erpspu.SmErpSpuSimpleVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO;
|
||||
import com.github.yulichang.toolkit.JoinWrappers;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
|
||||
@@ -107,7 +112,9 @@ public class SmErpSpuController {
|
||||
LambdaQueryWrapper<SmErpStockEntity> smErpStockEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
smErpStockEntityLambdaQueryWrapper.eq(SmErpStockEntity::getSpuId, id);
|
||||
SmErpStockEntity smErpStockEntity = smErpStockService.list(smErpStockEntityLambdaQueryWrapper).get(0);
|
||||
smErpSpuEntity.setStock(smErpStockEntity.getBaseStcok());
|
||||
smErpSpuEntity.setStock(smErpStockEntity.getBaseStock());
|
||||
smErpStockEntity.setInventoryLowerLimit(smErpStockEntity.getInventoryLowerLimit());
|
||||
smErpStockEntity.setInventoryUpperLimit(smErpStockEntity.getInventoryUpperLimit());
|
||||
List<SmErpUnitEntity> list = smErpUnitService.list(new LambdaQueryWrapper<SmErpUnitEntity>().eq(SmErpUnitEntity::getSpuId, id));
|
||||
smErpSpuEntity.setSmErpUnitEntityList(list);
|
||||
smErpSpuEntity.setSmErpAuxiliaryCodeEntityList(
|
||||
@@ -185,6 +192,22 @@ public class SmErpSpuController {
|
||||
return R.ok(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param page 分页对象
|
||||
* @param supermarketSpu 商品spu
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "分页查询库存预警" , description = "分页查询库存预警" )
|
||||
@GetMapping("/warnStock/page" )
|
||||
@PreAuthorize("@pms.hasPermission('supermarket_supermarketSpu_view')" )
|
||||
public R getWarnStockPage(@ParameterObject Page page, @ParameterObject SmErpSpuEntity supermarketSpu) {
|
||||
|
||||
IPage iPage = smErpStockService.selectWarnStockWithSpu(page, supermarketSpu);
|
||||
|
||||
return R.ok(iPage);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// --------APP-----------------
|
||||
|
||||
+28
@@ -12,6 +12,7 @@ import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity;
|
||||
import com.bsd.pjcloud.supermarket.service.SmErpUnitService;
|
||||
import com.bsd.pjcloud.supermarket.vo.sm.smspu.SmErpUnitVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.unit.UnitPriceInfo;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -141,6 +142,18 @@ public class SmErpUnitController {
|
||||
return smErpUnitService.list(Wrappers.lambdaQuery(supermarketUnit).in(ArrayUtil.isNotEmpty(ids), SmErpUnitEntity::getId, ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过条码查询商品信息和包装单位信息
|
||||
* @param barCode
|
||||
* @return R
|
||||
*///todo 还没做,后面做吧
|
||||
// @Operation(summary = "条码查询商品信息和包装单位信息" , description = "添加子单据扫码枪获取信息" )
|
||||
// @PostMapping("/ad/getSupermarketUnits" )
|
||||
// public R getSupermarketUnits(@RequestParam("barCode")String barCode) {
|
||||
// List<UnitPriceInfo> unitPriceInfos=smErpUnitService.listScope(barCode);
|
||||
// return R.ok(unitPriceInfos);
|
||||
// }
|
||||
|
||||
|
||||
// -----------------APP------------------------------
|
||||
|
||||
@@ -155,4 +168,19 @@ public class SmErpUnitController {
|
||||
return R.ok(smErpUnitService.getSupermarketUnitsWithSpu(ids));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------AD----------------------
|
||||
|
||||
/**
|
||||
* 通过条码查询对应的包装单位商品价格信息
|
||||
* @param barCode
|
||||
* @return R
|
||||
*/
|
||||
@Operation(summary = "条码查询对应的包装单位商品价格" , description = "条码查询对应的包装单位商品价格" )
|
||||
@PostMapping("/ad/getSupermarketUnits" )
|
||||
public R getSupermarketUnits(@RequestParam("barCode")String barCode) {
|
||||
List<UnitPriceInfo> unitPriceInfos=smErpUnitService.listScope(barCode);
|
||||
return R.ok(unitPriceInfos);
|
||||
}
|
||||
}
|
||||
+11
@@ -1,11 +1,22 @@
|
||||
package com.bsd.pjcloud.supermarket.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpStockEntity;
|
||||
import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO;
|
||||
import com.github.houbb.heaven.annotation.reflect.Param;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface SmErpStockMapper extends PjcloudBaseMapper<SmErpStockEntity> {
|
||||
|
||||
|
||||
IPage<StockWarnVO> selectWarnStockWithSpu(Page<SmErpStockEntity> page, @Param("param") SmErpSpuEntity param);
|
||||
|
||||
|
||||
}
|
||||
+12
@@ -1,9 +1,12 @@
|
||||
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.cgdd.ErpCgDDEditDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDSaveDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpCgDdEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity;
|
||||
|
||||
public interface SmErpCgDdService extends IService<SmErpCgDdEntity> {
|
||||
|
||||
@@ -22,4 +25,13 @@ public interface SmErpCgDdService extends IService<SmErpCgDdEntity> {
|
||||
* @return
|
||||
*/
|
||||
Object updateByErpCgDdEditDTO(ErpCgDDEditDTO erpCgDDEditDTO);
|
||||
|
||||
|
||||
/**
|
||||
* 关联采购订单分页查询
|
||||
* @param page
|
||||
* @param wrapper
|
||||
* @return
|
||||
*/
|
||||
Object pageScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper);
|
||||
}
|
||||
+8
@@ -1,8 +1,16 @@
|
||||
package com.bsd.pjcloud.supermarket.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity;
|
||||
|
||||
public interface SmErpInventoryRecordsService extends IService<SmErpInventoryRecordsEntity> {
|
||||
|
||||
|
||||
/**
|
||||
* 插入出入库信息
|
||||
* @param inventoryRecordSaveDTO
|
||||
* @return
|
||||
*/
|
||||
Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO);
|
||||
}
|
||||
+19
@@ -1,8 +1,27 @@
|
||||
package com.bsd.pjcloud.supermarket.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpStockEntity;
|
||||
import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO;
|
||||
import com.github.houbb.heaven.annotation.reflect.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SmErpStockService extends IService<SmErpStockEntity> {
|
||||
|
||||
|
||||
|
||||
IPage<StockWarnVO> selectWarnStockWithSpu(Page<SmErpStockEntity> page,SmErpSpuEntity param);
|
||||
|
||||
|
||||
/**
|
||||
* 更新库存
|
||||
* @param updateStockDTOS
|
||||
* @return
|
||||
*/
|
||||
void updateStock(List<UpdateStockDTO> updateStockDTOS);
|
||||
}
|
||||
+10
@@ -1,8 +1,10 @@
|
||||
package com.bsd.pjcloud.supermarket.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity;
|
||||
import com.bsd.pjcloud.supermarket.vo.erp.SmErpUnitWithSpuVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.unit.UnitPriceInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -15,4 +17,12 @@ public interface SmErpUnitService extends IService<SmErpUnitEntity> {
|
||||
* @return
|
||||
*/
|
||||
List<SmErpUnitWithSpuVo> getSupermarketUnitsWithSpu(List<Long> ids);
|
||||
|
||||
|
||||
/**
|
||||
* 根据条形码获取价格信息
|
||||
* @param barCode
|
||||
* @return
|
||||
*/
|
||||
List<UnitPriceInfo> listScope(String barCode);
|
||||
}
|
||||
+50
@@ -1,8 +1,11 @@
|
||||
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.core.util.R;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDEditDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDSaveDTO;
|
||||
@@ -17,10 +20,17 @@ 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.service.SmErpCgDdService;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgdd.SmErpCgDdVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgdd.SmeErpCgDdItemVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanItemVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanVo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -34,6 +44,7 @@ import java.util.stream.Collectors;
|
||||
public class SmErpCgDdServiceImpl extends ServiceImpl<SmErpCgDdMapper, SmErpCgDdEntity> implements SmErpCgDdService {
|
||||
|
||||
private final SmErpCgDdItemMapper smErpCgDDItemMapper;
|
||||
|
||||
@Override
|
||||
public Object saveCGDD(ErpCgDDSaveDTO erpCgDDSaveDTO) {
|
||||
Long deptId = SecurityUtils.getUser().getDeptId();
|
||||
@@ -73,4 +84,43 @@ public class SmErpCgDdServiceImpl extends ServiceImpl<SmErpCgDdMapper, SmErpCgDd
|
||||
smErpCgDDItemMapper.insertOrUpdate(cgPlanItemEntities);
|
||||
return R.ok(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object pageScope(Page page, LambdaQueryWrapper<SmErpCgDdEntity> wrapper) {
|
||||
// 1. 查询主表分页数据
|
||||
Page<SmErpCgDdEntity> 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());
|
||||
|
||||
// 3. 批量查询所有子表数据(仅1次数据库查询)
|
||||
Map<Long, List<SmErpCgDdItemEntity>> itemMap;
|
||||
if (!planIds.isEmpty()) {
|
||||
LambdaQueryWrapper<SmErpCgDdItemEntity> itemWrapper = new LambdaQueryWrapper<>();
|
||||
itemWrapper.in(SmErpCgDdItemEntity::getHId, planIds);
|
||||
List<SmErpCgDdItemEntity> items = smErpCgDDItemMapper.selectList(itemWrapper);
|
||||
// 按planId分组建立映射关系
|
||||
itemMap = items.stream()
|
||||
.collect(Collectors.groupingBy(SmErpCgDdItemEntity::getHId));
|
||||
} else {
|
||||
itemMap = Collections.emptyMap();
|
||||
}
|
||||
|
||||
// 4. 转换主表VO并关联子表数据
|
||||
List<SmErpCgDdVo> voList = BeanUtils.toBean(records, SmErpCgDdVo.class);
|
||||
voList.forEach(vo -> {
|
||||
List<SmeErpCgDdItemVo> itemVos = BeanUtils.toBean(
|
||||
itemMap.getOrDefault(vo.getId(), Collections.emptyList()),
|
||||
SmeErpCgDdItemVo.class
|
||||
);
|
||||
vo.setItems(itemVos);
|
||||
});
|
||||
Page<SmErpCgDdVo> resultPage = new Page<>();
|
||||
org.springframework.beans.BeanUtils.copyProperties(pageData, resultPage, "records"); // 复制分页参数
|
||||
resultPage.setRecords(voList);
|
||||
return resultPage;
|
||||
}
|
||||
}
|
||||
+56
@@ -1,10 +1,28 @@
|
||||
package com.bsd.pjcloud.supermarket.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.common.core.util.BeanUtils;
|
||||
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.SmErpCgDdEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpCgDdItemEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsItemEntity;
|
||||
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.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;
|
||||
|
||||
/**
|
||||
* 出入库记录表
|
||||
*
|
||||
@@ -12,5 +30,43 @@ import org.springframework.stereotype.Service;
|
||||
* @date 2025-02-10 12:15:37
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventoryRecordsMapper, SmErpInventoryRecordsEntity> implements SmErpInventoryRecordsService {
|
||||
|
||||
private final SmErpInventoryRecordsItemMapper smErpInventoryRecordsItemMapper;
|
||||
|
||||
private final SmErpStockService smErpStockService;
|
||||
@Override
|
||||
@Transactional
|
||||
public Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO) {
|
||||
|
||||
Long deptId = SecurityUtils.getUser().getDeptId();
|
||||
SmErpInventoryRecordsEntity smErpCgDdEntity = BeanUtils.toBean(inventoryRecordSaveDTO, SmErpInventoryRecordsEntity.class);
|
||||
smErpCgDdEntity.setDeptId(deptId);
|
||||
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<>();
|
||||
for (SmErpInventoryRecordsItemEntity cgPlanItemEntity : cgPlanItemEntities) {
|
||||
cgPlanItemEntity.setInventoryId(smErpCgDdEntity.getId());
|
||||
cgPlanItemEntity.setDeptId(deptId);
|
||||
|
||||
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
|
||||
updateStockDTO.setId(cgPlanItemEntity.getErpSpuId());
|
||||
updateStockDTO.setIncrCount(cgPlanItemEntity.getQuantity());
|
||||
updateStockDTOS.add(updateStockDTO);
|
||||
}
|
||||
smErpInventoryRecordsItemMapper.insert(cgPlanItemEntities);
|
||||
|
||||
//todo 实际上应该审批后才会入库
|
||||
//更新库存
|
||||
smErpStockService.updateStock(updateStockDTOS);
|
||||
|
||||
return insert;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+6
-2
@@ -61,7 +61,9 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
//库存表
|
||||
SmErpStockEntity smErpStockEntity = new SmErpStockEntity();
|
||||
smErpStockEntity.setSpuId(supermarketSpu.getId());
|
||||
smErpStockEntity.setBaseStcok(supermarketSpu.getStock());
|
||||
smErpStockEntity.setBaseStock(supermarketSpu.getStock());
|
||||
smErpStockEntity.setInventoryLowerLimit(supermarketSpu.getInventoryLowerLimit());
|
||||
smErpStockEntity.setInventoryUpperLimit(supermarketSpu.getInventoryUpperLimit());
|
||||
smErpStockMapper.insert(smErpStockEntity);
|
||||
|
||||
//新增包装类型
|
||||
@@ -94,7 +96,9 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
LambdaQueryWrapper<SmErpStockEntity> smErpStockEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
smErpStockEntityLambdaQueryWrapper.eq(SmErpStockEntity::getSpuId, supermarketSpu.getId());
|
||||
SmErpStockEntity smErpStockEntity = new SmErpStockEntity();
|
||||
smErpStockEntity.setBaseStcok(stock);
|
||||
smErpStockEntity.setBaseStock(stock);
|
||||
smErpStockEntity.setInventoryLowerLimit(supermarketSpu.getInventoryLowerLimit());
|
||||
smErpStockEntity.setInventoryUpperLimit(supermarketSpu.getInventoryUpperLimit());
|
||||
smErpStockMapper.update(smErpStockEntity,smErpStockEntityLambdaQueryWrapper);
|
||||
|
||||
//新增包装类型
|
||||
|
||||
+46
@@ -1,10 +1,23 @@
|
||||
package com.bsd.pjcloud.supermarket.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveItemDTO;
|
||||
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity;
|
||||
import com.bsd.pjcloud.supermarket.entity.SmErpStockEntity;
|
||||
import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper;
|
||||
import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper;
|
||||
import com.bsd.pjcloud.supermarket.service.SmErpStockService;
|
||||
import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品包装单位(sku)
|
||||
*
|
||||
@@ -12,5 +25,38 @@ import org.springframework.stereotype.Service;
|
||||
* @date 2025-01-23 13:50:24
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class SmErpStockServiceImpl extends ServiceImpl<SmErpStockMapper, SmErpStockEntity> implements SmErpStockService {
|
||||
|
||||
private final SmErpSpuMapper smErpSpuMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<StockWarnVO> selectWarnStockWithSpu(Page<SmErpStockEntity> page, SmErpSpuEntity param) {
|
||||
return baseMapper.selectWarnStockWithSpu(page, param);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateStock(List<UpdateStockDTO> updateStockDTOS) {
|
||||
// 更新库存(手动乐观锁)
|
||||
for (UpdateStockDTO item : updateStockDTOS) {
|
||||
// 1. 先查询当前版本号
|
||||
LambdaQueryWrapper<SmErpStockEntity> smErpStockEntityLambdaQueryWrapper = new LambdaQueryWrapper<SmErpStockEntity>();
|
||||
smErpStockEntityLambdaQueryWrapper.eq(SmErpStockEntity::getSpuId,item.getId());
|
||||
SmErpStockEntity smErpStockEntity = baseMapper.selectOne(smErpStockEntityLambdaQueryWrapper);
|
||||
|
||||
LambdaQueryWrapper<SmErpStockEntity> updateStockWithLockWrapper = new LambdaQueryWrapper<SmErpStockEntity>();
|
||||
updateStockWithLockWrapper.eq(SmErpStockEntity::getSpuId,item.getId());
|
||||
updateStockWithLockWrapper.eq(SmErpStockEntity::getVersion,smErpStockEntity.getVersion());
|
||||
SmErpStockEntity updateSmErpStockEntity = new SmErpStockEntity();
|
||||
updateSmErpStockEntity.setCurrentStock(smErpStockEntity.getCurrentStock()+item.getIncrCount());
|
||||
int update = baseMapper.update(updateSmErpStockEntity, updateStockWithLockWrapper);
|
||||
// 3. 检查更新结果
|
||||
if (update == 0) {
|
||||
throw new RuntimeException("库存更新冲突,请重试操作");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+13
@@ -1,10 +1,14 @@
|
||||
package com.bsd.pjcloud.supermarket.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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.supermarket.entity.SmErpUnitEntity;
|
||||
import com.bsd.pjcloud.supermarket.mapper.SmErpUnitMapper;
|
||||
import com.bsd.pjcloud.supermarket.service.SmErpUnitService;
|
||||
import com.bsd.pjcloud.supermarket.vo.erp.SmErpUnitWithSpuVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.unit.UnitPriceInfo;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
@@ -22,4 +26,13 @@ public class SmErpUnitServiceImpl extends ServiceImpl<SmErpUnitMapper, SmErpUnit
|
||||
|
||||
return baseMapper.getSupermarketUnitsWithSpu(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UnitPriceInfo> listScope(String barCode) {
|
||||
LambdaQueryWrapper<SmErpUnitEntity> smErpUnitEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
smErpUnitEntityLambdaQueryWrapper.eq(SmErpUnitEntity::getBarCode,barCode);
|
||||
List<SmErpUnitEntity> smErpUnitEntities = baseMapper.selectListByScope(smErpUnitEntityLambdaQueryWrapper, DataScope.of());
|
||||
List<UnitPriceInfo> bean = BeanUtils.toBean(smErpUnitEntities, UnitPriceInfo.class);
|
||||
return bean;
|
||||
}
|
||||
}
|
||||
+51
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
<resultMap id="smErpStockMap" type="com.bsd.pjcloud.supermarket.entity.SmErpStockEntity">
|
||||
<id property="id" column="id"/>
|
||||
<result property="baseStcok" column="base_stcok"/>
|
||||
<result property="baseStock" column="base_stcok"/>
|
||||
<result property="version" column="version"/>
|
||||
<result property="spuId" column="spu_id"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
@@ -14,5 +14,55 @@
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="tenantId" column="tenant_id"/>
|
||||
<result property="currentStock" column="current_stock"/>
|
||||
<result property="inventoryUpperLimit" column="inventory_upper_limit"/>
|
||||
<result property="inventoryLowerLimit" column="inventory_lower_limit"/>
|
||||
</resultMap>
|
||||
<resultMap id="stockWarnResultMap" type="com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO">
|
||||
<!-- 库存表基础字段 -->
|
||||
<id column="id" property="id"/>
|
||||
<result column="spu_id" property="spuId"/>
|
||||
<result column="base_stock" property="baseStock"/>
|
||||
<result column="current_stock" property="currentStock"/>
|
||||
<result column="inventory_upper_limit" property="inventoryUpperLimit"/>
|
||||
<result column="inventory_lower_limit" property="inventoryLowerLimit"/>
|
||||
|
||||
<!-- 预警类型计算字段 -->
|
||||
<result column="warn_type" property="warnType"/>
|
||||
|
||||
<!-- SPU表关联字段 -->
|
||||
<result column="product_code" property="productCode"/>
|
||||
<result column="product_name" property="productName"/>
|
||||
<result column="barcode" property="barcode"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectWarnStockWithSpu" resultMap="stockWarnResultMap">
|
||||
SELECT
|
||||
stock.*,
|
||||
spu.product_code,
|
||||
spu.product_name,
|
||||
spu.barcode,
|
||||
CASE
|
||||
WHEN (stock.base_stock + stock.current_stock) > stock.inventory_upper_limit THEN '2'
|
||||
ELSE '1'
|
||||
END AS warn_type
|
||||
FROM sm_erp_stock stock
|
||||
LEFT JOIN sm_erp_spu spu ON stock.spu_id = spu.id
|
||||
<where>
|
||||
<!-- 库存预警条件 -->
|
||||
(stock.base_stock + stock.current_stock) < stock.inventory_lower_limit or (stock.base_stock + stock.current_stock) > stock.inventory_upper_limit
|
||||
|
||||
<if test="param.productCode != null and param.productCode != ''">
|
||||
AND spu.product_code = #{param.productCode}
|
||||
</if>
|
||||
<if test="param.barcode != null and param.barcode != ''">
|
||||
AND spu.barcode = #{param.barcode}
|
||||
</if>
|
||||
<if test="param.productName != null and param.productName != ''">
|
||||
AND spu.product_name LIKE CONCAT('%', #{param.productName}, '%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY stock.id DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.bsd.pjcloud.admin.api.vo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "简要用户信息")
|
||||
public class SimpleUserAllListVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
private String nameWithMobile;
|
||||
}
|
||||
+16
@@ -21,11 +21,13 @@ package com.bsd.pjcloud.admin.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserDTO;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysUser;
|
||||
import com.bsd.pjcloud.admin.api.vo.SimpleUserAllListVO;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserExcelFaceVo;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserExcelVO;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserVO;
|
||||
@@ -41,10 +43,12 @@ import com.bsd.pjcloud.common.security.annotation.HasPermission;
|
||||
import com.bsd.pjcloud.common.security.annotation.Inner;
|
||||
import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springdoc.core.annotations.ParameterObject;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -373,4 +377,16 @@ public class SysUserController {
|
||||
public R<List<SysUser>> getUserByMobile(@RequestParam("mobile") String mobile) {
|
||||
return R.ok(userService.list(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhone, mobile)));
|
||||
}
|
||||
|
||||
@GetMapping("/getSimpleUserAll")
|
||||
@Schema(description = "简要用户信息")
|
||||
public R<List<SimpleUserAllListVO>> getSimpleUserAllList(@RequestParam(value = "mobile",required = false) String mobile,
|
||||
@RequestParam(value = "name",required = false) String name){
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
+10
@@ -19,12 +19,14 @@
|
||||
|
||||
package com.bsd.pjcloud.admin.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserDTO;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysUser;
|
||||
import com.bsd.pjcloud.admin.api.vo.SimpleUserAllListVO;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserExcelFaceVo;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserExcelVO;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserVO;
|
||||
@@ -191,4 +193,12 @@ public interface SysUserService extends IService<SysUser> {
|
||||
R<Boolean> resetUserPassword(UserDTO userDto);
|
||||
|
||||
List<UserVO> getUserDeptByIds(List<Long> userIds);
|
||||
|
||||
|
||||
/**
|
||||
* 查询所有用户简单信息
|
||||
* @param sysUserLambdaQueryWrapper
|
||||
* @return
|
||||
*/
|
||||
List<SimpleUserAllListVO> listScope(LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper);
|
||||
}
|
||||
+15
-4
@@ -26,6 +26,7 @@ import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -38,10 +39,7 @@ import com.bsd.pjcloud.admin.api.dto.UserDTO;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.entity.*;
|
||||
import com.bsd.pjcloud.admin.api.utils.DataUtil;
|
||||
import com.bsd.pjcloud.admin.api.vo.SysUserFaceVo;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserExcelFaceVo;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserExcelVO;
|
||||
import com.bsd.pjcloud.admin.api.vo.UserVO;
|
||||
import com.bsd.pjcloud.admin.api.vo.*;
|
||||
import com.bsd.pjcloud.admin.mapper.SysUserFaceMapper;
|
||||
import com.bsd.pjcloud.admin.mapper.SysUserMapper;
|
||||
import com.bsd.pjcloud.admin.mapper.SysUserPostMapper;
|
||||
@@ -767,4 +765,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
public List<UserVO> getUserDeptByIds(List<Long> userIds) {
|
||||
return baseMapper.selectVoListByScope(new UserDTO(), userIds.toArray(new Long[0]), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SimpleUserAllListVO> listScope(LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper) {
|
||||
List<SysUser> sysUsers = baseMapper.selectListByScope(sysUserLambdaQueryWrapper,DataScope.of());
|
||||
List<SimpleUserAllListVO> collect = sysUsers.stream().map(sysUser -> {
|
||||
SimpleUserAllListVO vo = new SimpleUserAllListVO();
|
||||
vo.setId(sysUser.getUserId());
|
||||
vo.setNameWithMobile(sysUser.getName() + "-" + sysUser.getPhone());
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
return collect;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user