master:档口需求单列表;提交生产需求单功能;

pull/1121/head
liujiang 2025-04-03 22:22:22 +08:00
parent 56e9a321b7
commit fe025753ab
30 changed files with 1008 additions and 138 deletions

View File

@ -1,15 +1,33 @@
package com.ruoyi.web.controller.xkt;
import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.XktBaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.web.controller.xkt.vo.storeCustomer.StoreCusPageVO;
import com.ruoyi.web.controller.xkt.vo.storeProductDemand.StoreProdDemandPageResVO;
import com.ruoyi.web.controller.xkt.vo.storeProductDemand.StoreProdDemandPageVO;
import com.ruoyi.web.controller.xkt.vo.storeProductDemand.StoreProdDemandQuantityVO;
import com.ruoyi.web.controller.xkt.vo.storeProductDemand.StoreProdDemandVO;
import com.ruoyi.xkt.domain.StoreProductDemand;
import com.ruoyi.xkt.dto.storeCustomer.StoreCusPageDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageResDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandQuantityDTO;
import com.ruoyi.xkt.service.IStoreProductDemandService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@ -21,11 +39,13 @@ import java.util.List;
* @author ruoyi
* @date 2025-03-26
*/
@Api(tags = "档口商品需求单")
@RestController
@RequiredArgsConstructor
@RequestMapping("/rest/v1/prod-demands")
public class StoreProductDemandController extends XktBaseController {
@Autowired
private IStoreProductDemandService storeProductDemandService;
final IStoreProductDemandService storeProdDemandService;
// TODO 入库单判断需求单是否存在
@ -33,6 +53,42 @@ public class StoreProductDemandController extends XktBaseController {
// TODO 入库单判断需求单是否存在
// TODO 入库单判断需求单是否存在
/**
*
*/
@ApiOperation(value = "根据货号获取所有颜色的库存数量、在产数量", httpMethod = "GET", response = R.class)
@PreAuthorize("@ss.hasPermi('system:demand:query')")
@GetMapping(value = "/exists-quantity/{storeId}/{storeProdId}")
public R<List<StoreProdDemandQuantityVO>> getStockAndProduceQuantity(@PathVariable("storeId") Long storeId, @PathVariable("storeProdId") Long storeProdId) {
List<StoreProdDemandQuantityDTO> list = storeProdDemandService.getStockAndProduceQuantity(storeId, storeProdId);
return CollectionUtils.isEmpty(list) ? R.ok() : R.ok(BeanUtil.copyToList(list, StoreProdDemandQuantityVO.class));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:demand:add')")
@ApiOperation(value = "新增档口商品需求单", httpMethod = "POST", response = R.class)
@Log(title = "新增档口商品需求单", businessType = BusinessType.INSERT)
@PostMapping("")
public R<Integer> add(@Validated @RequestBody StoreProdDemandVO prodDemandVO) {
return R.ok(storeProdDemandService.createDemand(BeanUtil.toBean(prodDemandVO, StoreProdDemandDTO.class)));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:customer:list')")
@ApiOperation(value = "查询档口商品需求单列表", httpMethod = "POST", response = R.class)
@PostMapping("/page")
public R<Page<StoreProdDemandPageResDTO>> selectPage(@Validated @RequestBody StoreProdDemandPageVO pageVO) {
return R.ok(storeProdDemandService.selectPage(BeanUtil.toBean(pageVO, StoreProdDemandPageDTO.class)));
}
/**
@ -42,7 +98,7 @@ public class StoreProductDemandController extends XktBaseController {
@GetMapping("/list")
public TableDataInfo list(StoreProductDemand storeProductDemand) {
startPage();
List<StoreProductDemand> list = storeProductDemandService.selectStoreProductDemandList(storeProductDemand);
List<StoreProductDemand> list = storeProdDemandService.selectStoreProductDemandList(storeProductDemand);
return getDataTable(list);
}
@ -53,7 +109,7 @@ public class StoreProductDemandController extends XktBaseController {
@Log(title = "档口商品需求单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StoreProductDemand storeProductDemand) {
List<StoreProductDemand> list = storeProductDemandService.selectStoreProductDemandList(storeProductDemand);
List<StoreProductDemand> list = storeProdDemandService.selectStoreProductDemandList(storeProductDemand);
ExcelUtil<StoreProductDemand> util = new ExcelUtil<StoreProductDemand>(StoreProductDemand.class);
util.exportExcel(response, list, "档口商品需求单数据");
}
@ -64,18 +120,10 @@ public class StoreProductDemandController extends XktBaseController {
@PreAuthorize("@ss.hasPermi('system:demand:query')")
@GetMapping(value = "/{storeProdDemandId}")
public R getInfo(@PathVariable("storeProdDemandId") Long storeProdDemandId) {
return success(storeProductDemandService.selectStoreProductDemandByStoreProdDemandId(storeProdDemandId));
return success(storeProdDemandService.selectStoreProductDemandByStoreProdDemandId(storeProdDemandId));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:demand:add')")
@Log(title = "档口商品需求单", businessType = BusinessType.INSERT)
@PostMapping
public R add(@RequestBody StoreProductDemand storeProductDemand) {
return success(storeProductDemandService.insertStoreProductDemand(storeProductDemand));
}
/**
*
@ -84,7 +132,7 @@ public class StoreProductDemandController extends XktBaseController {
@Log(title = "档口商品需求单", businessType = BusinessType.UPDATE)
@PutMapping
public R edit(@RequestBody StoreProductDemand storeProductDemand) {
return success(storeProductDemandService.updateStoreProductDemand(storeProductDemand));
return success(storeProdDemandService.updateStoreProductDemand(storeProductDemand));
}
/**
@ -94,6 +142,6 @@ public class StoreProductDemandController extends XktBaseController {
@Log(title = "档口商品需求单", businessType = BusinessType.DELETE)
@DeleteMapping("/{storeProdDemandIds}")
public R remove(@PathVariable Long[] storeProdDemandIds) {
return success(storeProductDemandService.deleteStoreProductDemandByStoreProdDemandIds(storeProdDemandIds));
return success(storeProdDemandService.deleteStoreProductDemandByStoreProdDemandIds(storeProdDemandIds));
}
}

View File

@ -8,25 +8,20 @@ import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.web.controller.xkt.vo.storeCustomer.StoreCusPageVO;
import com.ruoyi.web.controller.xkt.vo.storeProdStock.StoreProdStockPageVO;
import com.ruoyi.web.controller.xkt.vo.storeProdStock.StoreProdStockVO;
import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.dto.storeCustomer.StoreCusPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.service.IStoreProductStockService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -45,14 +40,13 @@ public class StoreProductStockController extends XktBaseController {
final IStoreProductStockService storeProdStockService;
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
/**
*
@ -84,7 +78,7 @@ public class StoreProductStockController extends XktBaseController {
@Log(title = "直接调整档口商品库存值", businessType = BusinessType.UPDATE)
@PutMapping("/update-stock/{storeId}")
public R<Integer> updateStock(@PathVariable("storeId") Long storeId, @RequestBody StoreProdStockVO prodStockVO) {
return R.ok(storeProdStockService.updateStock(storeId, Collections.singletonList(BeanUtil.toBean(prodStockVO, StoreProdStockUpdateDTO.class)), 0));
return R.ok(storeProdStockService.updateStock(storeId, Collections.singletonList(BeanUtil.toBean(prodStockVO, StoreProdStockDTO.class)), 0));
}
/**

View File

@ -6,7 +6,7 @@ import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeducte;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeduct;
import com.ruoyi.xkt.service.IStoreProductStorageDemandDeducteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@ -32,9 +32,9 @@ public class StoreProductStorageDemandDeducteController extends XktBaseControlle
*/
@PreAuthorize("@ss.hasPermi('system:deducte:list')")
@GetMapping("/list")
public TableDataInfo list(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
public TableDataInfo list(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
startPage();
List<StoreProductStorageDemandDeducte> list = storeProductStorageDemandDeducteService.selectStoreProductStorageDemandDeducteList(storeProductStorageDemandDeducte);
List<StoreProductStorageDemandDeduct> list = storeProductStorageDemandDeducteService.selectStoreProductStorageDemandDeducteList(storeProductStorageDemandDeducte);
return getDataTable(list);
}
@ -44,9 +44,9 @@ public class StoreProductStorageDemandDeducteController extends XktBaseControlle
@PreAuthorize("@ss.hasPermi('system:deducte:export')")
@Log(title = "档口商品入库抵扣需求", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
List<StoreProductStorageDemandDeducte> list = storeProductStorageDemandDeducteService.selectStoreProductStorageDemandDeducteList(storeProductStorageDemandDeducte);
ExcelUtil<StoreProductStorageDemandDeducte> util = new ExcelUtil<StoreProductStorageDemandDeducte>(StoreProductStorageDemandDeducte.class);
public void export(HttpServletResponse response, StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
List<StoreProductStorageDemandDeduct> list = storeProductStorageDemandDeducteService.selectStoreProductStorageDemandDeducteList(storeProductStorageDemandDeducte);
ExcelUtil<StoreProductStorageDemandDeduct> util = new ExcelUtil<StoreProductStorageDemandDeduct>(StoreProductStorageDemandDeduct.class);
util.exportExcel(response, list, "档口商品入库抵扣需求数据");
}
@ -65,7 +65,7 @@ public class StoreProductStorageDemandDeducteController extends XktBaseControlle
@PreAuthorize("@ss.hasPermi('system:deducte:add')")
@Log(title = "档口商品入库抵扣需求", businessType = BusinessType.INSERT)
@PostMapping
public R add(@RequestBody StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
public R add(@RequestBody StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
return success(storeProductStorageDemandDeducteService.insertStoreProductStorageDemandDeducte(storeProductStorageDemandDeducte));
}
@ -75,7 +75,7 @@ public class StoreProductStorageDemandDeducteController extends XktBaseControlle
@PreAuthorize("@ss.hasPermi('system:deducte:edit')")
@Log(title = "档口商品入库抵扣需求", businessType = BusinessType.UPDATE)
@PutMapping
public R edit(@RequestBody StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
public R edit(@RequestBody StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
return success(storeProductStorageDemandDeducteService.updateStoreProductStorageDemandDeducte(storeProductStorageDemandDeducte));
}

View File

@ -0,0 +1,77 @@
package com.ruoyi.web.controller.xkt.vo.storeProductDemand;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品需求分页返回数据")
@Data
@Accessors(chain = true)
public class StoreProdDemandPageResVO {
@ApiModelProperty(name = "storeProdDemandId")
private Long storeProdDemandId;
@ApiModelProperty(name = "storeProdDemandDetailId")
private Long storeProdDemandDetailId;
@ApiModelProperty(name = "档口ID")
private Long storeId;
@ApiModelProperty(name = "档口工厂名称")
private String storeFactoryName;
@ApiModelProperty(name = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty(name = "编号")
private String code;
@ApiModelProperty(name = "货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "生产状态")
private String detailStatus;
@ApiModelProperty(name = "紧急单还是正常单")
private String emergency;
@ApiModelProperty(name = "计划生产数量")
private Integer quantity;
@ApiModelProperty(name = "入库数量")
private Integer storageQuantity;
@ApiModelProperty(name = "生产中数量")
private Integer inProdQuantity;
@ApiModelProperty(name = "尺码30")
private Integer size30;
@ApiModelProperty(name = "尺码31")
private Integer size31;
@ApiModelProperty(name = "尺码32")
private Integer size32;
@ApiModelProperty(name = "尺码33")
private Integer size33;
@ApiModelProperty(name = "尺码34")
private Integer size34;
@ApiModelProperty(name = "尺码35")
private Integer size35;
@ApiModelProperty(name = "尺码36")
private Integer size36;
@ApiModelProperty(name = "尺码37")
private Integer size37;
@ApiModelProperty(name = "尺码38")
private Integer size38;
@ApiModelProperty(name = "尺码39")
private Integer size39;
@ApiModelProperty(name = "尺码40")
private Integer size40;
@ApiModelProperty(name = "尺码41")
private Integer size41;
@ApiModelProperty(name = "尺码42")
private Integer size42;
@ApiModelProperty(name = "尺码43")
private Integer size43;
}

View File

@ -0,0 +1,33 @@
package com.ruoyi.web.controller.xkt.vo.storeProductDemand;
import com.ruoyi.web.controller.xkt.vo.BasePageVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("档口需求分页查询入参")
@Data
public class StoreProdDemandPageVO extends BasePageVO {
@ApiModelProperty(name = "档口ID")
@NotNull(message = "档口ID不能为空")
private Long storeId;
@ApiModelProperty(name = "档口工厂ID")
private Long storeFactoryId;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "备注")
private String remark;
@ApiModelProperty(name = "是否紧急单", notes = "0=正常,1=紧急")
private Integer emergency;
}

View File

@ -0,0 +1,64 @@
package com.ruoyi.web.controller.xkt.vo.storeProductDemand;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品在产数量及库存数量")
@Data
@Builder
public class StoreProdDemandQuantityVO {
@ApiModelProperty(name = "货号")
private Long storeId;
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(name = "货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "今天是否提交过需求申请")
private Boolean todaySubmitted;
@ApiModelProperty(name = "数量对比列")
private List<String> compareStrList;
@ApiModelProperty(name = "尺码为30的数量")
private List<String> size30List;
@ApiModelProperty(name = "尺码为31的数量")
private List<String> size31List;
@ApiModelProperty(name = "尺码为32的数量")
private List<String> size32List;
@ApiModelProperty(name = "尺码为33的数量")
private List<String> size33List;
@ApiModelProperty(name = "尺码为34的数量")
private List<String> size34List;
@ApiModelProperty(name = "尺码为35的数量")
private List<String> size35List;
@ApiModelProperty(name = "尺码为36的数量")
private List<String> size36List;
@ApiModelProperty(name = "尺码为37的数量")
private List<String> size37List;
@ApiModelProperty(name = "尺码为38的数量")
private List<String> size38List;
@ApiModelProperty(name = "尺码为39的数量")
private List<String> size39List;
@ApiModelProperty(name = "尺码为40的数量")
private List<String> size40List;
@ApiModelProperty(name = "尺码为41的数量")
private List<String> size41List;
@ApiModelProperty(name = "尺码为42的数量")
private List<String> size42List;
@ApiModelProperty(name = "尺码为43的数量")
private List<String> size43List;
}

View File

@ -0,0 +1,83 @@
package com.ruoyi.web.controller.xkt.vo.storeProductDemand;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品生产需求单")
@Data
public class StoreProdDemandVO {
@NotNull(message = "档口ID不能为空")
@ApiModelProperty(name = "档口ID")
private Long storeId;
@NotNull(message = "档口工厂ID不能为空")
@ApiModelProperty(name = "档口工厂ID")
private Long storeFactoryId;
@NotNull(message = "需求列表不能为空")
@ApiModelProperty(name = "需求列表")
private List<DetailVO> detailList;
@Data
public static class DetailVO {
@NotNull(message = "档口商品ID不能为空")
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@NotNull(message = "档口商品颜色ID不能为空")
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@NotBlank(message = "货号不能为空")
@ApiModelProperty(name = "货号")
private String prodArtNum;
@NotBlank(message = "颜色不能为空")
@ApiModelProperty(name = "颜色")
private String colorName;
@NotBlank(message = "是否紧急单不能为空")
@ApiModelProperty(name = "是否紧急单", notes = "0=正常,1=紧急")
private String emergency;
@ApiModelProperty(name = "总的数量")
private Integer quantity;
@ApiModelProperty(name = "尺码30")
private Integer size30;
@ApiModelProperty(name = "尺码31")
private Integer size31;
@ApiModelProperty(name = "尺码32")
private Integer size32;
@ApiModelProperty(name = "尺码33")
private Integer size33;
@ApiModelProperty(name = "尺码34")
private Integer size34;
@ApiModelProperty(name = "尺码35")
private Integer size35;
@ApiModelProperty(name = "尺码36")
private Integer size36;
@ApiModelProperty(name = "尺码37")
private Integer size37;
@ApiModelProperty(name = "尺码38")
private Integer size38;
@ApiModelProperty(name = "尺码39")
private Integer size39;
@ApiModelProperty(name = "尺码40")
private Integer size40;
@ApiModelProperty(name = "尺码41")
private Integer size41;
@ApiModelProperty(name = "尺码42")
private Integer size42;
@ApiModelProperty(name = "尺码43")
private Integer size43;
}
}

View File

@ -172,4 +172,7 @@ public class Constants
"org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" };
public static final String UNDELETED = "0";
public static final String DELETED = "2";
}

View File

@ -5,6 +5,7 @@ import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.XktBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@ -16,6 +17,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
public class StoreProductDemand extends XktBaseEntity {
private static final long serialVersionUID = 1L;
@ -25,6 +27,16 @@ public class StoreProductDemand extends XktBaseEntity {
@TableId
private Long id;
/**
* ID
*/
private Long storeId;
/**
* ID
*/
private Long storeFactoryId;
/**
* code
*/
@ -32,10 +44,15 @@ public class StoreProductDemand extends XktBaseEntity {
private String code;
/**
*
* 1 2 3
*/
@Excel(name = "需求状态")
private String demandStatus;
private Integer demandStatus;
/**
*
*/
private String remark;
@Override

View File

@ -6,6 +6,7 @@ import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.XktBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@ -17,6 +18,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
public class StoreProductDemandDetail extends XktBaseEntity {
private static final long serialVersionUID = 1L;
@ -26,6 +28,11 @@ public class StoreProductDemandDetail extends XktBaseEntity {
@TableId
private Long id;
/**
* ID
*/
private Long storeId;
/**
* ID
*/
@ -38,12 +45,39 @@ public class StoreProductDemandDetail extends XktBaseEntity {
@Excel(name = "档口商品颜色ID")
private Long storeProdColorId;
/**
*
*/
private String prodArtNum;
/**
*
*/
private String colorName;
/**
* ID
*/
@Excel(name = "档口商品ID")
private Long storeProdId;
/**
* 0 1
*/
@Excel(name = "是否紧急单", readConverterExp = "0=正常,1=紧急")
private Integer emergency;
/**
*
*/
@Excel(name = "档口商品需求明细状态")
private Integer detailStatus;
/**
*
*/
private Integer quantity;
/**
* 30
*/
@ -130,18 +164,6 @@ public class StoreProductDemandDetail extends XktBaseEntity {
@TableField("size_43")
private Integer size43;
/**
* 0 1
*/
@Excel(name = "是否紧急单", readConverterExp = "0=正常,1=紧急")
private String emergency;
/**
*
*/
@Excel(name = "档口商品需求明细状态")
private String detailStatus;
@Override
public String toString() {

View File

@ -1,5 +1,6 @@
package com.ruoyi.xkt.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.XktBaseEntity;
@ -16,7 +17,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class StoreProductStorageDemandDeducte extends XktBaseEntity {
public class StoreProductStorageDemandDeduct extends XktBaseEntity {
private static final long serialVersionUID = 1L;
/**
@ -61,88 +62,95 @@ public class StoreProductStorageDemandDeducte extends XktBaseEntity {
@Excel(name = "需求code")
private String demandCode;
/**
*
*/
private Integer quantity;
/**
* 30
*/
@Excel(name = "尺码30")
@TableField("size_30")
private Integer size30;
/**
* 31
*/
@Excel(name = "尺码31")
@TableField("size_31")
private Integer size31;
/**
* 32
*/
@Excel(name = "尺码32")
@TableField("size_32")
private Integer size32;
/**
* 33
*/
@Excel(name = "尺码33")
@TableField("size_33")
private Integer size33;
/**
* 34
*/
@Excel(name = "尺码34")
private Integer size34;
@Excel(name = "尺码34")
@TableField("size_34")
private Integer size34;
/**
* 35
*/
@Excel(name = "尺码35")
@TableField("size_35")
private Integer size35;
/**
* 36
*/
@Excel(name = "尺码36")
@TableField("size_36")
private Integer size36;
/**
* 37
*/
@Excel(name = "尺码37")
@TableField("size_37")
private Integer size37;
/**
* 38
*/
@Excel(name = "尺码38")
@TableField("size_38")
private Integer size38;
/**
* 39
*/
@Excel(name = "尺码39")
@TableField("size_39")
private Integer size39;
/**
* 40
*/
@Excel(name = "尺码40")
@TableField("size_40")
private Integer size40;
/**
* 41
*/
@Excel(name = "尺码41")
@TableField("size_41")
private Integer size41;
/**
* 42
*/
@Excel(name = "尺码42")
@TableField("size_42")
private Integer size42;
/**
* 43
*/
@Excel(name = "尺码43")
@TableField("size_43")
private Integer size43;

View File

@ -0,0 +1,72 @@
package com.ruoyi.xkt.dto.storeProductDemand;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品生产需求单")
@Data
@Builder
public class StoreProdDemandDTO {
@ApiModelProperty(name = "档口ID")
private Long storeId;
@ApiModelProperty(name = "档口工厂ID")
private Long storeFactoryId;
@ApiModelProperty(name = "需求列表")
private List<DetailDTO> detailList;
@Data
public static class DetailDTO {
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(name = "货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "是否紧急单", notes = "0=正常,1=紧急")
private Integer emergency;
@ApiModelProperty(name = "总的数量")
private Integer quantity;
@ApiModelProperty(name = "尺码30")
private Integer size30;
@ApiModelProperty(name = "尺码31")
private Integer size31;
@ApiModelProperty(name = "尺码32")
private Integer size32;
@ApiModelProperty(name = "尺码33")
private Integer size33;
@ApiModelProperty(name = "尺码34")
private Integer size34;
@ApiModelProperty(name = "尺码35")
private Integer size35;
@ApiModelProperty(name = "尺码36")
private Integer size36;
@ApiModelProperty(name = "尺码37")
private Integer size37;
@ApiModelProperty(name = "尺码38")
private Integer size38;
@ApiModelProperty(name = "尺码39")
private Integer size39;
@ApiModelProperty(name = "尺码40")
private Integer size40;
@ApiModelProperty(name = "尺码41")
private Integer size41;
@ApiModelProperty(name = "尺码42")
private Integer size42;
@ApiModelProperty(name = "尺码43")
private Integer size43;
}
}

View File

@ -0,0 +1,33 @@
package com.ruoyi.xkt.dto.storeProductDemand;
import com.ruoyi.xkt.dto.BasePageDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("档口需求分页查询入参")
@Data
public class StoreProdDemandPageDTO extends BasePageDTO {
@ApiModelProperty(name = "档口ID")
@NotNull(message = "档口ID不能为空")
private Long storeId;
@ApiModelProperty(name = "档口工厂ID")
private Long storeFactoryId;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "备注")
private String remark;
@ApiModelProperty(name = "是否紧急单", notes = "0=正常,1=紧急")
private Integer emergency;
}

View File

@ -0,0 +1,77 @@
package com.ruoyi.xkt.dto.storeProductDemand;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品需求分页返回数据")
@Data
@Accessors(chain = true)
public class StoreProdDemandPageResDTO {
@ApiModelProperty(name = "storeProdDemandId")
private Long storeProdDemandId;
@ApiModelProperty(name = "storeProdDemandDetailId")
private Long storeProdDemandDetailId;
@ApiModelProperty(name = "档口ID")
private Long storeId;
@ApiModelProperty(name = "档口工厂名称")
private String storeFactoryName;
@ApiModelProperty(name = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty(name = "编号")
private String code;
@ApiModelProperty(name = "货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "生产状态")
private String detailStatus;
@ApiModelProperty(name = "紧急单还是正常单")
private String emergency;
@ApiModelProperty(name = "计划生产数量")
private Integer quantity;
@ApiModelProperty(name = "入库数量")
private Integer storageQuantity;
@ApiModelProperty(name = "生产中数量")
private Integer inProdQuantity;
@ApiModelProperty(name = "尺码30")
private Integer size30;
@ApiModelProperty(name = "尺码31")
private Integer size31;
@ApiModelProperty(name = "尺码32")
private Integer size32;
@ApiModelProperty(name = "尺码33")
private Integer size33;
@ApiModelProperty(name = "尺码34")
private Integer size34;
@ApiModelProperty(name = "尺码35")
private Integer size35;
@ApiModelProperty(name = "尺码36")
private Integer size36;
@ApiModelProperty(name = "尺码37")
private Integer size37;
@ApiModelProperty(name = "尺码38")
private Integer size38;
@ApiModelProperty(name = "尺码39")
private Integer size39;
@ApiModelProperty(name = "尺码40")
private Integer size40;
@ApiModelProperty(name = "尺码41")
private Integer size41;
@ApiModelProperty(name = "尺码42")
private Integer size42;
@ApiModelProperty(name = "尺码43")
private Integer size43;
}

View File

@ -0,0 +1,65 @@
package com.ruoyi.xkt.dto.storeProductDemand;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品在产数量及库存数量")
@Data
@Builder
public class StoreProdDemandQuantityDTO {
@ApiModelProperty(name = "货号")
private Long storeId;
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(name = "货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "今天是否提交过需求申请")
private Boolean todaySubmitted;
@ApiModelProperty(name = "数量对比列")
private List<String> compareStrList;
@ApiModelProperty(name = "尺码为30的数量")
private List<String> size30List;
@ApiModelProperty(name = "尺码为31的数量")
private List<String> size31List;
@ApiModelProperty(name = "尺码为32的数量")
private List<String> size32List;
@ApiModelProperty(name = "尺码为33的数量")
private List<String> size33List;
@ApiModelProperty(name = "尺码为34的数量")
private List<String> size34List;
@ApiModelProperty(name = "尺码为35的数量")
private List<String> size35List;
@ApiModelProperty(name = "尺码为36的数量")
private List<String> size36List;
@ApiModelProperty(name = "尺码为37的数量")
private List<String> size37List;
@ApiModelProperty(name = "尺码为38的数量")
private List<String> size38List;
@ApiModelProperty(name = "尺码为39的数量")
private List<String> size39List;
@ApiModelProperty(name = "尺码为40的数量")
private List<String> size40List;
@ApiModelProperty(name = "尺码为41的数量")
private List<String> size41List;
@ApiModelProperty(name = "尺码为42的数量")
private List<String> size42List;
@ApiModelProperty(name = "尺码为43的数量")
private List<String> size43List;
}

View File

@ -10,10 +10,10 @@ import lombok.experimental.Accessors;
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("增加档口商品库存入参")
@ApiModel("档口商品库存数据传输类")
@Data
@Accessors(chain = true)
public class StoreProdStockUpdateDTO {
public class StoreProdStockDTO {
@ApiModelProperty(name = "档口商品库存ID")
private Long storeProdStockId;

View File

@ -0,0 +1,32 @@
package com.ruoyi.xkt.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author liangyq
* @date 2025-04-02 23:42
*/
@Getter
@AllArgsConstructor
public enum DemandStatus {
// 待生产
PENDING_PRODUCTION(1, "待生产"),
// 生产中
IN_PRODUCTION(2, "生产中"),
// 生产完成
PRODUCTION_COMPLETE(3, "生产完成");
private final Integer value;
private final String label;
public static DemandStatus of(Integer value) {
for (DemandStatus e : DemandStatus.values()) {
if (e.getValue().equals(value)) {
return e;
}
}
throw new IllegalArgumentException("Enum not defined: " + value);
}
}

View File

@ -2,6 +2,8 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.StoreProductDemandDetail;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageResDTO;
import java.util.List;
@ -59,4 +61,13 @@ public interface StoreProductDemandDetailMapper extends BaseMapper<StoreProductD
* @return
*/
public int deleteStoreProductDemandDetailByStoreProdDemaDetailIds(Long[] storeProdDemaDetailIds);
/**
*
*
* @param pageDTO
* @return
*/
List<StoreProdDemandPageResDTO> selectDemandPage(StoreProdDemandPageDTO pageDTO);
}

View File

@ -1,7 +1,7 @@
package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeducte;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeduct;
import java.util.List;
@ -11,14 +11,14 @@ import java.util.List;
* @author ruoyi
* @date 2025-03-26
*/
public interface StoreProductStorageDemandDeducteMapper extends BaseMapper<StoreProductStorageDemandDeducte> {
public interface StoreProductStorageDemandDeductMapper extends BaseMapper<StoreProductStorageDemandDeduct> {
/**
*
*
* @param id
* @return
*/
public StoreProductStorageDemandDeducte selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long id);
public StoreProductStorageDemandDeduct selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long id);
/**
*
@ -26,7 +26,7 @@ public interface StoreProductStorageDemandDeducteMapper extends BaseMapper<Store
* @param storeProductStorageDemandDeducte
* @return
*/
public List<StoreProductStorageDemandDeducte> selectStoreProductStorageDemandDeducteList(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte);
public List<StoreProductStorageDemandDeduct> selectStoreProductStorageDemandDeducteList(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte);
/**
*
@ -34,7 +34,7 @@ public interface StoreProductStorageDemandDeducteMapper extends BaseMapper<Store
* @param storeProductStorageDemandDeducte
* @return
*/
public int insertStoreProductStorageDemandDeducte(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte);
public int insertStoreProductStorageDemandDeducte(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte);
/**
*
@ -42,7 +42,7 @@ public interface StoreProductStorageDemandDeducteMapper extends BaseMapper<Store
* @param storeProductStorageDemandDeducte
* @return
*/
public int updateStoreProductStorageDemandDeducte(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte);
public int updateStoreProductStorageDemandDeducte(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte);
/**
*

View File

@ -1,6 +1,11 @@
package com.ruoyi.xkt.service;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.xkt.domain.StoreProductDemand;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageResDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandQuantityDTO;
import java.util.List;
@ -58,4 +63,34 @@ public interface IStoreProductDemandService {
* @return
*/
public int deleteStoreProductDemandByStoreProdDemandId(Long storeProdDemandId);
/**
*
*
*
* @param storeId ID
* @param storeProdId ID
* @return DTO
*/
List<StoreProdDemandQuantityDTO> getStockAndProduceQuantity(Long storeId, Long storeProdId);
/**
*
*
* @param demandDTO ID
* @return
*/
Integer createDemand(StoreProdDemandDTO demandDTO);
/**
*
*
* 便
*
* @param demandPageDTO DTO
* @return Page<StoreProdDemandPageResDTO>
*/
Page<StoreProdDemandPageResDTO> selectPage(StoreProdDemandPageDTO demandPageDTO);
}

View File

@ -5,7 +5,7 @@ import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import java.util.List;
@ -72,7 +72,7 @@ public interface IStoreProductStockService {
* @param increaseStockList
* @return int
*/
int increaseStock(Long storeId, List<StoreProdStockUpdateDTO> increaseStockList);
int increaseStock(Long storeId, List<StoreProdStockDTO> increaseStockList);
/**
*
@ -80,7 +80,7 @@ public interface IStoreProductStockService {
* @param decreaseStockList
* @return int
*/
int decreaseStock(Long storeId, List<StoreProdStockUpdateDTO> decreaseStockList);
int decreaseStock(Long storeId, List<StoreProdStockDTO> decreaseStockList);
/**
*
@ -97,7 +97,7 @@ public interface IStoreProductStockService {
* @param multiplierFactor 0 1
* @return int
*/
int updateStock(Long storeId, List<StoreProdStockUpdateDTO> updateStockList, Integer multiplierFactor);
int updateStock(Long storeId, List<StoreProdStockDTO> updateStockList, Integer multiplierFactor);
/**
*

View File

@ -1,6 +1,6 @@
package com.ruoyi.xkt.service;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeducte;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeduct;
import java.util.List;
@ -17,7 +17,7 @@ public interface IStoreProductStorageDemandDeducteService {
* @param storeProdStorDemaDeducteId
* @return
*/
public StoreProductStorageDemandDeducte selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long storeProdStorDemaDeducteId);
public StoreProductStorageDemandDeduct selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long storeProdStorDemaDeducteId);
/**
*
@ -25,7 +25,7 @@ public interface IStoreProductStorageDemandDeducteService {
* @param storeProductStorageDemandDeducte
* @return
*/
public List<StoreProductStorageDemandDeducte> selectStoreProductStorageDemandDeducteList(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte);
public List<StoreProductStorageDemandDeduct> selectStoreProductStorageDemandDeducteList(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte);
/**
*
@ -33,7 +33,7 @@ public interface IStoreProductStorageDemandDeducteService {
* @param storeProductStorageDemandDeducte
* @return
*/
public int insertStoreProductStorageDemandDeducte(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte);
public int insertStoreProductStorageDemandDeducte(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte);
/**
*
@ -41,7 +41,7 @@ public interface IStoreProductStorageDemandDeducteService {
* @param storeProductStorageDemandDeducte
* @return
*/
public int updateStoreProductStorageDemandDeducte(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte);
public int updateStoreProductStorageDemandDeducte(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte);
/**
*

View File

@ -16,6 +16,6 @@ public interface IVoucherSequenceService {
* @param voucherDate
* @return String
*/
public String generateCode(Long storeId, String type, String voucherDate);
String generateCode(Long storeId, String type, String voucherDate);
}

View File

@ -1,14 +1,28 @@
package com.ruoyi.xkt.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.xkt.domain.StoreProductDemand;
import com.ruoyi.xkt.mapper.StoreProductDemandMapper;
import com.ruoyi.xkt.domain.*;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageResDTO;
import com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandQuantityDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.mapper.*;
import com.ruoyi.xkt.service.IStoreProductDemandService;
import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.xkt.service.IVoucherSequenceService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* Service
@ -17,9 +31,157 @@ import java.util.List;
* @date 2025-03-26
*/
@Service
@RequiredArgsConstructor
public class StoreProductDemandServiceImpl implements IStoreProductDemandService {
@Autowired
private StoreProductDemandMapper storeProductDemandMapper;
final StoreProductDemandMapper storeProdDemandMapper;
final StoreProductDemandDetailMapper storeProdDemandDetailMapper;
final StoreProductColorMapper storeProdColorMapper;
final StoreProductStockMapper storeProdStockMapper;
final StoreProductMapper storeProdMapper;
final IVoucherSequenceService sequenceService;
final StoreProductStorageDemandDeductMapper storageDemandDeductMapper;
/**
*
*
*
* @param storeId ID
* @param storeProdId ID
* @return DTO
*/
@Override
@Transactional(readOnly = true)
public List<StoreProdDemandQuantityDTO> getStockAndProduceQuantity(Long storeId, Long storeProdId) {
List<StoreProductColor> prodColorList = Optional.ofNullable(this.storeProdColorMapper.selectList(new LambdaQueryWrapper<StoreProductColor>()
.eq(StoreProductColor::getStoreId, storeId).eq(StoreProductColor::getDelFlag, "0").eq(StoreProductColor::getStoreProdId, storeProdId)))
.orElseThrow(() -> new RuntimeException("该档口下没有商品及颜色"));
// 找到档口下该商品
StoreProduct storeProd = Optional.ofNullable(this.storeProdMapper.selectOne(new LambdaQueryWrapper<StoreProduct>()
.eq(StoreProduct::getId, storeProdId).eq(StoreProduct::getDelFlag, "0")))
.orElseThrow(() -> new RuntimeException("该档口下没有商品"));
List<Long> storeProdColorIdList = prodColorList.stream().map(StoreProductColor::getId).collect(Collectors.toList());
// 根据各个颜色查询库存信息
List<StoreProductStock> prodStockList = this.storeProdStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.in(StoreProductStock::getStoreProdColorId, storeProdColorIdList).eq(StoreProductStock::getDelFlag, "0").eq(StoreProductStock::getStoreId, storeId));
// 将库存信息封装成Map
Map<Long, StoreProdStockDTO> stockMap = prodStockList.stream().collect(Collectors
.toMap(StoreProductStock::getStoreProdColorId, x -> BeanUtil.toBean(x, StoreProdStockDTO.class)));
// 查询待产及生产中的库存
List<StoreProductDemandDetail> prodDemandList = this.storeProdDemandDetailMapper.selectList(new LambdaQueryWrapper<StoreProductDemandDetail>()
.in(StoreProductDemandDetail::getStoreProdColorId, storeProdColorIdList).eq(StoreProductDemandDetail::getDelFlag, "0")
.in(StoreProductDemandDetail::getDetailStatus, Arrays.asList("待生产", "生产中")));
// 将生产需求信息封转在map中
Map<Long, List<StoreProductDemandDetail>> demandMap = prodDemandList.stream().collect(Collectors.groupingBy(StoreProductDemandDetail::getStoreProdColorId));
// 组装返回的对比数量
List<String> compareStrList = Arrays.asList("库存数量", "在产数量");
return prodColorList.stream().map(prodColor -> {
StoreProdStockDTO stock = stockMap.get(prodColor.getId());
List<StoreProductDemandDetail> demandDetailList = demandMap.get(prodColor.getId());
Integer size30Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize30).reduce(0, Integer::sum)).orElse(0);
Integer size31Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize31).reduce(0, Integer::sum)).orElse(0);
Integer size32Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize32).reduce(0, Integer::sum)).orElse(0);
Integer size33Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize33).reduce(0, Integer::sum)).orElse(0);
Integer size34Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize34).reduce(0, Integer::sum)).orElse(0);
Integer size35Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize35).reduce(0, Integer::sum)).orElse(0);
Integer size36Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize36).reduce(0, Integer::sum)).orElse(0);
Integer size37Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize37).reduce(0, Integer::sum)).orElse(0);
Integer size38Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize38).reduce(0, Integer::sum)).orElse(0);
Integer size39Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize39).reduce(0, Integer::sum)).orElse(0);
Integer size40Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize40).reduce(0, Integer::sum)).orElse(0);
Integer size41Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize41).reduce(0, Integer::sum)).orElse(0);
Integer size42Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize42).reduce(0, Integer::sum)).orElse(0);
Integer size43Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize43).reduce(0, Integer::sum)).orElse(0);
// 尺码为30的数组
List<String> size30List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize30()) ? stock.getSize30().toString() : "0", size30Demand.toString());
List<String> size31List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize31()) ? stock.getSize31().toString() : "0", size31Demand.toString());
List<String> size32List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize32()) ? stock.getSize32().toString() : "0", size32Demand.toString());
List<String> size33List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize33()) ? stock.getSize33().toString() : "0", size33Demand.toString());
List<String> size34List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize34()) ? stock.getSize34().toString() : "0", size34Demand.toString());
List<String> size35List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize35()) ? stock.getSize35().toString() : "0", size35Demand.toString());
List<String> size36List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize36()) ? stock.getSize36().toString() : "0", size36Demand.toString());
List<String> size37List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize37()) ? stock.getSize37().toString() : "0", size37Demand.toString());
List<String> size38List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize38()) ? stock.getSize38().toString() : "0", size38Demand.toString());
List<String> size39List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize39()) ? stock.getSize39().toString() : "0", size39Demand.toString());
List<String> size40List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize40()) ? stock.getSize40().toString() : "0", size40Demand.toString());
List<String> size41List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize41()) ? stock.getSize41().toString() : "0", size41Demand.toString());
List<String> size42List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize42()) ? stock.getSize42().toString() : "0", size42Demand.toString());
List<String> size43List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize43()) ? stock.getSize43().toString() : "0", size43Demand.toString());
return StoreProdDemandQuantityDTO.builder().storeId(storeId).storeProdId(storeProd.getId()).storeProdColorId(prodColor.getId())
.prodArtNum(storeProd.getProdArtNum()).colorName(prodColor.getColorName()).compareStrList(compareStrList)
// 判断 demandDetailList 中是否有 createTime 为当天的对象
.todaySubmitted(Optional.ofNullable(demandDetailList).orElse(Collections.emptyList()).stream().anyMatch(detail -> DateUtils.isSameDay(detail.getCreateTime(), new Date())))
.size30List(size30List).size31List(size31List).size32List(size32List).size33List(size33List).size34List(size34List).size35List(size35List)
.size36List(size36List).size37List(size37List).size38List(size38List).size39List(size39List).size40List(size40List).size41List(size41List)
.size42List(size42List).size43List(size43List).build();
}).collect(Collectors.toList());
}
/**
*
*
* @param demandDTO ID
* @return
*/
@Override
@Transactional
public Integer createDemand(StoreProdDemandDTO demandDTO) {
StoreProductDemand demand = new StoreProductDemand();
// 生成code
demand.setCode(this.sequenceService.generateCode(demandDTO.getStoreId(), "DEMAND", DateUtils.parseDateToStr(DateUtils.YYYYMMDD, new Date())))
.setDemandStatus(1).setStoreId(demandDTO.getStoreId()).setStoreFactoryId(demandDTO.getStoreFactoryId());
int count = this.storeProdDemandMapper.insert(demand);
// 生产需求详情
List<StoreProductDemandDetail> detailList = demandDTO.getDetailList().stream()
.map(x -> BeanUtil.toBean(x, StoreProductDemandDetail.class).setStoreId(demandDTO.getStoreId())
.setStoreProdDemandId(demand.getId()).setDetailStatus(1)).collect(Collectors.toList());
this.storeProdDemandDetailMapper.insert(detailList);
return count;
}
/**
*
*
* 便
*
* @param pageDTO DTO
* @return
*/
@Override
@Transactional(readOnly = true)
/**
*
*
* @param pageDTO
* @return
*/
public Page<StoreProdDemandPageResDTO> selectPage(StoreProdDemandPageDTO pageDTO) {
// 启用分页查询
PageHelper.startPage(pageDTO.getPageNum(), pageDTO.getPageSize());
// 执行分页查询,获取需求列表
List<StoreProdDemandPageResDTO> demandList = this.storeProdDemandDetailMapper.selectDemandPage(pageDTO);
// 如果查询结果为空,返回一个空的分页对象
if (CollectionUtils.isEmpty(demandList)) {
return Page.empty(pageDTO.getPageSize(), pageDTO.getPageNum());
}
// 提取需求详情ID列表用于后续查询抵扣信息
List<Long> demandDetailIdList = demandList.stream().map(StoreProdDemandPageResDTO::getStoreProdDemandDetailId).distinct().collect(Collectors.toList());
// 找到需求单抵扣的数据
List<StoreProductStorageDemandDeduct> deductList = this.storageDemandDeductMapper.selectList(new LambdaQueryWrapper<StoreProductStorageDemandDeduct>()
.in(StoreProductStorageDemandDeduct::getStoreProdStorDetailId, demandDetailIdList).eq(StoreProductStorageDemandDeduct::getDelFlag, "0"));
// 明细抵扣的数量
Map<Long, Integer> deductQuantityMap = CollectionUtils.isEmpty(deductList) ? new HashMap<>()
: deductList.stream().collect(Collectors.groupingBy(StoreProductStorageDemandDeduct::getStoreProdStorDetailId, Collectors.summingInt(StoreProductStorageDemandDeduct::getQuantity)));
// 更新需求列表中的每个项,设置库存数量和生产中数量
demandList.forEach(x -> {
final Integer deductQuantity = deductQuantityMap.getOrDefault(x.getStoreProdDemandDetailId(), 0);
x.setStorageQuantity(deductQuantity).setInProdQuantity(x.getQuantity() - deductQuantity);
});
// 将查询结果转换为分页对象并返回
return Page.convert(new PageInfo<>(demandList));
}
/**
*
@ -29,7 +191,7 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService
*/
@Override
public StoreProductDemand selectStoreProductDemandByStoreProdDemandId(Long storeProdDemandId) {
return storeProductDemandMapper.selectStoreProductDemandByStoreProdDemandId(storeProdDemandId);
return storeProdDemandMapper.selectStoreProductDemandByStoreProdDemandId(storeProdDemandId);
}
/**
@ -40,7 +202,7 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService
*/
@Override
public List<StoreProductDemand> selectStoreProductDemandList(StoreProductDemand storeProductDemand) {
return storeProductDemandMapper.selectStoreProductDemandList(storeProductDemand);
return storeProdDemandMapper.selectStoreProductDemandList(storeProductDemand);
}
/**
@ -52,7 +214,7 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService
@Override
public int insertStoreProductDemand(StoreProductDemand storeProductDemand) {
storeProductDemand.setCreateTime(DateUtils.getNowDate());
return storeProductDemandMapper.insertStoreProductDemand(storeProductDemand);
return storeProdDemandMapper.insertStoreProductDemand(storeProductDemand);
}
/**
@ -65,7 +227,7 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService
@Transactional
public int updateStoreProductDemand(StoreProductDemand storeProductDemand) {
storeProductDemand.setUpdateTime(DateUtils.getNowDate());
return storeProductDemandMapper.updateStoreProductDemand(storeProductDemand);
return storeProdDemandMapper.updateStoreProductDemand(storeProductDemand);
}
/**
@ -76,7 +238,7 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService
*/
@Override
public int deleteStoreProductDemandByStoreProdDemandIds(Long[] storeProdDemandIds) {
return storeProductDemandMapper.deleteStoreProductDemandByStoreProdDemandIds(storeProdDemandIds);
return storeProdDemandMapper.deleteStoreProductDemandByStoreProdDemandIds(storeProdDemandIds);
}
/**
@ -87,6 +249,8 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService
*/
@Override
public int deleteStoreProductDemandByStoreProdDemandId(Long storeProdDemandId) {
return storeProductDemandMapper.deleteStoreProductDemandByStoreProdDemandId(storeProdDemandId);
return storeProdDemandMapper.deleteStoreProductDemandByStoreProdDemandId(storeProdDemandId);
}
}

