diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreFactoryController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreFactoryController.java index a19f9fa2a..643022e26 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreFactoryController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreFactoryController.java @@ -41,9 +41,9 @@ public class StoreFactoryController extends XktBaseController { @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") @ApiOperation(value = "生产需求管理 工厂下拉列表", httpMethod = "GET", response = R.class) - @GetMapping("/list") - public R> getList() { - return R.ok(BeanUtil.copyToList(storeFactoryService.getList(), StoreFactoryResVO.class)); + @GetMapping("/list/{storeId}") + public R> getList(@PathVariable Long storeId) { + return R.ok(BeanUtil.copyToList(storeFactoryService.getList(storeId), StoreFactoryResVO.class)); } @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductDemandDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductDemandDetailController.java index 691f07b0e..160ab15c2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductDemandDetailController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductDemandDetailController.java @@ -1,6 +1,20 @@ package com.ruoyi.web.controller.xkt; +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.XktBaseController; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.web.controller.xkt.vo.storeProductDemandDetail.StoreProdDemandDetailUpdateVO; +import com.ruoyi.xkt.dto.storeProductDemandDetail.StoreProdDemandDetailUpdateDTO; +import com.ruoyi.xkt.service.IStoreProductDemandDetailService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -10,8 +24,21 @@ import org.springframework.web.bind.annotation.RestController; * @author ruoyi * @date 2025-03-26 */ +@Api(tags = "档口商品需求单明细") +@RequiredArgsConstructor @RestController @RequestMapping("/rest/v1/prod-demand-details") public class StoreProductDemandDetailController extends XktBaseController { + final IStoreProductDemandDetailService demandDetailService; + + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") + @ApiOperation(value = "编辑商品需求明细数量", httpMethod = "PUT", response = R.class) + @Log(title = "编辑商品需求明细数量", businessType = BusinessType.UPDATE) + @PutMapping("/quantity") + public R updateDetailQuantity(@Validated @RequestBody StoreProdDemandDetailUpdateVO updateVO) { + return R.ok(demandDetailService.updateDetailQuantity(BeanUtil.toBean(updateVO, StoreProdDemandDetailUpdateDTO.class))); + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemandDetail/StoreProdDemandDetailUpdateVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemandDetail/StoreProdDemandDetailUpdateVO.java new file mode 100644 index 000000000..0207d71bb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemandDetail/StoreProdDemandDetailUpdateVO.java @@ -0,0 +1,50 @@ +package com.ruoyi.web.controller.xkt.vo.storeProductDemandDetail; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel +@Data +public class StoreProdDemandDetailUpdateVO { + + @NotNull(message = "商品需求明细ID不能为空") + @ApiModelProperty(value = "商品需求明细ID", required = true) + private Long storeProdDemandDetailId; + @ApiModelProperty(value = "尺码30") + private Integer size30; + @ApiModelProperty(value = "尺码31") + private Integer size31; + @ApiModelProperty(value = "尺码32") + private Integer size32; + @ApiModelProperty(value = "尺码33") + private Integer size33; + @ApiModelProperty(value = "尺码34") + private Integer size34; + @ApiModelProperty(value = "尺码35") + private Integer size35; + @ApiModelProperty(value = "尺码36") + private Integer size36; + @ApiModelProperty(value = "尺码37") + private Integer size37; + @ApiModelProperty(value = "尺码38") + private Integer size38; + @ApiModelProperty(value = "尺码39") + private Integer size39; + @ApiModelProperty(value = "尺码40") + private Integer size40; + @ApiModelProperty(value = "尺码41") + private Integer size41; + @ApiModelProperty(value = "尺码42") + private Integer size42; + @ApiModelProperty(value = "尺码43") + private Integer size43; + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemandDetail/StoreProdDemandDetailUpdateDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemandDetail/StoreProdDemandDetailUpdateDTO.java new file mode 100644 index 000000000..e2b09f121 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemandDetail/StoreProdDemandDetailUpdateDTO.java @@ -0,0 +1,47 @@ +package com.ruoyi.xkt.dto.storeProductDemandDetail; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel +@Data +public class StoreProdDemandDetailUpdateDTO { + + @ApiModelProperty(value = "商品需求明细ID") + private Long storeProdDemandDetailId; + @ApiModelProperty(value = "尺码30") + private Integer size30; + @ApiModelProperty(value = "尺码31") + private Integer size31; + @ApiModelProperty(value = "尺码32") + private Integer size32; + @ApiModelProperty(value = "尺码33") + private Integer size33; + @ApiModelProperty(value = "尺码34") + private Integer size34; + @ApiModelProperty(value = "尺码35") + private Integer size35; + @ApiModelProperty(value = "尺码36") + private Integer size36; + @ApiModelProperty(value = "尺码37") + private Integer size37; + @ApiModelProperty(value = "尺码38") + private Integer size38; + @ApiModelProperty(value = "尺码39") + private Integer size39; + @ApiModelProperty(value = "尺码40") + private Integer size40; + @ApiModelProperty(value = "尺码41") + private Integer size41; + @ApiModelProperty(value = "尺码42") + private Integer size42; + @ApiModelProperty(value = "尺码43") + private Integer size43; + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandDetailMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandDetailMapper.java index 78f443638..4d2b2db33 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandDetailMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandDetailMapper.java @@ -5,8 +5,10 @@ import com.ruoyi.xkt.domain.StoreProductDemandDetail; import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageDTO; import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageResDTO; import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandSimpleDTO; +import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandStatusCountResDTO; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; /** @@ -33,4 +35,15 @@ public interface StoreProductDemandDetailMapper extends BaseMapper selectDemandCodeList(@Param("detailIdList") List detailIdList); + /** + * 查询各状态数量 + * + * @param storeId 档口ID + * @param sixMonthAgo 六个月前的时间 + * @param now 当前时间 + * @return StoreProdDemandStatusCountResDTO + */ + StoreProdDemandStatusCountResDTO getStatusNum(@Param("storeId") Long storeId, + @Param("sixMonthAgo") Date sixMonthAgo, + @Param("now") Date now); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandMapper.java index c7ef91ba2..8b67ec52a 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductDemandMapper.java @@ -33,15 +33,4 @@ public interface StoreProductDemandMapper extends BaseMapper */ void deleteDemandList(@Param("deleteDemandIdList") List deleteDemandIdList); - /** - * 查询各状态数量 - * - * @param storeId 档口ID - * @param sixMonthAgo 六个月前的时间 - * @param now 当前时间 - * @return StoreProdDemandStatusCountResDTO - */ - StoreProdDemandStatusCountResDTO getStatusNum(@Param("storeId") Long storeId, - @Param("sixMonthAgo") Date sixMonthAgo, - @Param("now") Date now); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java index ab08716dd..0005ce3a9 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java @@ -75,8 +75,9 @@ public interface IStoreFactoryService { /** * 获取所有的工厂列表 * + * @param storeId 档口ID * @return 生产需求管理 工厂下拉列表 */ - List getList(); + List getList(Long storeId); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductDemandDetailService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductDemandDetailService.java index 7c5c84b50..b6adbdd05 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductDemandDetailService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductDemandDetailService.java @@ -1,5 +1,7 @@ package com.ruoyi.xkt.service; +import com.ruoyi.xkt.dto.storeProductDemandDetail.StoreProdDemandDetailUpdateDTO; + /** * 档口商品需求单明细Service接口 * @@ -8,4 +10,12 @@ package com.ruoyi.xkt.service; */ public interface IStoreProductDemandDetailService { + /** + * 更新商品需求单明细数量 + * + * @param updateDTO 更新入参 + * @return 更新数量 + */ + Integer updateDetailQuantity(StoreProdDemandDetailUpdateDTO updateDTO); + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreFactoryServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreFactoryServiceImpl.java index d517fa118..d903b0fc2 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreFactoryServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreFactoryServiceImpl.java @@ -95,12 +95,13 @@ public class StoreFactoryServiceImpl implements IStoreFactoryService { * 获取所有的工厂列表 * * @return 生产需求管理 工厂下拉列表 + * @param storeId 档口ID */ @Override @Transactional(readOnly = true) - public List getList() { + public List getList(Long storeId) { List storeFactoryList = this.storeFactoryMapper.selectList(new LambdaQueryWrapper() - .eq(StoreFactory::getDelFlag, Constants.UNDELETED)); + .eq(StoreFactory::getDelFlag, Constants.UNDELETED).eq(StoreFactory::getStoreId, storeId)); return BeanUtil.copyToList(storeFactoryList, StoreFactoryResDTO.class); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandDetailServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandDetailServiceImpl.java index 49095c132..96930bfcb 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandDetailServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandDetailServiceImpl.java @@ -1,7 +1,18 @@ package com.ruoyi.xkt.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.xkt.domain.StoreProductDemandDetail; +import com.ruoyi.xkt.dto.storeProductDemandDetail.StoreProdDemandDetailUpdateDTO; +import com.ruoyi.xkt.mapper.StoreProductDemandDetailMapper; import com.ruoyi.xkt.service.IStoreProductDemandDetailService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; /** * 档口商品需求单明细Service业务层处理 @@ -10,6 +21,46 @@ import org.springframework.stereotype.Service; * @date 2025-03-26 */ @Service +@RequiredArgsConstructor public class StoreProductDemandDetailServiceImpl implements IStoreProductDemandDetailService { + final StoreProductDemandDetailMapper demandDetailMapper; + + /** + * 更新商品需求单明细数量 + * + * @param updateDTO 更新入参 + * @return 更新数量 + */ + @Override + @Transactional + public Integer updateDetailQuantity(StoreProdDemandDetailUpdateDTO updateDTO) { + StoreProductDemandDetail demandDetail = Optional.ofNullable(this.demandDetailMapper.selectOne(new LambdaQueryWrapper() + .eq(StoreProductDemandDetail::getId, updateDTO.getStoreProdDemandDetailId()).eq(StoreProductDemandDetail::getDelFlag, Constants.UNDELETED))) + .orElseThrow(() -> new ServiceException("商品需求单明细不存在!", HttpStatus.ERROR)); + // 如果数量为0,则设置为null + demandDetail.setSize30(this.convertZeroToNull(updateDTO.getSize30())); + demandDetail.setSize31(this.convertZeroToNull(updateDTO.getSize31())); + demandDetail.setSize32(this.convertZeroToNull(updateDTO.getSize32())); + demandDetail.setSize33(this.convertZeroToNull(updateDTO.getSize33())); + demandDetail.setSize34(this.convertZeroToNull(updateDTO.getSize34())); + demandDetail.setSize35(this.convertZeroToNull(updateDTO.getSize35())); + demandDetail.setSize36(this.convertZeroToNull(updateDTO.getSize36())); + demandDetail.setSize37(this.convertZeroToNull(updateDTO.getSize37())); + demandDetail.setSize38(this.convertZeroToNull(updateDTO.getSize38())); + demandDetail.setSize39(this.convertZeroToNull(updateDTO.getSize39())); + demandDetail.setSize40(this.convertZeroToNull(updateDTO.getSize40())); + demandDetail.setSize41(this.convertZeroToNull(updateDTO.getSize41())); + demandDetail.setSize42(this.convertZeroToNull(updateDTO.getSize42())); + demandDetail.setSize43(this.convertZeroToNull(updateDTO.getSize43())); + return this.demandDetailMapper.updateById(demandDetail); + } + + /** + * 将0值转换为null + */ + private Integer convertZeroToNull(Integer value) { + return value == null || value == 0 ? null : value; + } + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java index ed5c8b610..2db252043 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java @@ -63,7 +63,7 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService public StoreProdDemandStatusCountResDTO getStatusNum(Long storeId) { final Date now = java.sql.Date.valueOf(LocalDate.now().plusDays(1)); final Date sixMonthAgo = java.sql.Date.valueOf(LocalDate.now().minusMonths(6)); - return this.storeProdDemandMapper.getStatusNum(storeId, sixMonthAgo, now); + return this.storeProdDemandDetailMapper.getStatusNum(storeId, sixMonthAgo, now); } /** diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDetailServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDetailServiceImpl.java index 17e2812e5..00dbfd593 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDetailServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDetailServiceImpl.java @@ -13,6 +13,9 @@ import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.List; /** @@ -43,8 +46,23 @@ public class StoreProductStorageDetailServiceImpl implements IStoreProductStorag if (CollectionUtils.isNotEmpty(exportDTO.getStoreProdStorageIdList())) { return this.storageDetailMapper.selectExportList(exportDTO.getStoreProdStorageIdList()); } else { + // 没有传时间,则设置当前时间往前推半年 if (ObjectUtils.isEmpty(exportDTO.getVoucherDateStart()) && ObjectUtils.isEmpty(exportDTO.getVoucherDateEnd())) { - throw new ServiceException("全量导出时,开始时间和结束时间不能为空!", HttpStatus.ERROR); + exportDTO.setVoucherDateEnd(java.sql.Date.valueOf(LocalDate.now())); + exportDTO.setVoucherDateEnd(java.sql.Date.valueOf(LocalDate.now().minusMonths(6))); + } else { + LocalDate start = exportDTO.getVoucherDateStart().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate end = exportDTO.getVoucherDateEnd().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + // 确保开始日期不大于结束日期 + if (start.isAfter(end)) { + throw new ServiceException("开始时间不能晚于结束时间!", HttpStatus.ERROR); + } + // 计算两个日期之间的确切月数差异 + long monthsBetween = ChronoUnit.MONTHS.between(start, end); + // 检查是否超过6个月(允许恰好6个月) + if (monthsBetween > 6 || (monthsBetween == 6 && start.plusMonths(6).isBefore(end))) { + throw new ServiceException("导出时间间隔不能超过6个月!", HttpStatus.ERROR); + } } return this.storageDetailMapper.selectExportListVoucherDateBetween(exportDTO.getVoucherDateStart(), exportDTO.getVoucherDateEnd()); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleServiceImpl.java index 1a403463d..f6b0b61d3 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleServiceImpl.java @@ -33,8 +33,8 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; -import java.time.Period; import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -221,14 +221,16 @@ public class StoreSaleServiceImpl implements IStoreSaleService { exportDTO.setVoucherDateEnd(java.sql.Date.valueOf(LocalDate.now())); exportDTO.setVoucherDateEnd(java.sql.Date.valueOf(LocalDate.now().minusMonths(6))); } else { - // 开始时间和结束时间,相间隔不能超过6个月 LocalDate start = exportDTO.getVoucherDateStart().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate end = exportDTO.getVoucherDateEnd().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - // 计算两个日期之间的年、月、日差值 - Period period = Period.between(start, end); - // 如果总月数超过6个月,则返回 true - int totalMonths = period.getYears() * 12 + period.getMonths(); - if (Math.abs(totalMonths) > 6) { + // 确保开始日期不大于结束日期 + if (start.isAfter(end)) { + throw new ServiceException("开始时间不能晚于结束时间!", HttpStatus.ERROR); + } + // 计算两个日期之间的确切月数差异 + long monthsBetween = ChronoUnit.MONTHS.between(start, end); + // 检查是否超过6个月(允许恰好6个月) + if (monthsBetween > 6 || (monthsBetween == 6 && start.plusMonths(6).isBefore(end))) { throw new ServiceException("导出时间间隔不能超过6个月!", HttpStatus.ERROR); } } diff --git a/xkt/src/main/resources/mapper/StoreProductDemandDetailMapper.xml b/xkt/src/main/resources/mapper/StoreProductDemandDetailMapper.xml index e52f409f5..06dc77d32 100644 --- a/xkt/src/main/resources/mapper/StoreProductDemandDetailMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductDemandDetailMapper.xml @@ -43,4 +43,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + \ No newline at end of file diff --git a/xkt/src/main/resources/mapper/StoreProductDemandMapper.xml b/xkt/src/main/resources/mapper/StoreProductDemandMapper.xml index b8665f421..fdb350903 100644 --- a/xkt/src/main/resources/mapper/StoreProductDemandMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductDemandMapper.xml @@ -25,19 +25,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - \ No newline at end of file