diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditDTO.java new file mode 100644 index 000000000..ee8253d37 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditDTO.java @@ -0,0 +1,129 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + + +import com.baomidou.mybatisplus.annotation.*; +import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanEditItemDTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + + +@Data +@Schema(description = "出入库记录修改对象") +public class InventoryRecordEditDTO { + + + /** + * 主键 + */ + @Schema(description="主键") + private Long id; + + /** + * 单据编号(规则生成,出入库编号) + */ + @Schema(description="单据编号(规则生成,出入库编号)") + private String inventoryCode; + + /** + * 单据日期 + */ + @Schema(description="单据日期") + private LocalDate inventoryDate; + + /** + * 单据类型(字典inventory_type)采购入库、采购退货、盘点入库等 + */ + @Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等") + private String inventoryType; + + /** + * 来源ID(根据类型指向对应的表,如采购单ID、退货单ID等) + */ + @Schema(description="来源code") + private String linkCode; + + /** + * 仓库id + */ + @Schema(description="仓库id") + private String warehouseId; + + /** + * 经办人id + */ + @Schema(description="经办人id") + private Long handlerUserId; + + /** + * 审批状态 + */ + @Schema(description="审批状态") + private String checkStatus; + + /** + * 审批人id + */ + @Schema(description="审批人id") + private String checkUserId; + + /** + * 审核日期 + */ + @Schema(description="审核日期") + private LocalDateTime checkTime; + + /** + * 商户编号 + */ + @Schema(description="商户编号") + private Long merchantId; + + /** + * 部门id + */ + @Schema(description="部门id") + private Long deptId; + + /** + * 货商 + */ + @Schema(description="货商") + private Long supplierId; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 订单类型(1入库 2出库) + */ + @Schema(description="订单类型(1入库 2出库)") + private String orderType; + + /** + * 入库总金额 + */ + @Schema(description="入库总金额") + private Integer totalAmount; + + + @Schema(description="收货数量") + private Integer receiveAmount; + + + /** + * @Link SmCgPlanEditItemDTO + */ + @Schema(description="采购计划-item") + private List items; + + + + +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java new file mode 100644 index 000000000..34c0d6cbf --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java @@ -0,0 +1,100 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + + +@Data +@Schema(description = "出入库记录编辑-item") +public class InventoryRecordEditItemDTO { + + /** + * id + */ + + @Schema(description="id") + private Long id; + + /** + * 单据类型(字典inventory_type) + */ + @Schema(description="单据类型(字典inventory_type)") + private String inventoryType; + + /** + * 商品id + */ + @Schema(description="商品id") + private Long erpSpuId; + + /** + * 商户编号 + */ + @Schema(description="商户编号") + private Long merchantId; + + /** + * 部门id + */ + @Schema(description="部门id") + private Long deptId; + + /** + * 出入库数量 + */ + @Schema(description="出入库数量") + private Double quantity; + + /** + * 单价 + */ + @Schema(description="单价") + private Integer unitPrice; + + /** + * 总金额 + */ + @Schema(description="总金额") + private Integer totalAmount; + + /** + * 税率% + */ + @Schema(description="税率%") + private Integer taxRate; + + /** + * 税前金额 + */ + @Schema(description="税前金额") + private Integer taxAmount; + + /** + * 货商 + */ + @Schema(description="货商") + private Long supplierId; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 订单类型(1入库 2出库) + */ + @Schema(description="订单类型(1入库 2出库)") + private String orderType; + + /** + * 包装单位id + */ + @Schema(description="包装单位id") + private Long unitId; + + +} \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpCgDdController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpCgDdController.java index 50a71e5f3..53d8867cc 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpCgDdController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpCgDdController.java @@ -145,7 +145,7 @@ public class SmErpCgDdController { @DeleteMapping @PreAuthorize("@pms.hasPermission('supermarket_smErpCgDd_del')" ) public R removeById(@RequestBody Long[] ids) { - return R.ok(smErpCgDdService.removeBatchByIds(CollUtil.toList(ids))); + return R.ok(smErpCgDdService.removeCgDdByIds(CollUtil.toList(ids))); } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java index d3b9b5294..c9fe55898 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java @@ -12,10 +12,7 @@ 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.InventoryDetailQueryDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryLinkQueryDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.*; import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.service.*; import com.bsd.pjcloud.supermarket.vo.cgplan.ErpUnitVo; @@ -105,15 +102,15 @@ public class SmErpInventoryRecordsController { /** * 修改出入库记录表 - * @param smErpInventoryRecords 出入库记录表 + * @param inventoryRecordEditDTO 出入库记录表 * @return R */ @Operation(summary = "修改出入库记录表" , description = "修改出入库记录表" ) @SysLog("修改出入库记录表" ) @PutMapping @PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_edit')" ) - public R updateById(@RequestBody SmErpInventoryRecordsEntity smErpInventoryRecords) { - return R.ok(smErpInventoryRecordsService.updateById(smErpInventoryRecords)); + public R updateById(@RequestBody InventoryRecordEditDTO inventoryRecordEditDTO) { + return R.ok(smErpInventoryRecordsService.updateInventoryRecord(inventoryRecordEditDTO)); } /** @@ -126,7 +123,7 @@ public class SmErpInventoryRecordsController { @DeleteMapping @PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_del')" ) public R removeById(@RequestBody Long[] ids) { - return R.ok(smErpInventoryRecordsService.removeBatchByIds(CollUtil.toList(ids))); + return R.ok(smErpInventoryRecordsService.removeBatch(CollUtil.toList(ids))); } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java index 7ba991bfa..ecf420e81 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java @@ -8,6 +8,8 @@ import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDSaveDTO; import com.bsd.pjcloud.supermarket.entity.SmErpCgDdEntity; import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity; +import java.util.ArrayList; + public interface SmErpCgDdService extends IService { @@ -37,4 +39,12 @@ public interface SmErpCgDdService extends IService { Object pageScope(Page page, LambdaQueryWrapper wrapper); + + + /** + * 删除 + * @param list + * @return + */ + Object removeCgDdByIds(ArrayList list); } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java index 1ba0168d6..cf1e077ca 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java @@ -4,9 +4,12 @@ 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.InventoryDetailQueryDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordEditDTO; import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity; +import java.util.ArrayList; + public interface SmErpInventoryRecordsService extends IService { @@ -66,4 +69,16 @@ public interface SmErpInventoryRecordsService extends IService list); } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java index 316562e00..d1e00f821 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java @@ -27,10 +27,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -82,23 +79,45 @@ public class SmErpCgDdServiceImpl extends ServiceImpl items = erpCgDDEditDTO.getItems(); - List cgPlanItemEntities = BeanUtils.toBean(items, SmErpCgDdItemEntity.class); + List cgDdItemEntities = BeanUtils.toBean(items, SmErpCgDdItemEntity.class); - List insertCollect = cgPlanItemEntities.stream() + List insertCollect = cgDdItemEntities.stream() .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() == null).collect(Collectors.toList()); insertCollect.forEach(c -> c.setHId(smErpCgDdEntity.getId())); -// -// List updateCollect = cgPlanItemEntities.stream() -// .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() != null).collect(Collectors.toList()); -// smErpCgPlanItemMapper.updateById(updateCollect); - smErpCgDDItemMapper.insertOrUpdate(cgPlanItemEntities); + + + List updateCollect = cgDdItemEntities.stream() + .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() != null).collect(Collectors.toList()); + smErpCgDDItemMapper.updateById(updateCollect); + smErpCgDDItemMapper.insert(insertCollect); + + List existingCodeIds = smErpCgDDItemMapper.selectList( + new LambdaQueryWrapper() + .eq(SmErpCgDdItemEntity::getHId, smErpCgDdEntity.getId()) + ).stream().map(SmErpCgDdItemEntity::getId).collect(Collectors.toList()); + + // 收集本次提交的ID(排除新增的) + List submittedCodeIds = updateCollect.stream() + .map(SmErpCgDdItemEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 计算需要删除的ID + List toDeleteCodeIds = existingCodeIds.stream() + .filter(id -> !submittedCodeIds.contains(id)) + .collect(Collectors.toList()); + + // 批量删除失效条码 + if (!toDeleteCodeIds.isEmpty()) { + smErpCgDDItemMapper.deleteByIds(toDeleteCodeIds); + } return R.ok(i); } @@ -228,4 +247,25 @@ public class SmErpCgDdServiceImpl extends ServiceImpl list) { + //首先先查询是否有当前数据权限 + LambdaQueryWrapper eq = new LambdaQueryWrapper().in(SmErpCgDdEntity::getId, list); + List smErpCgDdEntities = baseMapper.selectListByScope(eq,DataScope.of()); + List delIds= smErpCgDdEntities.stream().map(smErpCgDdEntity -> smErpCgDdEntity.getId()).collect(Collectors.toList()); + + + LambdaQueryWrapper itemEntityLambdaQueryWrapper = new LambdaQueryWrapper().in(SmErpCgDdItemEntity::getHId, delIds); + smErpCgDDItemMapper.delete(itemEntityLambdaQueryWrapper); + baseMapper.deleteByIds(delIds); + List toDeleteIds = delIds.stream() + .filter(id -> !list.contains(id)) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(toDeleteIds)){ + return R.failed("越权删除!"); + } + return R.ok(); + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java index 81d855746..3274e6445 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java @@ -85,11 +85,32 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl insertCollect = cgPlanItemEntities.stream() .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() == null).collect(Collectors.toList()); insertCollect.forEach(c -> c.setPlanId(smErpCgPlanEntity.getId())); -// -// List updateCollect = cgPlanItemEntities.stream() -// .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() != null).collect(Collectors.toList()); -// smErpCgPlanItemMapper.updateById(updateCollect); - smErpCgPlanItemMapper.insertOrUpdate(cgPlanItemEntities); + + List updateCollect = cgPlanItemEntities.stream() + .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() != null).collect(Collectors.toList()); + smErpCgPlanItemMapper.updateById(updateCollect); + smErpCgPlanItemMapper.insert(insertCollect); + + List existingCodeIds = smErpCgPlanItemMapper.selectList( + new LambdaQueryWrapper() + .eq(SmErpCgPlanItemEntity::getPlanId, smErpCgPlanEntity.getId()) + ).stream().map(SmErpCgPlanItemEntity::getId).collect(Collectors.toList()); + + // 收集本次提交的ID(排除新增的) + List submittedCodeIds = updateCollect.stream() + .map(SmErpCgPlanItemEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 计算需要删除的ID + List toDeleteCodeIds = existingCodeIds.stream() + .filter(id -> !submittedCodeIds.contains(id)) + .collect(Collectors.toList()); + + // 批量删除失效条码 + if (!toDeleteCodeIds.isEmpty()) { + smErpCgPlanItemMapper.deleteByIds(toDeleteCodeIds); + } return R.ok(i); } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java index d94f81ba0..0226d9ab4 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java @@ -7,14 +7,12 @@ 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; 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.InventoryDetailQueryDTO; -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.dto.inventoryrecords.*; import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.mapper.*; import com.bsd.pjcloud.supermarket.service.SmErpInventoryRecordsService; @@ -324,5 +322,65 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl items = inventoryRecordEditDTO.getItems(); + List smErpInventoryRecordsItemEntityList = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class); + + List updateItems = smErpInventoryRecordsItemEntityList.stream(). + filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList()); + List insertItems = smErpInventoryRecordsItemEntityList.stream(). + filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList()); + smErpInventoryRecordsItemMapper.updateById(updateItems); + smErpInventoryRecordsItemMapper.insert(insertItems); + + List existingCodeIds = smErpInventoryRecordsItemMapper.selectList( + new LambdaQueryWrapper() + .eq(SmErpInventoryRecordsItemEntity::getInventoryId, smErpInventoryRecordsEntity.getId()) + ).stream().map(SmErpInventoryRecordsItemEntity::getId).collect(Collectors.toList()); + + // 收集本次提交的ID(排除新增的) + List submittedCodeIds = updateItems.stream() + .map(SmErpInventoryRecordsItemEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 计算需要删除的ID + List toDeleteCodeIds = existingCodeIds.stream() + .filter(id -> !submittedCodeIds.contains(id)) + .collect(Collectors.toList()); + + // 批量删除失效条码 + if (!toDeleteCodeIds.isEmpty()) { + smErpInventoryRecordsItemMapper.deleteByIds(toDeleteCodeIds); + } + + return i; + } + + @Override + public Object removeBatch(ArrayList list) { + //首先先查询是否有当前数据权限 + LambdaQueryWrapper eq = new LambdaQueryWrapper().in(SmErpInventoryRecordsEntity::getId, list); + List smErpCgDdEntities = baseMapper.selectListByScope(eq,DataScope.of()); + List delIds= smErpCgDdEntities.stream().map(smErpCgDdEntity -> smErpCgDdEntity.getId()).collect(Collectors.toList()); + + LambdaQueryWrapper itemEntityLambdaQueryWrapper = new LambdaQueryWrapper() + .in(SmErpInventoryRecordsItemEntity::getInventoryId, delIds); + smErpInventoryRecordsItemMapper.delete(itemEntityLambdaQueryWrapper); + baseMapper.deleteByIds(delIds); + List toDeleteIds = delIds.stream() + .filter(id -> !list.contains(id)) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(toDeleteIds)){ + return R.failed("越权删除!"); + } + return R.ok(); + } + } \ No newline at end of file