diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/constant/CanteenFlowConstant.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/constant/CanteenFlowConstant.java new file mode 100644 index 000000000..fbe68fbdb --- /dev/null +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/constant/CanteenFlowConstant.java @@ -0,0 +1,12 @@ +package com.bsd.pjcloud.canteen.constant; + +import lombok.Data; + +@Data +public final class CanteenFlowConstant { + + /** + * 包厢预约流程标识 + */ + public static final String bx_marking_flow= "BX_MARKING_FLOW"; +} diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/flow/BxMarkingFlowDto.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/flow/BxMarkingFlowDto.java new file mode 100644 index 000000000..e5d95418b --- /dev/null +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/flow/BxMarkingFlowDto.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.canteen.dto.flow; + +import lombok.Data; + +@Data +public class BxMarkingFlowDto { + + /** + * 包厢时间 + */ + private String boxesName; + + + /** + * 预约时间 + */ + private String markTime; +} diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/app/DailyMenuAppVO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/app/DailyMenuAppVO.java index 70ed64b1c..e8ffe0722 100644 --- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/app/DailyMenuAppVO.java +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/app/DailyMenuAppVO.java @@ -38,4 +38,6 @@ public class DailyMenuAppVO { * 时间类型 */ private Integer hourType; + + private Integer sort; } diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesBookingController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesBookingController.java index f63abfede..03fc8d499 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesBookingController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesBookingController.java @@ -10,6 +10,8 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.canteen.entity.BoxesBookingEntity; import com.bsd.pjcloud.canteen.service.BoxesBookingService; +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordParamDto; import org.apache.seata.spring.annotation.GlobalTransactional; import org.springframework.security.access.prepost.PreAuthorize; @@ -136,13 +138,19 @@ public class BoxesBookingController { @PostMapping("/flow-callback") @Operation(summary = "流程节点回调通知") + @Inner public R createBooking(@RequestBody ProcessNodeRecordParamDto processNodeRecordParamDto) { -// String flowId = processNodeRecordParamDto.getFlowId(); -// BoxesBookingEntity boxesBookingEntity = new BoxesBookingEntity(); -// boxesBookingEntity.setProcessInstanceId(flowId); -// boxesBookingEntity.setCheckStatus(); + String processInstanceId = processNodeRecordParamDto.getProcessInstanceId(); + BoxesBookingEntity boxesBookingEntity = new BoxesBookingEntity(); + boxesBookingEntity.setProcessInstanceId(processInstanceId); + boxesBookingEntity.setCheckStatus(TaskCheckStatusEnum.RESULT.getCode()); + System.out.println("***************************"); + System.out.println(processNodeRecordParamDto.getData()); // boxesBookingService.update() + LambdaQueryWrapper boxesBookingEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + boxesBookingEntityLambdaQueryWrapper.eq(BoxesBookingEntity::getProcessInstanceId, processInstanceId); + boxesBookingService.update(boxesBookingEntity,boxesBookingEntityLambdaQueryWrapper); System.out.println(processNodeRecordParamDto); return R.ok(); diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/BoxesBookingServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/BoxesBookingServiceImpl.java index bd0327dc8..1e2258bbd 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/BoxesBookingServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/BoxesBookingServiceImpl.java @@ -1,6 +1,9 @@ package com.bsd.pjcloud.canteen.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.canteen.constant.CanteenFlowConstant; +import com.bsd.pjcloud.canteen.dto.flow.BxMarkingFlowDto; import com.bsd.pjcloud.canteen.entity.BoxesBookingEntity; import com.bsd.pjcloud.canteen.entity.BoxesInfoEntity; import com.bsd.pjcloud.canteen.mapper.BoxesAvailabilityMapper; @@ -10,13 +13,17 @@ import com.bsd.pjcloud.canteen.service.BoxesBookingService; import com.bsd.pjcloud.canteen.vo.AppMakeSaveReqVO; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.resolver.ParamResolver; import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.flow.task.api.feign.RemoteFlowApiFlowService; import com.bsd.pjcloud.flow.task.dto.ProcessInstanceParamDto; +import com.bsd.pjcloud.flow.task.entity.Process; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.beans.beancontext.BeanContext; import java.time.LocalDate; +import java.util.Map; /** * 包厢预约记录表 @@ -35,6 +42,8 @@ public class BoxesBookingServiceImpl extends ServiceImpl objectObjectHashMap = new HashMap<>(); -// objectObjectHashMap.put("deptId", infoDO.getDeptId()); -// String processInstanceId = processInstanceApi.createProcessInstance(loginUserId, -// new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) -// .setBusinessKey(String.valueOf(booking.getId())) -// .setVariables(objectObjectHashMap)); -// -// -// // 将工作流的编号,更新到 OA 请假单中 -// BookingDO bookingDO = new BookingDO(); -// bookingDO.setId(booking.getId()); -// bookingDO.setProcessInstanceId(processInstanceId); - -// bookingMapper.updateById(bookingDO); - // 启动流程 + // 工作 ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto(); - processInstanceParamDto.setFlowId("P20250205113641052EBCRV"); + R processByBusinessKey = remoteFlowApiFlowService.getProcessByBusinessKey(CanteenFlowConstant.bx_marking_flow); + String flowId = processByBusinessKey.getData().getFlowId(); + processInstanceParamDto.setFlowId(flowId); + + BxMarkingFlowDto bxMarkingFlowDto = new BxMarkingFlowDto(); + bxMarkingFlowDto.setBoxesName(infoDO.getName()); + bxMarkingFlowDto.setMarkTime(createReqVO.getBxDate() + " " + createReqVO.getStartTime() + "-" + createReqVO.getEndTime()); + Map stringObjectMap = BeanUtil.beanToMap(bxMarkingFlowDto); + processInstanceParamDto.setParamMap(stringObjectMap); R stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto); booking.setCheckStatus("0"); booking.setProcessInstanceId(stringR.getData()); diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java index cb74c31e2..9d0e67912 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java @@ -168,11 +168,13 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl startProcessInstance(@RequestBody ProcessInstanceParamDto paramDto); + + /** + * 获取流程数据 + * @param businessKey 业务key + * @return + */ + @GetMapping("/process/getProcessByBusinessKey") + R getProcessByBusinessKey(@RequestParam("businessKey")String businessKey); } diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/entity/Process.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/entity/Process.java index 9941b4d46..9af700318 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/entity/Process.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/entity/Process.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.flow.task.entity; import com.baomidou.mybatisplus.annotation.*; import com.bsd.pjcloud.common.core.util.TenantTable; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @@ -135,4 +136,9 @@ public class Process { @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; + + @Schema(description = "业务key") + @TableField("business_key") + private String businessKey; + } diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/CombinationGroupController.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/CombinationGroupController.java index 407f051f6..ffbccb453 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/CombinationGroupController.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/CombinationGroupController.java @@ -27,6 +27,8 @@ public class CombinationGroupController { return combinationGroupService.listGroupWithProcess(page, groupId); } + + /** * 查询所有我可以发起的表单组 * @return diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/ProcessController.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/ProcessController.java index b01b0c033..6af742064 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/ProcessController.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/ProcessController.java @@ -24,6 +24,15 @@ public class ProcessController { return processService.getDetail(flowId); } + /** + * 获取流程数据 + * @param businessKey 业务key + * @return + */ + @GetMapping("/getProcessByBusinessKey") + public R getProcessByBusinessKey(@RequestParam("businessKey")String businessKey) { + return processService.getProcessByBusinessKey(businessKey); + } /** * 创建流程 * @param process diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/IProcessService.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/IProcessService.java index f3862d4ff..1071382f5 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/IProcessService.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/IProcessService.java @@ -43,4 +43,11 @@ public interface IProcessService extends IService { */ R update(String flowId, String type, Long groupId); + + /** + * 根据业务key获取流程 + * @param businessKey + * @return + */ + R getProcessByBusinessKey(String businessKey); } diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/ProcessServiceImpl.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/ProcessServiceImpl.java index 1b6e29933..04963fc20 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/ProcessServiceImpl.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/ProcessServiceImpl.java @@ -224,6 +224,7 @@ public class ProcessServiceImpl extends ServiceImpl impl p.setUniqueId(IdUtil.fastSimpleUUID()); p.setAdminList(process.getAdminList()); p.setRangeShow(stringBuilder.toString()); + p.setBusinessKey(process.getBusinessKey()); this.save(p); @@ -259,4 +260,11 @@ public class ProcessServiceImpl extends ServiceImpl impl return R.ok(); } + @Override + public R getProcessByBusinessKey(String businessKey) { + Process one = this.lambdaQuery().eq(Process::getBusinessKey, businessKey).eq(Process::getHidden, false) + .one(); + return R.ok(one); + } + } diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java new file mode 100644 index 000000000..f3f8c6a0a --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java @@ -0,0 +1,78 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * + * + * @author zjf + * @date 2025-02-11 17:11:41 + */ +@Data +@Schema(description = "盘点-item") +public class PDItemUpdateDTO { + + + /** + * 库存商品id + */ + @Schema(description="库存商品id") + private Long erpSpuId; + + + @Schema(description="账面数量") + private Double accountNumber; + + @Schema(description="实际数量") + private Double realNumber; + + @Schema(description="账面单价") + private Integer unitPrice; + + + /** + * 数据库意思就是实际单价,这里等价于盘点单价 + */ + @Schema(description="盘点单价") + private Integer realPrice; + /** + * 盘盈盘亏 + */ + @Schema(description="盈") + private Double profit; + + /** + * 盘盈盘亏 + */ + @Schema(description="亏") + private Double loss; + + + + @Schema(description="盘后总数") + private Integer totalNumber; + + /** + * 累计总金额 + */ + @Schema(description="盘后总金额") + private Integer totalAmount; + + + /** + * 1等于盘盈 2等于盘亏 + */ + @Schema(description="订单类型,1入库,2出库") + @NotNull + private String orderType; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + +} \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java new file mode 100644 index 000000000..0ac0ed3a5 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java @@ -0,0 +1,67 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +/** + * + * 新增一个采购计划 + */ +@Data +@Schema(description = "盘点保存对象") +public class PDUpdateDTO { + + + @Schema(description="id") + @NotNull + private Long id; + /** + * 采编号 + */ + @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 String remark; + + + + /** + * @Link SmCgPlanSaveItemDTO + */ + @Schema(description="盘点-item") + @NotNull + private List items; + + + + +} 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 8d56b777d..9804bcd0f 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 @@ -264,4 +264,14 @@ public class SmErpInventoryRecordsController { public R getPDById(@PathVariable("id" ) Long id) { return R.ok(smErpInventoryRecordsService.getPDDetailById(id)); } + + + + @Operation(summary = "修改盘点" , description = "修改盘点" ) + @SysLog("修改盘点" ) + @PutMapping("/updatePD") + @PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_edit')" ) + public R updatePDById(@RequestBody PDUpdateDTO pdfUpdateDTO) { + return R.ok(smErpInventoryRecordsService.updateIPD(pdfUpdateDTO)); + } } \ 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 e426abf43..85e24fa2e 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 @@ -3,10 +3,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.InventoryDetailQueryDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordEditDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.PDSaveDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.*; import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity; import java.util.ArrayList; @@ -93,4 +90,12 @@ public interface SmErpInventoryRecordsService extends IService items = inventoryRecordEditDTO.getItems(); - List smErpInventoryRecordsItemEntityList = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class); + List updateStockDTOS = new ArrayList<>(); + List smErpInventoryRecordsItemEntityList = new ArrayList<>(); + + for (InventoryRecordEditItemDTO item : items){ + SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity(); + org.springframework.beans.BeanUtils.copyProperties(item,smErpInventoryRecordsItemEntity); + //库存更新对象 + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + Double quantity = item.getQuantity(); + String orderType = item.getOrderType(); + smErpInventoryRecordsItemEntity.setOrderType(orderType); + if (orderType.equals(OrderTypeEnum.RK.getType())){ + updateStockDTO.setIncrCount(quantity); + }else if (orderType.equals(OrderTypeEnum.CK.getType())){ + updateStockDTO.setIncrCount(-quantity); + }else { + throw new RuntimeException("订单类型错误"); + } + + smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity); + updateStockDTOS.add(updateStockDTO); + + } + List insertItems = smErpInventoryRecordsItemEntityList.stream(). filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList()); List updateItems = smErpInventoryRecordsItemEntityList.stream(). filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList()); + + + //更新的话,查询之前保存了哪些item,然后去库存表删掉从新计算库存 + List dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper + .selectList(new LambdaQueryWrapper().eq(SmErpInventoryRecordsItemEntity::getInventoryId, inventoryRecordEditDTO.getId())); + + //这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去 + dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> { + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + updateStockDTO.setIncrCount(-item.getQuantity()); + updateStockDTOS.add(updateStockDTO); + }); + + smErpInventoryRecordsItemMapper.updateById(updateItems); smErpInventoryRecordsItemMapper.insert(insertItems); @@ -370,6 +409,9 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl items = pdfUpdateDTO.getItems(); + + List updateStockDTOS = new ArrayList<>(); + List smErpInventoryRecordsItemEntityList = new ArrayList<>(); + for (PDItemUpdateDTO item : items){ + //库存更新对象 + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + //出入库对象 + SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity(); + org.springframework.beans.BeanUtils.copyProperties(item,smErpInventoryRecordsItemEntity); + String orderType = item.getOrderType(); + smErpInventoryRecordsItemEntity.setOrderType(orderType); + if (orderType.equals(OrderTypeEnum.RK.getType())){ + Double profit = item.getProfit(); + updateStockDTO.setIncrCount(profit); + smErpInventoryRecordsItemEntity.setQuantity(profit); + }else if (orderType.equals(OrderTypeEnum.CK.getType())){ + Double loss = item.getLoss(); + updateStockDTO.setIncrCount(loss); + smErpInventoryRecordsItemEntity.setQuantity(loss); + }else { + throw new RuntimeException("订单类型错误"); + } + + smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity); + updateStockDTOS.add(updateStockDTO); + } + + + + List insertItems = smErpInventoryRecordsItemEntityList.stream(). + filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList()); + List updateItems = smErpInventoryRecordsItemEntityList.stream(). + filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList()); + + //更新的话,查询之前保存了哪些item,然后减去之前出入的库存。从新计算库存 + List dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper + .selectList(new LambdaQueryWrapper().eq(SmErpInventoryRecordsItemEntity::getInventoryId, pdfUpdateDTO.getId())); + + //这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去 + dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> { + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + updateStockDTO.setIncrCount(-item.getQuantity()); + updateStockDTOS.add(updateStockDTO); + }); + + 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); + } + + //todo 实际上应该审批后才会入库 + //更新库存 + smErpStockService.updateStock(updateStockDTOS); + + return i; + } + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java index 48b720ae2..0f61f336b 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java @@ -96,6 +96,12 @@ public class SmErpSpuServiceImpl extends ServiceImpl().eq(SmErpSpuEntity::getProductCode, supermarketSpu.getProductCode())) != null) { + return R.failed("货号为" + supermarketSpu.getProductCode() + "的货号已存在"); + } + baseMapper.insert(supermarketSpu); //库存表