View File

@ -15,7 +15,7 @@ import com.ruoyi.xkt.dto.storeProductFile.StoreProdMainPicDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.mapper.StoreProductFileMapper;
import com.ruoyi.xkt.mapper.StoreProductStockMapper;
import com.ruoyi.xkt.mapper.SysFileMapper;
@ -90,12 +90,12 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
*/
@Override
@Transactional
public int increaseStock(Long storeId, List<StoreProdStockUpdateDTO> increaseStockList) {
public int increaseStock(Long storeId, List<StoreProdStockDTO> increaseStockList) {
// 根据关键信息找到已存在的库存
List<StoreProductStock> existStockList = this.storeProdStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getDelFlag, "0")
.in(StoreProductStock::getStoreProdId, increaseStockList.stream().map(StoreProdStockUpdateDTO::getStoreProdId).collect(Collectors.toList()))
.in(StoreProductStock::getStoreProdColorId, increaseStockList.stream().map(StoreProdStockUpdateDTO::getStoreProdColorId).collect(Collectors.toList())));
.in(StoreProductStock::getStoreProdId, increaseStockList.stream().map(StoreProdStockDTO::getStoreProdId).collect(Collectors.toList()))
.in(StoreProductStock::getStoreProdColorId, increaseStockList.stream().map(StoreProdStockDTO::getStoreProdColorId).collect(Collectors.toList())));
// 已存在的档口商品颜色库存map
Map<Long, StoreProductStock> existStockMap = existStockList.stream().collect(Collectors.toMap(StoreProductStock::getStoreProdColorId, Function.identity()));
// 总的待更新的库存列表
@ -118,14 +118,14 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
*/
@Override
@Transactional
public int decreaseStock(Long storeId, List<StoreProdStockUpdateDTO> decreaseStockList) {
public int decreaseStock(Long storeId, List<StoreProdStockDTO> decreaseStockList) {
// 根据关键信息找到已存在的库存
List<StoreProductStock> existStockList = this.storeProdStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getDelFlag, "0")
.in(StoreProductStock::getStoreProdId, decreaseStockList.stream().map(StoreProdStockUpdateDTO::getStoreProdId).collect(Collectors.toList()))
.in(StoreProductStock::getStoreProdColorId, decreaseStockList.stream().map(StoreProdStockUpdateDTO::getStoreProdColorId).collect(Collectors.toList())));
.in(StoreProductStock::getStoreProdId, decreaseStockList.stream().map(StoreProdStockDTO::getStoreProdId).collect(Collectors.toList()))
.in(StoreProductStock::getStoreProdColorId, decreaseStockList.stream().map(StoreProdStockDTO::getStoreProdColorId).collect(Collectors.toList())));
// 待扣减的库存map
Map<Long, StoreProdStockUpdateDTO> decreaseStockMap = decreaseStockList.stream().collect(Collectors.toMap(StoreProdStockUpdateDTO::getStoreProdColorId, Function.identity()));
Map<Long, StoreProdStockDTO> decreaseStockMap = decreaseStockList.stream().collect(Collectors.toMap(StoreProdStockDTO::getStoreProdColorId, Function.identity()));
existStockList.forEach(stock -> this.adjustStock(stock, decreaseStockMap.get(stock.getStoreProdColorId()), Boolean.FALSE));
List<BatchResult> list = this.storeProdStockMapper.updateById(existStockList);
return list.size();
@ -160,18 +160,18 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
*/
@Override
@Transactional
public int updateStock(Long storeId, List<StoreProdStockUpdateDTO> updateStockList, Integer multiplierFactor) {
public int updateStock(Long storeId, List<StoreProdStockDTO> updateStockList, Integer multiplierFactor) {
List<StoreProductStock> stockList = Optional.ofNullable(this.storeProdStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.in(StoreProductStock::getStoreProdId, updateStockList.stream().map(StoreProdStockUpdateDTO::getStoreProdId).collect(Collectors.toList()))
.in(StoreProductStock::getStoreProdId, updateStockList.stream().map(StoreProdStockDTO::getStoreProdId).collect(Collectors.toList()))
.eq(StoreProductStock::getStoreId, storeId)
.eq(StoreProductStock::getDelFlag, "0")))
.orElseThrow(() -> new ServiceException("档口商品库存不存在!", HttpStatus.ERROR));
// 数据库数据map
Map<String, StoreProdStockUpdateDTO> diffStockMap = updateStockList.stream().collect(Collectors
Map<String, StoreProdStockDTO> diffStockMap = updateStockList.stream().collect(Collectors
.toMap(stock -> stock.getProdArtNum() + stock.getStoreProdId() + stock.getStoreProdColorId(), Function.identity()));
List<StoreProductStock> updateList = new ArrayList<>();
stockList.forEach(stock -> {
StoreProdStockUpdateDTO updateStock = diffStockMap.get(stock.getProdArtNum() + stock.getStoreProdId() + stock.getStoreProdColorId());
StoreProdStockDTO updateStock = diffStockMap.get(stock.getProdArtNum() + stock.getStoreProdId() + stock.getStoreProdColorId());
if (ObjectUtils.isEmpty(updateStock)) {
return;
}
@ -322,7 +322,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
* @param isInCrease true false
* @return StoreProductStock
*/
private StoreProductStock adjustStock(StoreProductStock stock, StoreProdStockUpdateDTO adjustDTO, Boolean isInCrease) {
private StoreProductStock adjustStock(StoreProductStock stock, StoreProdStockDTO adjustDTO, Boolean isInCrease) {
if (ObjectUtils.isEmpty(adjustDTO)) {
return stock;
}

View File

@ -1,8 +1,8 @@
package com.ruoyi.xkt.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeducte;
import com.ruoyi.xkt.mapper.StoreProductStorageDemandDeducteMapper;
import com.ruoyi.xkt.domain.StoreProductStorageDemandDeduct;
import com.ruoyi.xkt.mapper.StoreProductStorageDemandDeductMapper;
import com.ruoyi.xkt.service.IStoreProductStorageDemandDeducteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -19,7 +19,7 @@ import java.util.List;
@Service
public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProductStorageDemandDeducteService {
@Autowired
private StoreProductStorageDemandDeducteMapper storeProductStorageDemandDeducteMapper;
private StoreProductStorageDemandDeductMapper storeProductStorageDemandDeducteMapper;
/**
*
@ -29,7 +29,7 @@ public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProduc
*/
@Override
@Transactional(readOnly = true)
public StoreProductStorageDemandDeducte selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long storeProdStorDemaDeducteId) {
public StoreProductStorageDemandDeduct selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long storeProdStorDemaDeducteId) {
return storeProductStorageDemandDeducteMapper.selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(storeProdStorDemaDeducteId);
}
@ -41,7 +41,7 @@ public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProduc
*/
@Override
@Transactional(readOnly = true)
public List<StoreProductStorageDemandDeducte> selectStoreProductStorageDemandDeducteList(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
public List<StoreProductStorageDemandDeduct> selectStoreProductStorageDemandDeducteList(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
return storeProductStorageDemandDeducteMapper.selectStoreProductStorageDemandDeducteList(storeProductStorageDemandDeducte);
}
@ -53,7 +53,7 @@ public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProduc
*/
@Override
@Transactional
public int insertStoreProductStorageDemandDeducte(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
public int insertStoreProductStorageDemandDeducte(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
storeProductStorageDemandDeducte.setCreateTime(DateUtils.getNowDate());
return storeProductStorageDemandDeducteMapper.insertStoreProductStorageDemandDeducte(storeProductStorageDemandDeducte);
}
@ -66,7 +66,7 @@ public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProduc
*/
@Override
@Transactional
public int updateStoreProductStorageDemandDeducte(StoreProductStorageDemandDeducte storeProductStorageDemandDeducte) {
public int updateStoreProductStorageDemandDeducte(StoreProductStorageDemandDeduct storeProductStorageDemandDeducte) {
storeProductStorageDemandDeducte.setUpdateTime(DateUtils.getNowDate());
return storeProductStorageDemandDeducteMapper.updateStoreProductStorageDemandDeducte(storeProductStorageDemandDeducte);
}

View File

@ -16,7 +16,7 @@ import com.ruoyi.xkt.dto.storeProdStorage.StoreProdStorageDTO;
import com.ruoyi.xkt.dto.storeProdStorage.StoreProdStoragePageDTO;
import com.ruoyi.xkt.dto.storeProdStorage.StoreProdStoragePageResDTO;
import com.ruoyi.xkt.dto.storeProdStorage.StoreProdStorageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.mapper.StoreProductStorageDetailMapper;
import com.ruoyi.xkt.mapper.StoreProductStorageMapper;
import com.ruoyi.xkt.service.IStoreProductStockService;
@ -89,7 +89,7 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi
.setStoreProdStorId(storeProdStorage.getId())).collect(Collectors.toList());
this.storageDetailMapper.insert(detailList);
// 构造增加库存的入参DTO
List<StoreProdStockUpdateDTO> increaseStockList = BeanUtil.copyToList(detailList, StoreProdStockUpdateDTO.class);
List<StoreProdStockDTO> increaseStockList = BeanUtil.copyToList(detailList, StoreProdStockDTO.class);
// 增加档口商品的库存
this.stockService.increaseStock(storeProdStorageDTO.getStoreId(), increaseStockList);
return count;
@ -151,7 +151,7 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi
this.storageDetailMapper.updateById(storageDetailList);
// 减少档口商品库存
this.stockService.decreaseStock(storage.getStoreId(), storageDetailList.stream()
.map(x -> BeanUtil.toBean(x, StoreProdStockUpdateDTO.class)).collect(Collectors.toList()));
.map(x -> BeanUtil.toBean(x, StoreProdStockDTO.class)).collect(Collectors.toList()));
return count;
}

View File

@ -12,7 +12,7 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.xkt.domain.*;
import com.ruoyi.xkt.dto.storeCustomer.StoreCusGeneralSaleDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSaleDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSalePageDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSalePageResDTO;
@ -23,7 +23,6 @@ import com.ruoyi.xkt.service.IStoreSaleService;
import com.ruoyi.xkt.service.IVoucherSequenceService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
@ -301,7 +300,7 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
* @param multiplierFactor 1 -1
* @return List<StoreProdStockUpdateDTO>
*/
private List<StoreProdStockUpdateDTO> getStockDiffList(Map<String, Map<Integer, Integer>> saleCountMap, int multiplierFactor) {
private List<StoreProdStockDTO> getStockDiffList(Map<String, Map<Integer, Integer>> saleCountMap, int multiplierFactor) {
return MapUtils.isEmpty(saleCountMap) ? new ArrayList<>() : saleCountMap.entrySet().stream()
.map(entry -> {
String[] keys = entry.getKey().split(":");
@ -309,7 +308,7 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
Long storeProdId = Long.parseLong(keys[1]);
Long storeProdColorId = Long.parseLong(keys[2]);
String colorName = keys[3];
StoreProdStockUpdateDTO dto = new StoreProdStockUpdateDTO().setProdArtNum(prodArtNum)
StoreProdStockDTO dto = new StoreProdStockDTO().setProdArtNum(prodArtNum)
.setStoreProdId(storeProdId).setStoreProdColorId(storeProdColorId).setColorName(colorName);
entry.getValue().forEach((size, diffQuantity) -> {
// 库存变更数量乘以正负1

View File

@ -168,4 +168,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectDemandPage" parameterType="com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageDTO" resultType="com.ruoyi.xkt.dto.storeProductDemand.StoreProdDemandPageResDTO">
SELECT spdd.store_id, spdd.id AS storeProdDemandDetailId, spdd.store_prod_demand_id AS storeProdDemandId, sf.fac_name, spdd.create_time, spd.`code`, spdd.prod_art_num,
spdd.color_name, spdd.quantity, spd.remark,
CASE
spdd.detail_status
WHEN 1 THEN '待生产'
WHEN 2 THEN '生产中'
ELSE '生产完成'
END AS detail_status,
CASE
spdd.emergency
WHEN 0 THEN
'正常单'
WHEN 1 THEN
'紧急单'
END AS emergency,
spdd.size_30 AS size30, spdd.size_31 AS size33, spdd.size_32 AS size32, spdd.size_33 AS size33, spdd.size_34 AS size34, spdd.size_35 AS size35, spdd.size_36 AS size36,
spdd.size_37 AS size37, spdd.size_38 AS size38, spdd.size_39 AS size39, spdd.size_40 AS size40, spdd.size_41 AS size41, spdd.size_42 AS size42, spdd.size_43 AS size43
FROM
store_product_demand_detail spdd
LEFT JOIN store_product_demand spd ON spdd.store_prod_demand_id = spd.id
LEFT JOIN store_factory sf ON spd.store_factory_id = sf.id
WHERE
spdd.del_flag = 0 AND spdd.store_id = #{storeId}
<if test="prodArtNum != null and prodArtNum != ''"> and spdd.prod_art_num = #{prodArtNum}</if>
<if test="storeFactoryId != null "> and sf.id = #{storeFactoryId}</if>
<if test="remark != null and remark != ''"> and menu_name like concat('%', #{menuName}, '%')</if>
<if test="emergency != null "> and spdd.emergency = #{emergency}</if>
</select>
</mapper>

View File

@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.xkt.mapper.StoreProductStorageDemandDeducteMapper">
<mapper namespace="com.ruoyi.xkt.mapper.StoreProductStorageDemandDeductMapper">
<resultMap type="StoreProductStorageDemandDeducte" id="StoreProductStorageDemandDeducteResult">
<resultMap type="StoreProductStorageDemandDeduct" id="StoreProductStorageDemandDeductResult">
<result property="id" column="id" />
<result property="storeProdStorDetailId" column="store_prod_stor_detail_id" />
<result property="storeProdDemandId" column="store_prod_demand_id" />
@ -34,12 +34,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectStoreProductStorageDemandDeducteVo">
select id, store_prod_stor_detail_id, store_prod_demand_id, store_prod_color_id, store_prod_id, storage_code, demand_code, size_30, size_31, size_32, size_33, size_34, size_35, size_36, size_37, size_38, size_39, size_40, size_41, size_42, size_43, version, del_flag, create_by, create_time, update_by, update_time from store_product_storage_demand_deducte
<sql id="selectStoreProductStorageDemandDeductVo">
select id, store_prod_stor_detail_id, store_prod_demand_id, store_prod_color_id, store_prod_id, storage_code, demand_code, size_30, size_31, size_32, size_33, size_34, size_35, size_36, size_37, size_38, size_39, size_40, size_41, size_42, size_43, version, del_flag, create_by, create_time, update_by, update_time from store_product_storage_demand_Deduct
</sql>
<select id="selectStoreProductStorageDemandDeducteList" parameterType="StoreProductStorageDemandDeducte" resultMap="StoreProductStorageDemandDeducteResult">
<include refid="selectStoreProductStorageDemandDeducteVo"/>
<select id="selectStoreProductStorageDemandDeductList" parameterType="StoreProductStorageDemandDeduct" resultMap="StoreProductStorageDemandDeductResult">
<include refid="selectStoreProductStorageDemandDeductVo"/>
<where>
<if test="storeProdStorDetailId != null "> and store_prod_stor_detail_id = #{storeProdStorDetailId}</if>
<if test="storeProdDemandId != null "> and store_prod_demand_id = #{storeProdDemandId}</if>
@ -65,13 +65,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<select id="selectStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId" parameterType="Long" resultMap="StoreProductStorageDemandDeducteResult">
<include refid="selectStoreProductStorageDemandDeducteVo"/>
<select id="selectStoreProductStorageDemandDeductByStoreProdStorDemaDeductId" parameterType="Long" resultMap="StoreProductStorageDemandDeductResult">
<include refid="selectStoreProductStorageDemandDeductVo"/>
where id = #{id}
</select>
<insert id="insertStoreProductStorageDemandDeducte" parameterType="StoreProductStorageDemandDeducte" useGeneratedKeys="true" keyProperty="storeProdStorDemaDeducteId">
insert into store_product_storage_demand_deducte
<insert id="insertStoreProductStorageDemandDeduct" parameterType="StoreProductStorageDemandDeduct" useGeneratedKeys="true" keyProperty="storeProdStorDemaDeductId">
insert into store_product_storage_demand_Deduct
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="storeProdStorDetailId != null">store_prod_stor_detail_id,</if>
<if test="storeProdDemandId != null">store_prod_demand_id,</if>
@ -130,8 +130,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
</insert>
<update id="updateStoreProductStorageDemandDeducte" parameterType="StoreProductStorageDemandDeducte">
update store_product_storage_demand_deducte
<update id="updateStoreProductStorageDemandDeduct" parameterType="StoreProductStorageDemandDeduct">
update store_product_storage_demand_Deduct
<trim prefix="SET" suffixOverrides=",">
<if test="storeProdStorDetailId != null">store_prod_stor_detail_id = #{storeProdStorDetailId},</if>
<if test="storeProdDemandId != null">store_prod_demand_id = #{storeProdDemandId},</if>
@ -163,12 +163,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</update>
<delete id="deleteStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId" parameterType="Long">
delete from store_product_storage_demand_deducte where id = #{id}
<delete id="deleteStoreProductStorageDemandDeductByStoreProdStorDemaDeductId" parameterType="Long">
delete from store_product_storage_demand_Deduct where id = #{id}
</delete>
<delete id="deleteStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteIds" parameterType="String">
delete from store_product_storage_demand_deducte where id in
<delete id="deleteStoreProductStorageDemandDeductByStoreProdStorDemaDeductIds" parameterType="String">
delete from store_product_storage_demand_Deduct where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>