master:销售出库、入库单同步调整库存模块;

pull/1121/head
liujiang 2025-04-02 22:43:54 +08:00
parent eebb4a65a4
commit fef8af2864
36 changed files with 969 additions and 188 deletions

View File

@ -48,7 +48,7 @@ public class StoreCustomerController extends XktBaseController {
@GetMapping(value = "/fuzzy")
public R fuzzyQueryColorList(@RequestParam(value = "cusName", required = false) String cusName,
@RequestParam("storeId") Long storeId) {
return success(BeanUtil.copyToList(storeCusService.fuzzyQueryList(storeId, cusName), StoreCusFuzzyResVO.class));
return R.ok(BeanUtil.copyToList(storeCusService.fuzzyQueryList(storeId, cusName), StoreCusFuzzyResVO.class));
}
@ -60,7 +60,7 @@ public class StoreCustomerController extends XktBaseController {
@Log(title = "新增档口客户", businessType = BusinessType.INSERT)
@PostMapping
public R add(@Validated @RequestBody StoreCusVO storeCusVO) {
return success(storeCusService.create(BeanUtil.toBean(storeCusVO, StoreCusDTO.class)));
return R.ok(storeCusService.create(BeanUtil.toBean(storeCusVO, StoreCusDTO.class)));
}
/**
@ -71,7 +71,7 @@ public class StoreCustomerController extends XktBaseController {
@Log(title = "修改档口客户", businessType = BusinessType.UPDATE)
@PutMapping
public R edit(@Validated @RequestBody StoreCusVO storeCusVO) {
return success(storeCusService.updateStoreCus(BeanUtil.toBean(storeCusVO, StoreCusDTO.class)));
return R.ok(storeCusService.updateStoreCus(BeanUtil.toBean(storeCusVO, StoreCusDTO.class)));
}
/**
@ -93,7 +93,7 @@ public class StoreCustomerController extends XktBaseController {
@ApiOperation(value = "获取档口客户详细信息", httpMethod = "GET", response = R.class)
@GetMapping(value = "/{storeCusId}")
public R getInfo(@PathVariable("storeCusId") Long storeCusId) {
return success(BeanUtil.toBean(storeCusService.selectStoreCustomerByStoreCusId(storeCusId), StoreCusVO.class));
return R.ok(BeanUtil.toBean(storeCusService.selectStoreCustomerByStoreCusId(storeCusId), StoreCusVO.class));
}
/**

View File

@ -47,7 +47,7 @@ public class StoreProductController extends XktBaseController {
@GetMapping(value = "/fuzzy")
public R fuzzyQueryColorList(@RequestParam(value = "prodArtNum", required = false) String prodArtNum,
@RequestParam("storeId") Long storeId) {
return success(BeanUtil.copyToList(storeProdService.fuzzyQueryList(storeId, prodArtNum), StoreProdFuzzyResVO.class));
return R.ok(BeanUtil.copyToList(storeProdService.fuzzyQueryList(storeId, prodArtNum), StoreProdFuzzyResVO.class));
}
/**
@ -79,7 +79,7 @@ public class StoreProductController extends XktBaseController {
@ApiOperation(value = "获取档口商品详细信息", httpMethod = "GET", response = R.class)
@GetMapping(value = "/{storeProdId}")
public R getInfo(@PathVariable("storeProdId") Long storeProdId) {
return success(BeanUtil.toBean(storeProdService.selectStoreProductByStoreProdId(storeProdId), StoreProdResVO.class));
return R.ok(BeanUtil.toBean(storeProdService.selectStoreProductByStoreProdId(storeProdId), StoreProdResVO.class));
}
/**
@ -90,7 +90,7 @@ public class StoreProductController extends XktBaseController {
@ApiOperation(value = "新增档口商品", httpMethod = "POST", response = R.class)
@PostMapping
public R add(@Validated @RequestBody StoreProdVO storeProdVO) {
return success(storeProdService.insertStoreProduct(BeanUtil.toBean(storeProdVO, StoreProdDTO.class)));
return R.ok(storeProdService.insertStoreProduct(BeanUtil.toBean(storeProdVO, StoreProdDTO.class)));
}
/**
@ -101,7 +101,7 @@ public class StoreProductController extends XktBaseController {
@Log(title = "档口商品", businessType = BusinessType.UPDATE)
@PutMapping("/{storeProdId}")
public R edit(@PathVariable Long storeProdId, @Validated @RequestBody StoreProdVO storeProdVO) {
return success(storeProdService.updateStoreProduct(storeProdId, BeanUtil.toBean(storeProdVO, StoreProdDTO.class)));
return R.ok(storeProdService.updateStoreProduct(storeProdId, BeanUtil.toBean(storeProdVO, StoreProdDTO.class)));
}
/**
@ -123,7 +123,7 @@ public class StoreProductController extends XktBaseController {
@ApiOperation(value = "获取档口图片空间", httpMethod = "GET", response = R.class)
@GetMapping(value = "/pic-space/{storeId}")
public R getStoreProductPicSpace(@PathVariable("storeId") Long storeId) {
return success(BeanUtil.toBean(storeProdService.getStoreProductPicSpace(storeId), StoreProdPicSpaceResVO.class));
return R.ok(BeanUtil.toBean(storeProdService.getStoreProductPicSpace(storeId), StoreProdPicSpaceResVO.class));
}

View File

@ -1,18 +1,33 @@
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.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.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;
/**
@ -21,33 +36,87 @@ import java.util.List;
* @author ruoyi
* @date 2025-03-26
*/
@Api(tags = "档口商品库存")
@RestController
@RequiredArgsConstructor
@RequestMapping("/rest/v1/prod-stocks")
public class StoreProductStockController extends XktBaseController {
@Autowired
private IStoreProductStockService storeProductStockService;
final IStoreProductStockService storeProdStockService;
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 商品销售/出库 时读货号,然后查询当前货号颜色的库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
// TODO 销售出库时扣件库存
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:list')")
@ApiOperation(value = "查询档口库存列表", httpMethod = "POST", response = R.class)
@PostMapping("/page")
public R<Page> selectPage(@Validated @RequestBody StoreProdStockPageVO pageVO) {
return R.ok(storeProdStockService.selectPage(BeanUtil.toBean(pageVO, StoreProdStockPageDTO.class)));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:edit')")
@ApiOperation(value = "档口商品库存清零", httpMethod = "PUT", response = R.class)
@Log(title = "档口商品库存清零", businessType = BusinessType.UPDATE)
@PutMapping("/clear-zero/{storeId}/{storeProdStockId}")
public R<Integer> clearStockToZero(@PathVariable("storeId") Long storeId, @PathVariable("storeProdStockId") Long storeProdStockId) {
return R.ok(storeProdStockService.clearStockToZero(storeId, storeProdStockId));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:edit')")
@ApiOperation(value = "直接调整档口商品库存值", httpMethod = "PUT", response = R.class)
@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));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:query')")
@ApiOperation(value = "查询档口商品库存详情", httpMethod = "GET", response = R.class)
@GetMapping(value = "/{storeId}/{storeProdStockId}")
public R getInfo(@PathVariable("storeId") Long storeId, @PathVariable("storeProdStockId") Long storeProdStockId) {
return R.ok(storeProdStockService.selectByStoreProdStockId(storeId, storeProdStockId));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:query')")
@ApiOperation(value = "根据货号查询档口商品库存", httpMethod = "GET", response = R.class)
@GetMapping(value = "/{storeId}/prod-art-num/{prodArtNum}")
public R getInfo(@PathVariable("storeId") Long storeId, @PathVariable("prodArtNum") String prodArtNum) {
return R.ok(storeProdStockService.selectByStoreIdAndProdArtNum(storeId, prodArtNum));
}
// TODO 新增入款单库存会变化
// TODO 新增入款单库存会变化
// TODO 新增入款单库存会变化
// TODO 新增入款单库存会变化
// TODO 新增入款单库存会变化
// TODO 新增入款单库存会变化
// TODO 新增入款单库存会变化
@ -58,7 +127,7 @@ public class StoreProductStockController extends XktBaseController {
@GetMapping("/list")
public TableDataInfo list(StoreProductStock storeProductStock) {
startPage();
List<StoreProductStock> list = storeProductStockService.selectStoreProductStockList(storeProductStock);
List<StoreProductStock> list = storeProdStockService.selectStoreProductStockList(storeProductStock);
return getDataTable(list);
}
@ -69,19 +138,11 @@ public class StoreProductStockController extends XktBaseController {
@Log(title = "档口商品库存", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StoreProductStock storeProductStock) {
List<StoreProductStock> list = storeProductStockService.selectStoreProductStockList(storeProductStock);
List<StoreProductStock> list = storeProdStockService.selectStoreProductStockList(storeProductStock);
ExcelUtil<StoreProductStock> util = new ExcelUtil<StoreProductStock>(StoreProductStock.class);
util.exportExcel(response, list, "档口商品库存数据");
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:query')")
@GetMapping(value = "/{storeProdStockId}")
public R getInfo(@PathVariable("storeProdStockId") Long storeProdStockId) {
return success(storeProductStockService.selectStoreProductStockByStoreProdStockId(storeProdStockId));
}
/**
*
@ -90,18 +151,10 @@ public class StoreProductStockController extends XktBaseController {
@Log(title = "档口商品库存", businessType = BusinessType.INSERT)
@PostMapping
public R add(@RequestBody StoreProductStock storeProductStock) {
return success(storeProductStockService.insertStoreProductStock(storeProductStock));
return success(storeProdStockService.insertStoreProductStock(storeProductStock));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('system:stock:edit')")
@Log(title = "档口商品库存", businessType = BusinessType.UPDATE)
@PutMapping
public R edit(@RequestBody StoreProductStock storeProductStock) {
return success(storeProductStockService.updateStoreProductStock(storeProductStock));
}
/**
*
@ -110,6 +163,8 @@ public class StoreProductStockController extends XktBaseController {
@Log(title = "档口商品库存", businessType = BusinessType.DELETE)
@DeleteMapping("/{storeProdStockIds}")
public R remove(@PathVariable Long[] storeProdStockIds) {
return success(storeProductStockService.deleteStoreProductStockByStoreProdStockIds(storeProdStockIds));
return success(storeProdStockService.deleteStoreProductStockByStoreProdStockIds(storeProdStockIds));
}
}

View File

@ -48,7 +48,7 @@ public class StoreSaleController extends XktBaseController {
@GetMapping("/cus-overall")
public R getCusGeneralSale(@RequestParam("days") Integer days, @RequestParam("storeId") Long storeId,
@RequestParam("storeCusId") Long storeCusId) {
return success(BeanUtil.toBean(storeSaleService.getCusGeneralSale(days, storeId, storeCusId), StoreCusGeneralSaleVO.class));
return R.ok(BeanUtil.toBean(storeSaleService.getCusGeneralSale(days, storeId, storeCusId), StoreCusGeneralSaleVO.class));
}
/**
@ -57,8 +57,8 @@ public class StoreSaleController extends XktBaseController {
@PreAuthorize("@ss.hasPermi('system:sale:list')")
@ApiOperation(value = "查询档口销售出库列表", httpMethod = "POST", response = R.class)
@PostMapping("/page")
public Page page(@Validated @RequestBody StoreSalePageVO salePageVO) {
return storeSaleService.page(BeanUtil.toBean(salePageVO, StoreSalePageDTO.class));
public R<Page> page(@Validated @RequestBody StoreSalePageVO salePageVO) {
return R.ok(storeSaleService.page(BeanUtil.toBean(salePageVO, StoreSalePageDTO.class)));
}
/**
@ -69,32 +69,15 @@ public class StoreSaleController extends XktBaseController {
@Log(title = "档口销售出库", businessType = BusinessType.INSERT)
@PostMapping
public R add(@Validated @RequestBody StoreSaleVO storeSaleVO) {
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
return success(storeSaleService.insertStoreSale(BeanUtil.toBean(storeSaleVO, StoreSaleDTO.class)));
return R.ok(storeSaleService.insertStoreSale(BeanUtil.toBean(storeSaleVO, StoreSaleDTO.class)));
}
/**
*
*
*/
@PreAuthorize("@ss.hasPermi('system:sale:edit')")
@Log(title = "修改档口销售出库", businessType = BusinessType.UPDATE)
@ApiOperation(value = "修改档口销售出库", httpMethod = "PUT", response = R.class)
@ApiOperation(value = "返单后,更新档口销售出库", httpMethod = "PUT", response = R.class)
@PutMapping
public R edit(@Validated @RequestBody StoreSaleVO storeSaleVO) {
@ -112,7 +95,7 @@ public class StoreSaleController extends XktBaseController {
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
return success(storeSaleService.updateStoreSale(BeanUtil.toBean(storeSaleVO, StoreSaleDTO.class)));
return R.ok(storeSaleService.updateStoreSale(BeanUtil.toBean(storeSaleVO, StoreSaleDTO.class)));
}
/**
@ -122,7 +105,7 @@ public class StoreSaleController extends XktBaseController {
@ApiOperation(value = "查询档口销售出库详情", httpMethod = "GET", response = R.class)
@GetMapping(value = "/{storeSaleId}")
public R getInfo(@PathVariable("storeSaleId") Long storeSaleId) {
return success(storeSaleService.selectStoreSaleByStoreSaleId(storeSaleId));
return R.ok(storeSaleService.selectStoreSaleByStoreSaleId(storeSaleId));
}
/**
@ -134,7 +117,7 @@ public class StoreSaleController extends XktBaseController {
@PutMapping("/clear-debt")
public R clearStoreCusDebt(@Validated @RequestBody StoreSalePayStatusVO payStatusVO) {
storeSaleService.clearStoreCusDebt(BeanUtil.toBean(payStatusVO, StoreSalePayStatusDTO.class));
return success();
return R.ok();
}
/**
@ -159,7 +142,7 @@ public class StoreSaleController extends XktBaseController {
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
return success(storeSaleService.deleteStoreSaleByStoreSaleId(storeSaleId));
return R.ok(storeSaleService.deleteStoreSaleByStoreSaleId(storeSaleId));
}

View File

@ -0,0 +1,27 @@
package com.ruoyi.web.controller.xkt.vo.storeProdStock;
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 StoreProdStockPageVO extends BasePageVO {
@ApiModelProperty(name = "档口ID")
@NotNull(message = "档口ID不能为空")
private Long storeId;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
}

View File

@ -0,0 +1,51 @@
package com.ruoyi.web.controller.xkt.vo.storeProdStock;
import com.fasterxml.jackson.annotation.JsonInclude;
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
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreProdStockVO {
@ApiModelProperty(name = "档口商品库存ID")
private Long storeProdStockId;
@ApiModelProperty(name = "颜色名称")
private String colorName;
@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

@ -56,7 +56,7 @@ public class StoreSaleVO {
private Long storeProdId;
@NotNull(message = "档口商品颜色尺码ID不能为空!")
@ApiModelProperty(name = "档口商品颜色尺码ID")
private Long storeProdColorSizeId;
private Long storeProdColorId;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "尺码")

View File

@ -48,16 +48,6 @@ public class Page<T> implements Serializable {
*/
private List<T> list;
/**
*
*/
private int code = HttpStatus.SUCCESS;
/**
*
*/
private String msg = "操作成功";
public static <T> Page<T> convert(PageInfo<?> pageInfo) {
return BeanUtil.toBean(pageInfo, Page.class);
}

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;
@ -47,84 +48,86 @@ public class StoreProductDemandDetail extends XktBaseEntity {
* 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

@ -1,10 +1,12 @@
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;
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 +18,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
public class StoreProductStock extends XktBaseEntity {
private static final long serialVersionUID = 1L;
@ -24,104 +27,116 @@ public class StoreProductStock extends XktBaseEntity {
*/
@TableId
private Long id;
/**
* ID
*/
private Long storeId;
/**
* ID
*/
@Excel(name = "档口商品ID")
private Long storeProdId;
/**
*
*/
@Excel(name = "商品货号")
private String prodArtNum;
/**
* ID
*/
@Excel(name = "档口商品颜色ID")
private Long storeProdColorId;
/**
*
*/
@Excel(name = "颜色名称")
private String colorName;
/**
* 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;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

View File

@ -39,10 +39,10 @@ public class StoreSaleDetail extends XktBaseEntity {
@Excel(name = "档口商品ID")
private Long storeProdId;
/**
* ID
* ID
*/
@Excel(name = "档口商品颜色尺码ID")
private Long storeProdColorSizeId;
@Excel(name = "档口商品颜色ID")
private Long storeProdColorId;
/**
*
*/
@ -98,7 +98,7 @@ public class StoreSaleDetail extends XktBaseEntity {
.append("id", getId())
.append("storeSaleId", getStoreSaleId())
.append("storeProdId", getStoreProdId())
.append("storeProdColorSizeId", getStoreProdColorSizeId())
.append("storeProdColorId", getStoreProdColorId())
.append("saleType", getSaleType())
.append("price", getPrice())
.append("discountedPrice", getDiscountedPrice())

View File

@ -43,10 +43,10 @@ public class StoreSaleRefundRecordDetail extends XktBaseEntity {
private Long storeProdId;
/**
* ID
* ID
*/
@Excel(name = "档口商品颜色尺码ID")
private Long storeProdColorSizeId;
@Excel(name = "档口商品颜色ID")
private Long storeProdColorId;
/**
*
*/
@ -102,7 +102,7 @@ public class StoreSaleRefundRecordDetail extends XktBaseEntity {
.append("id", getId())
.append("storeSaleRefundRecordId", getStoreSaleRefundRecordId())
.append("storeProdId", getStoreProdId())
.append("storeProdColorSizeId", getStoreProdColorSizeId())
.append("storeProdColorId", getStoreProdColorId())
.append("saleType", getSaleType())
.append("price", getPrice())
.append("discountedPrice", getDiscountedPrice())

View File

@ -38,10 +38,10 @@ public class UserShoppingCart extends XktBaseEntity {
private Long storeId;
/**
* store_prod_color_size.id
* store_prod_color.id
*/
@Excel(name = "store_prod_color_size.id")
private Long storeProdColorSizeId;
@Excel(name = "store_prod_color.id")
private Long storeProdColorId;
/**
* store_prod.id
@ -62,7 +62,7 @@ public class UserShoppingCart extends XktBaseEntity {
.append("id", getId())
.append("userId", getUserId())
.append("storeId", getStoreId())
.append("storeProdColorSizeId", getStoreProdColorSizeId())
.append("storeProdColorId", getStoreProdColorId())
.append("storeProdId", getStoreProdId())
.append("quantity", getQuantity())
.append("version", getVersion())

View File

@ -0,0 +1,26 @@
package com.ruoyi.xkt.dto.storeProductStock;
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 StoreProdStockPageDTO extends BasePageDTO {
@ApiModelProperty(name = "档口ID")
private Long storeId;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
}

View File

@ -0,0 +1,61 @@
package com.ruoyi.xkt.dto.storeProductStock;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品库存分页返回数据")
@Data
@Accessors(chain = true)
public class StoreProdStockPageResDTO {
@ApiModelProperty(name = "档口商品库存ID")
private Long storeProdStockId;
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品主图url")
private String mainPicUrl;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色名称")
private String colorName;
@ApiModelProperty(name = "分类类目")
private String prodCateName;
@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;
@ApiModelProperty(name = "总数量")
private Integer totalStock;
}

View File

@ -0,0 +1,61 @@
package com.ruoyi.xkt.dto.storeProductStock;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品库存详情数据")
@Data
@Accessors(chain = true)
public class StoreProdStockResDTO {
@ApiModelProperty(name = "档口商品库存ID")
private Long storeProdStockId;
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品主图url")
private String mainPicUrl;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "颜色名称")
private String colorName;
@ApiModelProperty(name = "分类类目")
private String prodCateName;
@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;
@ApiModelProperty(name = "总数量")
private Integer totalStock;
}

View File

@ -0,0 +1,57 @@
package com.ruoyi.xkt.dto.storeProductStock;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("增加档口商品库存入参")
@Data
@Accessors(chain = true)
public class StoreProdStockUpdateDTO {
@ApiModelProperty(name = "档口商品库存ID")
private Long storeProdStockId;
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "商品货号")
private String prodArtNum;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(name = "颜色名称")
private String colorName;
@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

@ -42,8 +42,8 @@ public class StoreSaleDTO {
public static class SaleDetailVO {
@ApiModelProperty(name = "档口商品ID")
private Long storeProdId;
@ApiModelProperty(name = "档口商品颜色尺码ID")
private Long storeProdColorSizeId;
@ApiModelProperty(name = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(name = "颜色")
private String colorName;
@ApiModelProperty(name = "尺码")

View File

@ -2,6 +2,9 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.dto.storeProdStorage.StoreProdStoragePageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
import java.util.List;
@ -59,4 +62,12 @@ public interface StoreProductStockMapper extends BaseMapper<StoreProductStock> {
* @return
*/
public int deleteStoreProductStockByStoreProdStockIds(Long[] storeProdStockIds);
/**
*
* @param pageDTO
* @return
*/
List<StoreProdStockPageResDTO> selectStockPage(StoreProdStockPageDTO pageDTO);
}

View File

@ -1,6 +1,11 @@
package com.ruoyi.xkt.service;
import com.ruoyi.common.core.page.Page;
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 java.util.List;
@ -14,10 +19,12 @@ public interface IStoreProductStockService {
/**
*
*
*
* @param storeId ID
* @param storeProdStockId
* @return
*/
public StoreProductStock selectStoreProductStockByStoreProdStockId(Long storeProdStockId);
public StoreProdStockResDTO selectByStoreProdStockId(Long storeId, Long storeProdStockId);
/**
*
@ -58,4 +65,52 @@ public interface IStoreProductStockService {
* @return
*/
public int deleteStoreProductStockByStoreProdStockId(Long storeProdStockId);
/**
*
* @param storeId ID
* @param increaseStockList
* @return int
*/
int increaseStock(Long storeId, List<StoreProdStockUpdateDTO> increaseStockList);
/**
*
* @param storeId ID
* @param decreaseStockList
* @return int
*/
int decreaseStock(Long storeId, List<StoreProdStockUpdateDTO> decreaseStockList);
/**
*
* @param storeId ID
* @param storeProdStockId
* @return int
*/
int clearStockToZero(Long storeId, Long storeProdStockId);
/**
*
* @param storeId ID
* @param updateStockList
* @param multiplierFactor 0 1
* @return int
*/
int updateStock(Long storeId, List<StoreProdStockUpdateDTO> updateStockList, Integer multiplierFactor);
/**
*
* @param pageDTO
* @return List<StoreProdStockPageResDTO>
*/
Page<StoreProdStockPageResDTO> selectPage(StoreProdStockPageDTO pageDTO);
/**
* ID
* @param storeId ID
* @param prodArtNum
* @return String
*/
List<StoreProdStockResDTO> selectByStoreIdAndProdArtNum(Long storeId, String prodArtNum);
}

View File

@ -75,6 +75,7 @@ public class StoreProductBarcodeRecordServiceImpl implements IStoreProductBarcod
* @return
*/
@Override
@Transactional
public int deleteStoreProductBarcodeRecordByStoreProdBarcodeRecordIds(Long[] storeProdBarcodeRecordIds) {
return storeProductBarcodeRecordMapper.deleteStoreProductBarcodeRecordByStoreProdBarcodeRecordIds(storeProdBarcodeRecordIds);
}

View File

@ -77,6 +77,7 @@ public class StoreProductColorSizeServiceImpl implements IStoreProductColorSizeS
* @return
*/
@Override
@Transactional
public int deleteStoreProductColorSizeByStoreProdColorSizeIds(Long[] storeProdColorSizeIds) {
return storeProductColorSizeMapper.deleteStoreProductColorSizeByStoreProdColorSizeIds(storeProdColorSizeIds);
}
@ -88,6 +89,7 @@ public class StoreProductColorSizeServiceImpl implements IStoreProductColorSizeS
* @return
*/
@Override
@Transactional
public int deleteStoreProductColorSizeByStoreProdColorSizeId(Long storeProdColorSizeId) {
return storeProductColorSizeMapper.deleteStoreProductColorSizeByStoreProdColorSizeId(storeProdColorSizeId);
}

View File

@ -77,6 +77,7 @@ public class StoreProductDemandDetailServiceImpl implements IStoreProductDemandD
* @return
*/
@Override
@Transactional
public int deleteStoreProductDemandDetailByStoreProdDemaDetailIds(Long[] storeProdDemaDetailIds) {
return storeProductDemandDetailMapper.deleteStoreProductDemandDetailByStoreProdDemaDetailIds(storeProdDemaDetailIds);
}
@ -88,6 +89,7 @@ public class StoreProductDemandDetailServiceImpl implements IStoreProductDemandD
* @return
*/
@Override
@Transactional
public int deleteStoreProductDemandDetailByStoreProdDemaDetailId(Long storeProdDemaDetailId) {
return storeProductDemandDetailMapper.deleteStoreProductDemandDetailByStoreProdDemaDetailId(storeProdDemaDetailId);
}

View File

@ -1,14 +1,35 @@
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.constant.HttpStatus;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.xkt.domain.StoreProductFile;
import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.domain.SysFile;
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.mapper.StoreProductFileMapper;
import com.ruoyi.xkt.mapper.StoreProductStockMapper;
import com.ruoyi.xkt.mapper.SysFileMapper;
import com.ruoyi.xkt.service.IStoreProductStockService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.executor.BatchResult;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* Service
@ -17,20 +38,218 @@ import java.util.List;
* @date 2025-03-26
*/
@Service
@RequiredArgsConstructor
public class StoreProductStockServiceImpl implements IStoreProductStockService {
@Autowired
private StoreProductStockMapper storeProductStockMapper;
final StoreProductStockMapper storeProdStockMapper;
final StoreProductFileMapper storeProdFileMapper;
final SysFileMapper fileMapper;
@Override
@Transactional(readOnly = true)
public Page<StoreProdStockPageResDTO> selectPage(StoreProdStockPageDTO pageDTO) {
PageHelper.startPage(pageDTO.getPageNum(), pageDTO.getPageSize());
List<StoreProdStockPageResDTO> stockList = this.storeProdStockMapper.selectStockPage(pageDTO);
if (CollectionUtils.isEmpty(stockList)) {
return Page.empty(pageDTO.getPageSize(), pageDTO.getPageNum());
}
// 提取查询结果中的商店产品ID列表
List<Long> storeProdIdList = stockList.stream().map(StoreProdStockPageResDTO::getStoreProdId).collect(Collectors.toList());
// 查找排名第一个商品主图列表
List<StoreProdMainPicDTO> mainPicList = this.storeProdFileMapper.selectMainPicByStoreProdIdList(storeProdIdList, "MAIN_PIC", 1);
Map<Long, String> mainPicMap = CollectionUtils.isEmpty(mainPicList) ? new HashMap<>() : mainPicList.stream()
.collect(Collectors.toMap(StoreProdMainPicDTO::getStoreProdId, StoreProdMainPicDTO::getFileUrl));
// 为每个产品设置主图URL和标准尺码列表
stockList.forEach(x -> x.setMainPicUrl(mainPicMap.get(x.getStoreProdId())));
return Page.convert(new PageInfo<>(stockList));
}
/**
* ID
*
* @param storeId ID
* @param prodArtNum
* @return String
*/
@Override
@Transactional(readOnly = true)
public List<StoreProdStockResDTO> selectByStoreIdAndProdArtNum(Long storeId, String prodArtNum) {
List<StoreProductStock> stockList = this.storeProdStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getProdArtNum, prodArtNum)
.eq(StoreProductStock::getDelFlag, "0"));
return CollectionUtils.isEmpty(stockList) ? new ArrayList<>()
: stockList.stream().map(x -> BeanUtil.toBean(x, StoreProdStockResDTO.class).setStoreProdStockId(x.getId())).collect(Collectors.toList());
}
/**
*
*
* @param increaseStockList
* @return int
*/
@Override
@Transactional
public int increaseStock(Long storeId, List<StoreProdStockUpdateDTO> 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())));
// 已存在的档口商品颜色库存map
Map<Long, StoreProductStock> existStockMap = existStockList.stream().collect(Collectors.toMap(StoreProductStock::getStoreProdColorId, Function.identity()));
// 总的待更新的库存列表
List<StoreProductStock> stockList = increaseStockList.stream().map(increseStock -> {
StoreProductStock stock = existStockMap.containsKey(increseStock.getStoreProdColorId())
? this.adjustStock(existStockMap.get(increseStock.getStoreProdColorId()), increseStock, Boolean.TRUE)
: BeanUtil.toBean(increseStock, StoreProductStock.class);
return stock.setStoreId(storeId);
}).collect(Collectors.toList());
List<BatchResult> list = this.storeProdStockMapper.insertOrUpdate(stockList);
return list.size();
}
/**
*
*
* @param storeId ID
* @param decreaseStockList
* @return int
*/
@Override
@Transactional
public int decreaseStock(Long storeId, List<StoreProdStockUpdateDTO> 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())));
// 待扣减的库存map
Map<Long, StoreProdStockUpdateDTO> decreaseStockMap = decreaseStockList.stream().collect(Collectors.toMap(StoreProdStockUpdateDTO::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();
}
/**
*
*
* @param storeId
* @param storeProdStockId
* @return int
*/
@Override
@Transactional
public int clearStockToZero(Long storeId, Long storeProdStockId) {
StoreProductStock stock = Optional.ofNullable(this.storeProdStockMapper.selectOne(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getId, storeProdStockId).eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getDelFlag, "0")))
.orElseThrow(() -> new ServiceException("档口商品库存不存在!", HttpStatus.ERROR));
stock.setSize30(0).setSize31(0).setSize32(0).setSize33(0).setSize34(0).setSize35(0).setSize36(0).setSize37(0)
.setSize38(0).setSize39(0).setSize40(0).setSize41(0).setSize42(0).setSize43(0);
return this.storeProdStockMapper.updateById(stock);
}
/**
*
*
* @param storeId ID
* @param updateStockList diff list
* @param multiplierFactor 0 1
* @return int
*/
@Override
@Transactional
public int updateStock(Long storeId, List<StoreProdStockUpdateDTO> 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()))
.eq(StoreProductStock::getStoreId, storeId)
.eq(StoreProductStock::getDelFlag, "0")))
.orElseThrow(() -> new ServiceException("档口商品库存不存在!", HttpStatus.ERROR));
// 数据库数据map
Map<String, StoreProdStockUpdateDTO> 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());
if (ObjectUtils.isEmpty(updateStock)) {
return;
}
if (ObjectUtils.isNotEmpty(updateStock.getSize30())) {
stock.setSize30(ObjectUtils.defaultIfNull(stock.getSize30(), 0) * multiplierFactor + updateStock.getSize30());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize31())) {
stock.setSize31(ObjectUtils.defaultIfNull(stock.getSize31(), 0) * multiplierFactor + updateStock.getSize31());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize32())) {
stock.setSize32(ObjectUtils.defaultIfNull(stock.getSize32(), 0) * multiplierFactor + updateStock.getSize32());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize33())) {
stock.setSize33(ObjectUtils.defaultIfNull(stock.getSize33(), 0) * multiplierFactor + updateStock.getSize33());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize34())) {
stock.setSize34(ObjectUtils.defaultIfNull(stock.getSize34(), 0) * multiplierFactor + updateStock.getSize34());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize35())) {
stock.setSize35(ObjectUtils.defaultIfNull(stock.getSize35(), 0) * multiplierFactor + updateStock.getSize35());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize36())) {
stock.setSize36(ObjectUtils.defaultIfNull(stock.getSize36(), 0) * multiplierFactor + updateStock.getSize36());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize37())) {
stock.setSize37(ObjectUtils.defaultIfNull(stock.getSize37(), 0) * multiplierFactor + updateStock.getSize37());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize38())) {
stock.setSize38(ObjectUtils.defaultIfNull(stock.getSize38(), 0) * multiplierFactor + updateStock.getSize38());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize39())) {
stock.setSize39(ObjectUtils.defaultIfNull(stock.getSize39(), 0) * multiplierFactor + updateStock.getSize39());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize40())) {
stock.setSize40(ObjectUtils.defaultIfNull(stock.getSize40(), 0) * multiplierFactor + updateStock.getSize40());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize41())) {
stock.setSize41(ObjectUtils.defaultIfNull(stock.getSize41(), 0) * multiplierFactor + updateStock.getSize41());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize42())) {
stock.setSize42(ObjectUtils.defaultIfNull(stock.getSize42(), 0) * multiplierFactor + updateStock.getSize42());
}
if (ObjectUtils.isNotEmpty(updateStock.getSize43())) {
stock.setSize43(ObjectUtils.defaultIfNull(stock.getSize43(), 0) * multiplierFactor + updateStock.getSize43());
}
updateList.add(stock);
});
List<BatchResult> list = this.storeProdStockMapper.updateById(updateList);
return list.size();
}
/**
*
*
* @param storeId ID
* @param storeProdStockId
* @return
*/
@Override
@Transactional(readOnly = true)
public StoreProductStock selectStoreProductStockByStoreProdStockId(Long storeProdStockId) {
return storeProductStockMapper.selectStoreProductStockByStoreProdStockId(storeProdStockId);
public StoreProdStockResDTO selectByStoreProdStockId(Long storeId, Long storeProdStockId) {
StoreProductStock stock = Optional.ofNullable(this.storeProdStockMapper.selectOne(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getId, storeProdStockId).eq(StoreProductStock::getStoreId, storeId)
.eq(StoreProductStock::getDelFlag, "0")))
.orElseThrow(() -> new ServiceException("档口商品库存不存在!", HttpStatus.ERROR));
// 档口商品第一张主图
StoreProductFile mainPic = Optional.ofNullable(this.storeProdFileMapper.selectOne(new LambdaQueryWrapper<StoreProductFile>()
.eq(StoreProductFile::getStoreProdId, stock.getStoreProdId()).eq(StoreProductFile::getStoreId, storeId)
.eq(StoreProductFile::getDelFlag, "0").eq(StoreProductFile::getFileType, "MAIN_PIC")
.eq(StoreProductFile::getOrderNum, 1)))
.orElseThrow(() -> new ServiceException("商品主图不存在!", HttpStatus.ERROR));
// 图片
SysFile file = Optional.ofNullable(this.fileMapper.selectOne(new LambdaQueryWrapper<SysFile>()
.eq(SysFile::getId, mainPic.getFileId()).eq(SysFile::getDelFlag, "0")))
.orElseThrow(() -> new ServiceException("商品主图不存在!", HttpStatus.ERROR));
return BeanUtil.toBean(stock, StoreProdStockResDTO.class)
.setStoreProdStockId(stock.getId()).setMainPicUrl(file.getFileUrl());
}
/**
@ -42,7 +261,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
@Override
@Transactional(readOnly = true)
public List<StoreProductStock> selectStoreProductStockList(StoreProductStock storeProductStock) {
return storeProductStockMapper.selectStoreProductStockList(storeProductStock);
return storeProdStockMapper.selectStoreProductStockList(storeProductStock);
}
/**
@ -55,7 +274,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
@Transactional
public int insertStoreProductStock(StoreProductStock storeProductStock) {
storeProductStock.setCreateTime(DateUtils.getNowDate());
return storeProductStockMapper.insertStoreProductStock(storeProductStock);
return storeProdStockMapper.insertStoreProductStock(storeProductStock);
}
/**
@ -68,7 +287,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
@Transactional
public int updateStoreProductStock(StoreProductStock storeProductStock) {
storeProductStock.setUpdateTime(DateUtils.getNowDate());
return storeProductStockMapper.updateStoreProductStock(storeProductStock);
return storeProdStockMapper.updateStoreProductStock(storeProductStock);
}
/**
@ -78,8 +297,9 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
* @return
*/
@Override
@Transactional
public int deleteStoreProductStockByStoreProdStockIds(Long[] storeProdStockIds) {
return storeProductStockMapper.deleteStoreProductStockByStoreProdStockIds(storeProdStockIds);
return storeProdStockMapper.deleteStoreProductStockByStoreProdStockIds(storeProdStockIds);
}
/**
@ -89,7 +309,69 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
* @return
*/
@Override
@Transactional
public int deleteStoreProductStockByStoreProdStockId(Long storeProdStockId) {
return storeProductStockMapper.deleteStoreProductStockByStoreProdStockId(storeProdStockId);
return storeProdStockMapper.deleteStoreProductStockByStoreProdStockId(storeProdStockId);
}
/**
* diff
* @param stock
* @param adjustDTO diff
* @param isInCrease true false
* @return StoreProductStock
*/
private StoreProductStock adjustStock(StoreProductStock stock, StoreProdStockUpdateDTO adjustDTO, Boolean isInCrease) {
if (ObjectUtils.isEmpty(adjustDTO)) {
return stock;
}
// 如果isInCrease为true则为1反之则为-1
int adjustSign = isInCrease ? 1 : -1;
if (ObjectUtils.isNotEmpty(adjustDTO.getSize30())) {
stock.setSize30(adjustDTO.getSize30() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize30(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize31())) {
stock.setSize31(adjustDTO.getSize31() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize31(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize32())) {
stock.setSize32(adjustDTO.getSize32() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize32(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize33())) {
stock.setSize33(adjustDTO.getSize33() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize33(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize34())) {
stock.setSize34(adjustDTO.getSize34() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize34(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize35())) {
stock.setSize35(adjustDTO.getSize35() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize35(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize36())) {
stock.setSize36(adjustDTO.getSize36() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize36(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize37())) {
stock.setSize37(adjustDTO.getSize37() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize37(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize38())) {
stock.setSize38(adjustDTO.getSize38() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize38(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize39())) {
stock.setSize39(adjustDTO.getSize39() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize39(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize40())) {
stock.setSize40(adjustDTO.getSize40() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize40(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize41())) {
stock.setSize41(adjustDTO.getSize41() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize41(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize42())) {
stock.setSize42(adjustDTO.getSize42() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize42(), 0));
}
if (ObjectUtils.isNotEmpty(adjustDTO.getSize43())) {
stock.setSize43(adjustDTO.getSize43() * adjustSign + ObjectUtils.defaultIfNull(stock.getSize43(), 0));
}
return stock;
}
}

View File

@ -78,6 +78,7 @@ public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProduc
* @return
*/
@Override
@Transactional
public int deleteStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteIds(Long[] storeProdStorDemaDeducteIds) {
return storeProductStorageDemandDeducteMapper.deleteStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteIds(storeProdStorDemaDeducteIds);
}
@ -89,6 +90,7 @@ public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProduc
* @return
*/
@Override
@Transactional
public int deleteStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(Long storeProdStorDemaDeducteId) {
return storeProductStorageDemandDeducteMapper.deleteStoreProductStorageDemandDeducteByStoreProdStorDemaDeducteId(storeProdStorDemaDeducteId);
}

View File

@ -78,6 +78,7 @@ public class StoreProductStorageDetailServiceImpl implements IStoreProductStorag
* @return
*/
@Override
@Transactional
public int deleteStoreProductStorageDetailByStoreProdStorDetailIds(Long[] storeProdStorDetailIds) {
return storeProductStorageDetailMapper.deleteStoreProductStorageDetailByStoreProdStorDetailIds(storeProdStorDetailIds);
}

View File

@ -16,15 +16,14 @@ 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.storeSale.StoreSalePageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.mapper.StoreProductStorageDetailMapper;
import com.ruoyi.xkt.mapper.StoreProductStorageMapper;
import com.ruoyi.xkt.service.IStoreProductStockService;
import com.ruoyi.xkt.service.IStoreProductStorageService;
import com.ruoyi.xkt.service.IVoucherSequenceService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -46,6 +45,7 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi
final StoreProductStorageMapper storageMapper;
final StoreProductStorageDetailMapper storageDetailMapper;
final IVoucherSequenceService sequenceService;
final IStoreProductStockService stockService;
/**
@ -87,6 +87,10 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi
List<StoreProductStorageDetail> detailList = storeProdStorageDTO.getDetailList().stream().map(x -> BeanUtil.toBean(x, StoreProductStorageDetail.class)
.setStoreProdStorId(storeProdStorage.getId())).collect(Collectors.toList());
this.storageDetailMapper.insert(detailList);
// 构造增加库存的入参DTO
List<StoreProdStockUpdateDTO> increaseStockList = BeanUtil.copyToList(detailList, StoreProdStockUpdateDTO.class);
// 增加档口商品的库存
this.stockService.increaseStock(storeProdStorageDTO.getStoreId(), increaseStockList);
return count;
}
@ -144,12 +148,9 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi
.eq(StoreProductStorageDetail::getStoreProdStorId, storeProdStorId).eq(StoreProductStorageDetail::getDelFlag, "0"));
storageDetailList.forEach(x -> x.setDelFlag("2"));
this.storageDetailMapper.updateById(storageDetailList);
// TODO 更新档口商品库存
// TODO 更新档口商品库存
// TODO 更新档口商品库存
// TODO 更新档口商品库存
// 减少档口商品库存
this.stockService.decreaseStock(storage.getStoreId(), storageDetailList.stream()
.map(x -> BeanUtil.toBean(x, StoreProdStockUpdateDTO.class)).collect(Collectors.toList()));
return count;
}

View File

@ -76,6 +76,7 @@ public class StoreRoleAccountServiceImpl implements IStoreRoleAccountService {
* @return
*/
@Override
@Transactional
public int deleteStoreRoleAccountByStoreRoleAccIds(Long[] storeRoleAccIds) {
return storeRoleAccountMapper.deleteStoreRoleAccountByStoreRoleAccIds(storeRoleAccIds);
}
@ -87,6 +88,7 @@ public class StoreRoleAccountServiceImpl implements IStoreRoleAccountService {
* @return
*/
@Override
@Transactional
public int deleteStoreRoleAccountByStoreRoleAccId(Long storeRoleAccId) {
return storeRoleAccountMapper.deleteStoreRoleAccountByStoreRoleAccId(storeRoleAccId);
}

View File

@ -76,6 +76,7 @@ public class StoreRoleMenuServiceImpl implements IStoreRoleMenuService {
* @return
*/
@Override
@Transactional
public int deleteStoreRoleMenuByStoreRoleMenuIds(Long[] storeRoleMenuIds) {
return storeRoleMenuMapper.deleteStoreRoleMenuByStoreRoleMenuIds(storeRoleMenuIds);
}
@ -87,6 +88,7 @@ public class StoreRoleMenuServiceImpl implements IStoreRoleMenuService {
* @return
*/
@Override
@Transactional
public int deleteStoreRoleMenuByStoreRoleMenuId(Long storeRoleMenuId) {
return storeRoleMenuMapper.deleteStoreRoleMenuByStoreRoleMenuId(storeRoleMenuId);
}

View File

@ -76,6 +76,7 @@ public class StoreRoleServiceImpl implements IStoreRoleService {
* @return
*/
@Override
@Transactional
public int deleteStoreRoleByStoreRoleIds(Long[] storeRoleIds) {
return storeRoleMapper.deleteStoreRoleByStoreRoleIds(storeRoleIds);
}
@ -87,6 +88,7 @@ public class StoreRoleServiceImpl implements IStoreRoleService {
* @return
*/
@Override
@Transactional
public int deleteStoreRoleByStoreRoleId(Long storeRoleId) {
return storeRoleMapper.deleteStoreRoleByStoreRoleId(storeRoleId);
}

View File

@ -76,6 +76,7 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService {
* @return
*/
@Override
@Transactional
public int deleteStoreSaleDetailByStoreSaleDetailIds(Long[] storeSaleDetailIds) {
return storeSaleDetailMapper.deleteStoreSaleDetailByStoreSaleDetailIds(storeSaleDetailIds);
}
@ -87,6 +88,7 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService {
* @return
*/
@Override
@Transactional
public int deleteStoreSaleDetailByStoreSaleDetailId(Long storeSaleDetailId) {
return storeSaleDetailMapper.deleteStoreSaleDetailByStoreSaleDetailId(storeSaleDetailId);
}

View File

@ -76,6 +76,7 @@ public class StoreSaleRefundRecordServiceImpl implements IStoreSaleRefundRecordS
* @return
*/
@Override
@Transactional
public int deleteStoreSaleRefundRecordByStoreSaleRefundRecordIds(Long[] storeSaleRefundRecordIds) {
return storeSaleRefundRecordMapper.deleteStoreSaleRefundRecordByStoreSaleRefundRecordIds(storeSaleRefundRecordIds);
}
@ -87,6 +88,7 @@ public class StoreSaleRefundRecordServiceImpl implements IStoreSaleRefundRecordS
* @return
*/
@Override
@Transactional
public int deleteStoreSaleRefundRecordByStoreSaleRefundRecordId(Long storeSaleRefundRecordId) {
return storeSaleRefundRecordMapper.deleteStoreSaleRefundRecordByStoreSaleRefundRecordId(storeSaleRefundRecordId);
}

View File

@ -10,18 +10,21 @@ import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bigDecimal.CollectorsUtil;
import com.ruoyi.xkt.domain.*;
import com.ruoyi.xkt.dto.storeCustomer.StoreCusGeneralSaleDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockUpdateDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSaleDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSalePageDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSalePageResDTO;
import com.ruoyi.xkt.dto.storeSale.StoreSalePayStatusDTO;
import com.ruoyi.xkt.mapper.*;
import com.ruoyi.xkt.service.IStoreProductStockService;
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;
import org.springframework.transaction.annotation.Transactional;
@ -29,10 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -51,6 +51,7 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
final StoreSaleDetailMapper storeSaleDetailMapper;
final StoreSaleRefundRecordMapper refundRecordMapper;
final StoreSaleRefundRecordDetailMapper refundRecordDetailMapper;
final IStoreProductStockService storeProdStockService;
/**
*
@ -152,20 +153,18 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
List<StoreSaleDetail> saleDetailList = storeSaleDTO.getDetailList().stream().map(x -> BeanUtil.toBean(x, StoreSaleDetail.class)
.setSaleType(storeSaleDTO.getSaleType()).setStoreSaleId(storeSale.getId())).collect(Collectors.toList());
this.storeSaleDetailMapper.insert(saleDetailList);
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// 先汇总当前这笔订单商品明细的销售数量,包括销售及退货 key prodArtNum + storeProdId + storeProdColorId + colorName, value: map(key:size,value:count)
Map<String, Map<Integer, Integer>> saleCountMap = storeSaleDTO.getDetailList().stream().collect(Collectors
.groupingBy(x -> x.getProdArtNum() + ":" + x.getStoreProdId() + ":" + x.getStoreProdColorId() + ":" + x.getColorName(), Collectors
.groupingBy(StoreSaleDTO.SaleDetailVO::getSize, Collectors
.mapping(StoreSaleDTO.SaleDetailVO::getQuantity, Collectors.reducing(0, Integer::sum)))));
// 组装库存调整入参调整库存
this.storeProdStockService.updateStock(storeSale.getStoreId(), this.getStockDiffList(saleCountMap, -1), 1);
return count;
}
/**
*
*
@ -204,27 +203,21 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
.setOperatorId(loginUser.getUserId()).setOperatorName(loginUser.getUsername()));
// 先将所有明细置为无效,再新增
this.storeSaleDetailMapper.updateById(saleDetailList.stream().peek(x -> x.setDelFlag("2")).collect(Collectors.toList()));
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 扣件库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// 再新增档口销售出库明细数据
List<StoreSaleDetail> detailList = storeSaleDTO.getDetailList().stream().map(x -> BeanUtil.toBean(x, StoreSaleDetail.class)
.setSaleType(storeSaleDTO.getSaleType()).setStoreSaleId(storeSale.getId())).collect(Collectors.toList());
this.storeSaleDetailMapper.insert(detailList);
// 汇总编辑的存货总数量
final List<StoreSaleDetail> totalList = new ArrayList<StoreSaleDetail>(saleDetailList){{
addAll(detailList);
}};
// 先汇总当前这笔订单商品明细的销售数量,包括销售及退货 key prodArtNum + storeProdId + storeProdColorId + colorName, value: map(key:size,value:count)
Map<String, Map<Integer, Integer>> saleCountMap = totalList.stream().collect(Collectors
.groupingBy(x -> x.getProdArtNum() + ":" + x.getStoreProdId() + ":" + x.getStoreProdColorId() + ":" + x.getColorName(), Collectors
.groupingBy(StoreSaleDetail::getSize, Collectors
.mapping(StoreSaleDetail::getQuantity, Collectors.reducing(0, Integer::sum)))));
// 调整库存
this.storeProdStockService.updateStock(storeSale.getStoreId(), this.getStockDiffList(saleCountMap, 1), 1);
return count;
}
@ -255,16 +248,8 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
* @return
*/
@Override
@Transactional
public int deleteStoreSaleByStoreSaleId(Long storeSaleId) {
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 增加库存
// TODO 客户销售金额扣减、商品销售金额扣减
// 删除档口销售出库数据
StoreSale storeSale = Optional.ofNullable(this.storeSaleMapper.selectOne(new LambdaQueryWrapper<StoreSale>()
.eq(StoreSale::getId, storeSaleId).eq(StoreSale::getDelFlag, "0")))
@ -275,6 +260,13 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
List<StoreSaleDetail> saleDetailList = this.storeSaleDetailMapper.selectList(new LambdaQueryWrapper<StoreSaleDetail>()
.eq(StoreSaleDetail::getStoreSaleId, storeSaleId).eq(StoreSaleDetail::getDelFlag, "0"));
this.storeSaleDetailMapper.updateById(saleDetailList.stream().peek(x -> x.setDelFlag("2")).collect(Collectors.toList()));
// 先汇总当前这笔订单商品明细的销售数量,包括销售及退货 key prodArtNum + storeProdId + storeProdColorId + colorName, value: map(key:size,value:count)
Map<String, Map<Integer, Integer>> saleCountMap = saleDetailList.stream().collect(Collectors
.groupingBy(x -> x.getProdArtNum() + ":" + x.getStoreProdId() + ":" + x.getStoreProdColorId() + ":" + x.getColorName(), Collectors
.groupingBy(StoreSaleDetail::getSize, Collectors
.mapping(StoreSaleDetail::getQuantity, Collectors.reducing(0, Integer::sum)))));
// 组装库存调整库存
this.storeProdStockService.updateStock(storeSale.getStoreId(), this.getStockDiffList(saleCountMap, 1), 1);
return count;
}
@ -286,6 +278,7 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
* @return
*/
@Override
@Transactional
public int deleteStoreSaleByStoreSaleIds(Long[] storeSaleIds) {
return storeSaleMapper.deleteStoreSaleByStoreSaleIds(storeSaleIds);
}
@ -302,6 +295,76 @@ public class StoreSaleServiceImpl implements IStoreSaleService {
return null;
}
/**
*
* @param saleCountMap map
* @param multiplierFactor 1 -1
* @return List<StoreProdStockUpdateDTO>
*/
private List<StoreProdStockUpdateDTO> 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(":");
String prodArtNum = keys[0];
Long storeProdId = Long.parseLong(keys[1]);
Long storeProdColorId = Long.parseLong(keys[2]);
String colorName = keys[3];
StoreProdStockUpdateDTO dto = new StoreProdStockUpdateDTO().setProdArtNum(prodArtNum)
.setStoreProdId(storeProdId).setStoreProdColorId(storeProdColorId).setColorName(colorName);
entry.getValue().forEach((size, diffQuantity) -> {
// 库存变更数量乘以正负1
diffQuantity = diffQuantity * multiplierFactor;
switch (size) {
case 30:
dto.setSize30(diffQuantity);
break;
case 31:
dto.setSize31(diffQuantity);
break;
case 32:
dto.setSize32(diffQuantity);
break;
case 33:
dto.setSize33(diffQuantity);
break;
case 34:
dto.setSize34(diffQuantity);
break;
case 35:
dto.setSize35(diffQuantity);
break;
case 36:
dto.setSize36(diffQuantity);
break;
case 37:
dto.setSize37(diffQuantity);
break;
case 38:
dto.setSize38(diffQuantity);
break;
case 39:
dto.setSize39(diffQuantity);
break;
case 40:
dto.setSize40(diffQuantity);
break;
case 41:
dto.setSize41(diffQuantity);
break;
case 42:
dto.setSize42(diffQuantity);
break;
case 43:
dto.setSize43(diffQuantity);
break;
default:
// 处理不在预期范围内的尺码
throw new IllegalArgumentException("Unexpected size: " + size);
}
});
return dto;
})
.collect(Collectors.toList());
}
}

View File

@ -76,6 +76,7 @@ public class StoreServiceImpl implements IStoreService {
* @return
*/
@Override
@Transactional
public int deleteStoreByStoreIds(Long[] storeIds) {
return storeMapper.deleteStoreByStoreIds(storeIds);
}
@ -87,6 +88,7 @@ public class StoreServiceImpl implements IStoreService {
* @return
*/
@Override
@Transactional
public int deleteStoreByStoreId(Long storeId) {
return storeMapper.deleteStoreByStoreId(storeId);
}

View File

@ -78,6 +78,7 @@ public class SysFileServiceImpl implements ISysFileService {
* @return
*/
@Override
@Transactional
public int deleteSysFileByFileIds(Long[] fileIds) {
return sysFileMapper.deleteSysFileByFileIds(fileIds);
}
@ -89,6 +90,7 @@ public class SysFileServiceImpl implements ISysFileService {
* @return
*/
@Override
@Transactional
public int deleteSysFileByFileId(Long fileId) {
return sysFileMapper.deleteSysFileByFileId(fileId);
}

View File

@ -153,4 +153,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectStockPage" parameterType="com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO" resultType="com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO">
SELECT
id AS stockProdStockId, store_prod_id, prod_art_num, color_name,
size_30 AS size30, size_31 AS size31, size_32 AS size32, size_33 AS size33, size_34 AS size34, size_35 AS size35, size_36 AS size36, size_37 AS size37,
size_38 AS size38, size_39 AS size39, size_40 AS size40, size_41 AS size41, size_42 AS size42, size_43 AS size43,
(IFNULL(size_30, 0) + IFNULL(size_31, 0) + IFNULL(size_32, 0) + IFNULL(size_33, 0) +
IFNULL(size_34, 0) + IFNULL(size_35, 0) + IFNULL(size_36, 0) + IFNULL(size_37, 0) +
IFNULL(size_38, 0) + IFNULL(size_39, 0) + IFNULL(size_40, 0) + IFNULL(size_41, 0) +
IFNULL(size_42, 0) + IFNULL(size_43, 0)) AS totalStock
FROM
store_product_stock
WHERE
del_flag = 0
AND store_id = #{storeId}
<if test="prodArtNum != null and prodArtNum != ''"> and prod_art_num like concat('%', #{prodArtNum}, '%')</if>
</select>
</mapper>