超市小程序统计

This commit is contained in:
zengtao01
2024-11-05 11:45:23 +08:00
parent 9f46db9565
commit 7acf116100
20 changed files with 652 additions and 134 deletions

View File

@ -1,33 +1,45 @@
package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory; package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory;
import org.springframework.web.bind.annotation.*; import cn.hutool.core.collection.CollectionUtil;
import javax.annotation.Resource; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.AddReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventoryPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.*; import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventoryRespVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventorySaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventory.StoreGoodsInventoryDO; import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventory.StoreGoodsInventoryDO;
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
import cn.iocoder.yudao.module.member.service.storegoods.StoreGoodsService;
import cn.iocoder.yudao.module.member.service.storegoodsinventory.StoreGoodsInventoryService; import cn.iocoder.yudao.module.member.service.storegoodsinventory.StoreGoodsInventoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 商品库存") @Tag(name = "管理后台 - 商品库存")
@RestController @RestController
@ -37,12 +49,19 @@ public class StoreGoodsInventoryController {
@Resource @Resource
private StoreGoodsInventoryService storeGoodsInventoryService; private StoreGoodsInventoryService storeGoodsInventoryService;
@Resource
private StoreGoodsService storeGoodsService;
@Resource
private MemberAsyncService memberAsyncService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "出入库") @Operation(summary = "出入库")
@PreAuthorize("@ss.hasPermission('member:store-goods-inventory:create')") @PreAuthorize("@ss.hasPermission('member:store-goods-inventory:create')")
public CommonResult<Integer> createStoreGoodsInventory(@Valid @RequestBody StoreGoodsInventorySaveReqVO createReqVO) { public CommonResult<Integer> createStoreGoodsInventory(@Valid @RequestBody AddReqVO createReqVO) {
return success(storeGoodsInventoryService.createStoreGoodsInventory(createReqVO)); Integer storeGoodsInventory = storeGoodsInventoryService.createStoreGoodsInventory(createReqVO);
memberAsyncService.batchRecord(createReqVO);
return success(storeGoodsInventory);
} }
@PutMapping("/update") @PutMapping("/update")
@ -76,7 +95,18 @@ public class StoreGoodsInventoryController {
@PreAuthorize("@ss.hasPermission('member:store-goods-inventory:query')") @PreAuthorize("@ss.hasPermission('member:store-goods-inventory:query')")
public CommonResult<PageResult<StoreGoodsInventoryRespVO>> getStoreGoodsInventoryPage(@Valid StoreGoodsInventoryPageReqVO pageReqVO) { public CommonResult<PageResult<StoreGoodsInventoryRespVO>> getStoreGoodsInventoryPage(@Valid StoreGoodsInventoryPageReqVO pageReqVO) {
PageResult<StoreGoodsInventoryDO> pageResult = storeGoodsInventoryService.getStoreGoodsInventoryPage(pageReqVO); PageResult<StoreGoodsInventoryDO> pageResult = storeGoodsInventoryService.getStoreGoodsInventoryPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StoreGoodsInventoryRespVO.class)); PageResult<StoreGoodsInventoryRespVO> bean = BeanUtils.toBean(pageResult, StoreGoodsInventoryRespVO.class);
List<StoreGoodsInventoryRespVO> list = bean.getList();
if(CollectionUtil.isNotEmpty(list)){
List<Integer> goodsList = list.stream().map(StoreGoodsInventoryRespVO::getGoodsId).collect(Collectors.toList());
List<StoreGoodsDO> all = storeGoodsService.getAll(goodsList);
Map<Integer, StoreGoodsDO> collect = all.stream().collect(Collectors.toMap(StoreGoodsDO::getGoodsId, a -> a));
for (StoreGoodsInventoryRespVO vo:list){
vo.setGoodsInfo(collect.get(vo.getGoodsId()));
}
}
return success(bean);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")

View File

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* @author zt
* @description <description class purpose>
* @since 2024/11/4
*/
@Data
public class AddReqVO {
@Schema(description = "商品信息")
List<GoodsInfoReqVO> list;
@Schema(description = "1-入库,2-出库")
private Integer type;
@Schema(description = "出库类型")
private Integer outType;
}

View File

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author zt
* @description <description class purpose>
* @since 2024/11/4
*/
@Data
public class GoodsInfoReqVO {
@Schema(description = "商品ID", example = "16735")
private Integer goodsId;
@Schema(description = "门店ID", example = "14609")
private Long carteenId;
@Schema(description = "数量")
private Integer number;
@Schema(description = "重量")
private Double weight;
}

View File

@ -1,12 +1,13 @@
package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo; package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 商品库存 Response VO") @Schema(description = "管理后台 - 商品库存 Response VO")
@Data @Data
@ -37,4 +38,8 @@ public class StoreGoodsInventoryRespVO {
@ExcelProperty("创建时间") @ExcelProperty("创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
@Schema(description = "商品ID", example = "16735")
@ExcelIgnore
private StoreGoodsDO goodsInfo;
} }

View File

@ -1,14 +1,13 @@
package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo; package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo; import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*; import java.util.List;
@Schema(description = "管理后台 - 商品订单 Response VO") @Schema(description = "管理后台 - 商品订单 Response VO")
@Data @Data
@ -59,4 +58,9 @@ public class StoreOrderRespVO {
private Long carteenId; private Long carteenId;
/**
* 1-已支付2-已完成3-已取消4-已退款)
*/
private Integer status;
} }

View File

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.member.controller.app.storebusiness;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 超市营业统计")
@RestController
@RequestMapping("/member/store-business")
@Validated
public class AppStoreBusinessController {
@Resource
private StoreBusinessService storeBusinessService;
@GetMapping("/data")
@Operation(summary = "获得营业统计")
public CommonResult<BusinessDataVO> getBusinessPage(String time, Long carteenId, Integer type) {
BusinessDataVO result = new BusinessDataVO();
switch (type){
case 0:
result = storeBusinessService.getDay(time, carteenId);
break;
case 1:
//result = storeBusinessService.getWeek(time, carteenId);
break;
case 2:
result = storeBusinessService.getMonth(time, carteenId);
break;
default:
break;
}
return success(result);
}
}

View File

@ -1,32 +1,23 @@
package cn.iocoder.yudao.module.member.controller.app.storegoods; package cn.iocoder.yudao.module.member.controller.app.storegoods;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsRespVO; import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsRespVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreSaleGoodsPageVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO; import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO;
import cn.iocoder.yudao.module.member.service.storegoods.StoreGoodsService; import cn.iocoder.yudao.module.member.service.storegoods.StoreGoodsService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 商品") @Tag(name = "管理后台 - 商品")
@RestController @RestController
@ -37,4 +28,12 @@ public class AppStoreGoodsController {
@Resource @Resource
private StoreGoodsService storeGoodsService; private StoreGoodsService storeGoodsService;
@GetMapping("/page")
@Operation(summary = "获得商品分页")
public CommonResult<PageResult<StoreGoodsRespVO>> getStoreGoodsPage(@Valid StoreGoodsPageReqVO pageReqVO) {
PageResult<StoreGoodsDO> pageResult = storeGoodsService.getStoreGoodsPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StoreGoodsRespVO.class));
}
} }

View File

@ -0,0 +1,100 @@
package cn.iocoder.yudao.module.member.controller.app.storegoodstype;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.admin.storegoodstype.vo.StoreGoodsTypePageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodstype.vo.StoreGoodsTypeRespVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodstype.vo.StoreGoodsTypeSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodstype.StoreGoodsTypeDO;
import cn.iocoder.yudao.module.member.service.storegoodstype.StoreGoodsTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 商品类别")
@RestController
@RequestMapping("/member/store-goods-type")
@Validated
public class AppStoreGoodsTypeController {
@Resource
private StoreGoodsTypeService storeGoodsTypeService;
@PostMapping("/create")
@Operation(summary = "创建商品类别")
public CommonResult<Integer> createStoreGoodsType(@Valid @RequestBody StoreGoodsTypeSaveReqVO createReqVO) {
return success(storeGoodsTypeService.createStoreGoodsType(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新商品类别")
public CommonResult<Boolean> updateStoreGoodsType(@Valid @RequestBody StoreGoodsTypeSaveReqVO updateReqVO) {
storeGoodsTypeService.updateStoreGoodsType(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除商品类别")
@Parameter(name = "id", description = "编号", required = true)
public CommonResult<Boolean> deleteStoreGoodsType(@RequestParam("id") Integer id) {
storeGoodsTypeService.deleteStoreGoodsType(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得商品类别")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<StoreGoodsTypeRespVO> getStoreGoodsType(@RequestParam("id") Integer id) {
StoreGoodsTypeDO storeGoodsType = storeGoodsTypeService.getStoreGoodsType(id);
return success(BeanUtils.toBean(storeGoodsType, StoreGoodsTypeRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得商品类别分页")
public CommonResult<PageResult<StoreGoodsTypeRespVO>> getStoreGoodsTypePage(@Valid StoreGoodsTypePageReqVO pageReqVO) {
PageResult<StoreGoodsTypeDO> pageResult = storeGoodsTypeService.getStoreGoodsTypePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StoreGoodsTypeRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出商品类别 Excel")
@OperateLog(type = EXPORT)
public void exportStoreGoodsTypeExcel(@Valid StoreGoodsTypePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StoreGoodsTypeDO> list = storeGoodsTypeService.getStoreGoodsTypePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "商品类别.xls", "数据", StoreGoodsTypeRespVO.class,
BeanUtils.toBean(list, StoreGoodsTypeRespVO.class));
}
@GetMapping("/all")
@Operation(summary = "获得商品类别分页")
public CommonResult<List<StoreGoodsTypeRespVO>> getAll() {
List<StoreGoodsTypeDO> all = storeGoodsTypeService.getAll();
return success(BeanUtils.toBean(all, StoreGoodsTypeRespVO.class));
}
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.member.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代码生成的场景枚举
*
* @author 芋道源码
*/
@AllArgsConstructor
@Getter
public enum OutTypeEnum {
SELL(1, "售出"),
SYSTEM(2, "系统扣减"),
;
/**
* 编码
*/
private final Integer code;
/**
* 类型
*/
private final String name;
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.service.async; package cn.iocoder.yudao.module.member.service.async;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.AddReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO; import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO; import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
@ -15,4 +16,6 @@ public interface MemberAsyncService {
void flashTime(DiningPlatesDO diningPlatesDO); void flashTime(DiningPlatesDO diningPlatesDO);
void createOrderDetail(AppOrderDetailSaveReqVO createReqVO, OtherVO otherVO); void createOrderDetail(AppOrderDetailSaveReqVO createReqVO, OtherVO otherVO);
void batchRecord(AddReqVO addReqVO);
} }

View File

@ -1,13 +1,18 @@
package cn.iocoder.yudao.module.member.service.async; package cn.iocoder.yudao.module.member.service.async;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.AddReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.GoodsInfoReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO; import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO; import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO; import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventoryrecord.StoreGoodsInventoryRecordDO;
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper; import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper; import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
import cn.iocoder.yudao.module.member.dal.mysql.storegoodsinventoryrecord.StoreGoodsInventoryRecordMapper;
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi; import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO; import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,6 +23,8 @@ import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author zt * @author zt
@ -37,6 +44,10 @@ public class MemberAsyncServiceImpl implements MemberAsyncService{
@Resource @Resource
private OrderDetailMapper orderDetailMapper; private OrderDetailMapper orderDetailMapper;
@Resource
private StoreGoodsInventoryRecordMapper storeGoodsInventoryRecordMapper;
@Async @Async
@Override @Override
public void flashTime(DiningPlatesDO diningPlatesDO){ public void flashTime(DiningPlatesDO diningPlatesDO){
@ -69,7 +80,19 @@ public class MemberAsyncServiceImpl implements MemberAsyncService{
orderDetailMapper.insert(orderDetail); orderDetailMapper.insert(orderDetail);
} }
@Async
@Override
public void batchRecord(AddReqVO addReqVO) {
List<StoreGoodsInventoryRecordDO> addList = new ArrayList<>();
for (GoodsInfoReqVO vo :addReqVO.getList()){
StoreGoodsInventoryRecordDO add = new StoreGoodsInventoryRecordDO();
BeanUtil.copyProperties(vo,add);
add.setType(addReqVO.getType());
add.setOutType(addReqVO.getOutType());
addList.add(add);
}
storeGoodsInventoryRecordMapper.insertBatch(addList);
}
public void discard(){ public void discard(){
//DishesNutritionRespDTO dishEnergy = dishesNutritionApi.getDishEnergy(createReqVO.getDishesId()); //DishesNutritionRespDTO dishEnergy = dishesNutritionApi.getDishEnergy(createReqVO.getDishesId());

View File

@ -1,13 +1,13 @@
package cn.iocoder.yudao.module.member.service.storebusiness; package cn.iocoder.yudao.module.member.service.storebusiness;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
import javax.validation.Valid;
/** /**
* 超市营业统计 Service 接口 * 超市营业统计 Service 接口
@ -56,4 +56,13 @@ public interface StoreBusinessService {
void updateStatistics(StatisticsVo vo); void updateStatistics(StatisticsVo vo);
BusinessDataVO getDay(String time, Long carteenId);
BusinessDataVO getMonth(String time,Long carteenId);
} }

View File

@ -1,35 +1,42 @@
package cn.iocoder.yudao.module.member.service.storebusiness; package cn.iocoder.yudao.module.member.service.storebusiness;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo; import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO; import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import cn.iocoder.yudao.module.member.util.MemberTimeUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.*; import java.time.YearMonth;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*; import java.time.format.DateTimeFormatter;
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO; import java.util.ArrayList;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import java.util.HashMap;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import java.util.LinkedHashMap;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import java.util.List;
import java.util.Map;
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_BUSINESS_NOT_EXISTS;
import static cn.iocoder.yudao.module.member.service.amount.LockManager.getStoreLock;
import static cn.iocoder.yudao.module.member.service.amount.LockManager.getSupermarketLock; import static cn.iocoder.yudao.module.member.service.amount.LockManager.getSupermarketLock;
/** /**
@ -151,4 +158,179 @@ public class StoreBusinessServiceImpl implements StoreBusinessService {
} }
} }
} }
@Override
public BusinessDataVO getDay(String time, Long carteenId) {
Integer nowDay = MemberTimeUtils.getDay(time);
time = MemberTimeUtils.getYearMonth(time);
BusinessDataVO businessDataVO = new BusinessDataVO();
LambdaQueryWrapper<StoreBusinessDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StoreBusinessDO::getCarteenId,carteenId);
wrapper.orderByAsc(StoreBusinessDO::getCreateTime);
wrapper.apply("DATE_FORMAT(create_time, '%Y-%m') = {0}", time);
List<StoreBusinessDO> businessDOS = storeBusinessMapper.selectList(wrapper);
Map<Integer, StoreBusinessDO> map = businessDOS.stream().collect(Collectors.toMap(
vo -> vo.getCreateTime().toLocalDate().getDayOfMonth()
, vo -> vo, (existing, replacement) -> existing));
// 创建一个Map来存储每天的数据
Map<Integer, BusinessRespVO> monthData = new LinkedHashMap<>();
// 定义日期格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
// 将字符串解析为 YearMonth 对象
YearMonth yearMonth = YearMonth.parse(time, formatter);
// 获取当月的总天数
int daysInMonth = yearMonth.lengthOfMonth();
//获取上一个月最后一天的数据
// 获取上一个月的最后一天
YearMonth previousMonth = yearMonth.minusMonths(1);
LocalDate lastDayOfPreviousMonth = previousMonth.atEndOfMonth();
// 定义格式化器,将 LocalDate 转换为 yyyy-MM-dd 格式
DateTimeFormatter formatterDay = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 将 LocalDate 转换为指定格式的字符串
String formattedDate = lastDayOfPreviousMonth.format(formatterDay);
LambdaQueryWrapper<StoreBusinessDO> previousWrapper = new LambdaQueryWrapper<>();
previousWrapper.eq(StoreBusinessDO::getCarteenId,carteenId);
previousWrapper.orderByAsc(StoreBusinessDO::getCreateTime);
previousWrapper.apply("DATE_FORMAT(create_time, '%Y-%m-%d') = {0}", formattedDate);
List<StoreBusinessDO> previousList = storeBusinessMapper.selectList(previousWrapper);
BusinessRespVO old = new BusinessRespVO();
if(CollectionUtil.isNotEmpty(previousList)){
BeanUtil.copyProperties(previousList.get(0), old);
}else {
old = getInitBusinessRespVO();
}
// 循环遍历该月的每一天
for (int day = 1; day <= daysInMonth; day++) {
BusinessRespVO bean = new BusinessRespVO();
if(map.get(day) == null){
bean = getInitBusinessRespVO().setTime(String.valueOf(day));
}else {
bean = BeanUtils.toBean(map.get(day), BusinessRespVO.class);
bean.setTime(String.valueOf(day));
}
//计算差额
if(day == 1){
compare(bean,old);
}else {
compare(bean,monthData.get(day-1));
}
monthData.put(day,bean);
}
businessDataVO.setNow(monthData.get(nowDay));
businessDataVO.setBusinessList(new ArrayList<>(monthData.values()));
return businessDataVO;
}
@Override
public BusinessDataVO getMonth(String time,Long carteenId) {
time = MemberTimeUtils.getYearMonth(time);
BusinessDataVO businessDataVO = new BusinessDataVO();
int year = MemberTimeUtils.getYearFromYearMonthString(time);
LambdaQueryWrapper<StoreBusinessDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StoreBusinessDO::getCarteenId,carteenId);
wrapper.orderByAsc(StoreBusinessDO::getCreateTime);
wrapper.apply("DATE_FORMAT(create_time, '%Y') = {0}", year);
List<StoreBusinessDO> businessDOS = storeBusinessMapper.selectList(wrapper);
Map<Integer,BusinessRespVO> map = new HashMap<>();
//时间处理
for (int i = 1; i <= 12; i++) {
BusinessRespVO bean = getInitBusinessRespVO();
bean.setTime(String.valueOf(i));
map.put(i,bean);
}
//数据统计
for (StoreBusinessDO businessDO : businessDOS) {
LocalDate date = businessDO.getCreateTime().toLocalDate();
// 当前日期属于哪月
int i = date.getMonthValue();
BusinessRespVO businessRespVO = map.get(i);
handleBusiness(businessDO,businessRespVO);
}
//上一年最后一月
int previousYear = year - 1;
LambdaQueryWrapper<StoreBusinessDO> previousWrapper = new LambdaQueryWrapper<>();
previousWrapper.eq(StoreBusinessDO::getCarteenId,carteenId);
previousWrapper.orderByAsc(StoreBusinessDO::getCreateTime);
previousWrapper.apply("DATE_FORMAT(create_time, '%Y-%m') = {0}", previousYear+"-12");
List<StoreBusinessDO> previousList = storeBusinessMapper.selectList(previousWrapper);
BusinessRespVO previousVO = getInitBusinessRespVO();
for (StoreBusinessDO businessDO : previousList) {
handleBusiness(businessDO,previousVO);
}
//差额统计
for (int i = 1; i <= 12; i++) {
if(i == 1){
compare(map.get(i),previousVO);
}else {
compare(map.get(i),map.get(i-1));
}
}
int month = MemberTimeUtils.getMonthFromYearMonthString(time);
businessDataVO.setNow(map.get(month));
businessDataVO.setBusinessList(new ArrayList<>(map.values()));
return businessDataVO;
}
void handleBusiness(StoreBusinessDO businessDO, BusinessRespVO businessRespVO) {
//营业额
businessRespVO.setTurnover(businessRespVO.getTurnover().add(businessDO.getTurnover()));
//订单数
businessRespVO.setOrderSum(businessRespVO.getOrderSum()+businessDO.getOrderSum());
//均单价
if(businessRespVO.getOrderSum()!=0){
businessRespVO.setPriceAvg(businessRespVO.getTurnover().divide(new BigDecimal(businessRespVO.getOrderSum().toString()), 2, RoundingMode.HALF_UP));
}
//减免金额
businessRespVO.setReduce(businessRespVO.getReduce().add(businessDO.getReduce()));
//重量
businessRespVO.setWeigh(businessRespVO.getWeigh().add(businessDO.getWeigh()));
//早
businessRespVO.setBreakfast(businessRespVO.getBreakfast().add(businessDO.getBreakfast()));
//中
businessRespVO.setLunch(businessRespVO.getLunch().add(businessDO.getLunch()));
//晚
businessRespVO.setDinner(businessRespVO.getDinner().add(businessDO.getDinner()));
//门店
businessRespVO.setCarteenId(businessDO.getCarteenId());
}
void compare(BusinessRespVO today, BusinessRespVO last) {
today.setTurnoverCompare(today.getTurnover().subtract(last.getTurnover()));
today.setOrderSumCompare(today.getOrderSum()-last.getOrderSum());
today.setPriceAvgCompare(today.getPriceAvg().subtract(last.getPriceAvg()));
}
BusinessRespVO getInitBusinessRespVO() {
BusinessRespVO previousVO = new BusinessRespVO();
previousVO.setTurnover(BigDecimal.ZERO).setOrderSum(0).setReduce(BigDecimal.ZERO).setWeigh(BigDecimal.ZERO)
.setBreakfast(BigDecimal.ZERO).setLunch(BigDecimal.ZERO).setDinner(BigDecimal.ZERO).setPriceAvg(BigDecimal.ZERO);
return previousVO;
}
} }

View File

@ -1,11 +1,12 @@
package cn.iocoder.yudao.module.member.service.storegoodsinventory; package cn.iocoder.yudao.module.member.service.storegoodsinventory;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventory.StoreGoodsInventoryDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.AddReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventoryPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventorySaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventory.StoreGoodsInventoryDO;
import javax.validation.Valid;
/** /**
* 商品库存 Service 接口 * 商品库存 Service 接口
@ -20,7 +21,7 @@ public interface StoreGoodsInventoryService {
* @param createReqVO 创建信息 * @param createReqVO 创建信息
* @return 编号 * @return 编号
*/ */
Integer createStoreGoodsInventory(@Valid StoreGoodsInventorySaveReqVO createReqVO); Integer createStoreGoodsInventory(@Valid AddReqVO createReqVO);
/** /**
* 更新商品库存 * 更新商品库存

View File

@ -1,24 +1,26 @@
package cn.iocoder.yudao.module.member.service.storegoodsinventory; package cn.iocoder.yudao.module.member.service.storegoodsinventory;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.AddReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.GoodsInfoReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventoryPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.StoreGoodsInventorySaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventory.StoreGoodsInventoryDO;
import cn.iocoder.yudao.module.member.dal.mysql.storegoodsinventory.StoreGoodsInventoryMapper;
import cn.iocoder.yudao.module.member.enums.InventoryTypeEnum; import cn.iocoder.yudao.module.member.enums.InventoryTypeEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import javax.annotation.Resource;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.*; import javax.validation.Valid;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventory.StoreGoodsInventoryDO; import java.util.List;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.storegoodsinventory.StoreGoodsInventoryMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_GOODS_INVENTORY_NOT_ENOUGH;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_GOODS_INVENTORY_NOT_EXISTS;
/** /**
* 商品库存 Service 实现类 * 商品库存 Service 实现类
@ -33,36 +35,45 @@ public class StoreGoodsInventoryServiceImpl implements StoreGoodsInventoryServic
private StoreGoodsInventoryMapper storeGoodsInventoryMapper; private StoreGoodsInventoryMapper storeGoodsInventoryMapper;
@Override @Override
public synchronized Integer createStoreGoodsInventory(StoreGoodsInventorySaveReqVO createReqVO) {
public synchronized Integer createStoreGoodsInventory(@Valid AddReqVO createReqVO) {
Integer id = null; Integer id = null;
// 入库 List<GoodsInfoReqVO> list = createReqVO.getList();
LambdaQueryWrapper<StoreGoodsInventoryDO> wrapper = new LambdaQueryWrapper<>(); for (GoodsInfoReqVO vo:list){
wrapper.eq(StoreGoodsInventoryDO::getGoodsId,createReqVO.getGoodsId()) LambdaQueryWrapper<StoreGoodsInventoryDO> wrapper = new LambdaQueryWrapper<>();
.eq(StoreGoodsInventoryDO::getCarteenId,createReqVO.getCarteenId()); wrapper.eq(StoreGoodsInventoryDO::getGoodsId,vo.getGoodsId())
List<StoreGoodsInventoryDO> storeGoodsInventoryDOS = storeGoodsInventoryMapper.selectList(wrapper); .eq(StoreGoodsInventoryDO::getCarteenId,vo.getCarteenId());
if(InventoryTypeEnum.IN.getCode().equals(createReqVO.getType())){ List<StoreGoodsInventoryDO> storeGoodsInventoryDOS = storeGoodsInventoryMapper.selectList(wrapper);
if(CollectionUtil.isNotEmpty(storeGoodsInventoryDOS)){ if(InventoryTypeEnum.IN.getCode().equals(createReqVO.getType())){
if(CollectionUtil.isNotEmpty(storeGoodsInventoryDOS)){
StoreGoodsInventoryDO storeGoodsInventoryDO = storeGoodsInventoryDOS.get(0);
storeGoodsInventoryDO.setNumber(storeGoodsInventoryDO.getNumber()+vo.getNumber());
storeGoodsInventoryDO.setWeight(storeGoodsInventoryDO.getWeight()+vo.getWeight());
storeGoodsInventoryMapper.updateById(storeGoodsInventoryDO);
id= storeGoodsInventoryDO.getId();
}else {
StoreGoodsInventoryDO storeGoodsInventory = BeanUtils.toBean(createReqVO, StoreGoodsInventoryDO.class);
storeGoodsInventoryMapper.insert(storeGoodsInventory);
id = storeGoodsInventory.getId();
}
}else {// 出库
if(CollectionUtil.isEmpty(storeGoodsInventoryDOS)){
throw exception(STORE_GOODS_INVENTORY_NOT_EXISTS);
}
StoreGoodsInventoryDO storeGoodsInventoryDO = storeGoodsInventoryDOS.get(0); StoreGoodsInventoryDO storeGoodsInventoryDO = storeGoodsInventoryDOS.get(0);
storeGoodsInventoryDO.setNumber(storeGoodsInventoryDO.getNumber()+createReqVO.getNumber()); if(storeGoodsInventoryDO.getNumber()<vo.getNumber()){
throw exception(STORE_GOODS_INVENTORY_NOT_ENOUGH);
}
if(storeGoodsInventoryDO.getWeight()<vo.getWeight()){
throw exception(STORE_GOODS_INVENTORY_NOT_ENOUGH);
}
storeGoodsInventoryDO.setNumber(storeGoodsInventoryDO.getNumber()-vo.getNumber());
storeGoodsInventoryDO.setWeight(storeGoodsInventoryDO.getWeight()-vo.getWeight());
storeGoodsInventoryMapper.updateById(storeGoodsInventoryDO); storeGoodsInventoryMapper.updateById(storeGoodsInventoryDO);
id= storeGoodsInventoryDO.getId(); id = storeGoodsInventoryDO.getId();
}else {
StoreGoodsInventoryDO storeGoodsInventory = BeanUtils.toBean(createReqVO, StoreGoodsInventoryDO.class);
storeGoodsInventoryMapper.insert(storeGoodsInventory);
id = storeGoodsInventory.getId();
} }
}else {// 出库
if(CollectionUtil.isEmpty(storeGoodsInventoryDOS)){
throw exception(STORE_GOODS_INVENTORY_NOT_EXISTS);
}
StoreGoodsInventoryDO storeGoodsInventoryDO = storeGoodsInventoryDOS.get(0);
if(storeGoodsInventoryDO.getNumber()<createReqVO.getNumber()){
throw exception(STORE_GOODS_INVENTORY_NOT_ENOUGH);
}
storeGoodsInventoryDO.setNumber(storeGoodsInventoryDO.getNumber()-createReqVO.getNumber());
storeGoodsInventoryMapper.updateById(storeGoodsInventoryDO);
id = storeGoodsInventoryDO.getId();
} }
// 返回 // 返回
return id; return id;
} }

View File

@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.member.service.storegoodsinventoryrecord; package cn.iocoder.yudao.module.member.service.storegoodsinventoryrecord;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventoryrecord.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventoryrecord.StoreGoodsInventoryRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventoryrecord.vo.StoreGoodsInventoryRecordPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventoryrecord.vo.StoreGoodsInventoryRecordSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventoryrecord.StoreGoodsInventoryRecordDO;
import javax.validation.Valid;
/** /**
* 商品出入库记录 Service 接口 * 商品出入库记录 Service 接口
@ -52,4 +52,6 @@ public interface StoreGoodsInventoryRecordService {
*/ */
PageResult<StoreGoodsInventoryRecordDO> getStoreGoodsInventoryRecordPage(StoreGoodsInventoryRecordPageReqVO pageReqVO); PageResult<StoreGoodsInventoryRecordDO> getStoreGoodsInventoryRecordPage(StoreGoodsInventoryRecordPageReqVO pageReqVO);
} }

View File

@ -1,21 +1,18 @@
package cn.iocoder.yudao.module.member.service.storegoodsinventoryrecord; package cn.iocoder.yudao.module.member.service.storegoodsinventoryrecord;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventoryrecord.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventoryrecord.StoreGoodsInventoryRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventoryrecord.vo.StoreGoodsInventoryRecordPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventoryrecord.vo.StoreGoodsInventoryRecordSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodsinventoryrecord.StoreGoodsInventoryRecordDO;
import cn.iocoder.yudao.module.member.dal.mysql.storegoodsinventoryrecord.StoreGoodsInventoryRecordMapper; import cn.iocoder.yudao.module.member.dal.mysql.storegoodsinventoryrecord.StoreGoodsInventoryRecordMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_GOODS_INVENTORY_RECORD_NOT_EXISTS;
/** /**
* 商品出入库记录 Service 实现类 * 商品出入库记录 Service 实现类
@ -71,4 +68,5 @@ public class StoreGoodsInventoryRecordServiceImpl implements StoreGoodsInventory
return storeGoodsInventoryRecordMapper.selectPage(pageReqVO); return storeGoodsInventoryRecordMapper.selectPage(pageReqVO);
} }
} }

View File

@ -1,11 +1,12 @@
package cn.iocoder.yudao.module.member.service.storegoodstype; package cn.iocoder.yudao.module.member.service.storegoodstype;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.storegoodstype.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodstype.StoreGoodsTypeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.module.member.controller.admin.storegoodstype.vo.StoreGoodsTypePageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodstype.vo.StoreGoodsTypeSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodstype.StoreGoodsTypeDO;
import javax.validation.Valid;
import java.util.List;
/** /**
* 商品类别 Service 接口 * 商品类别 Service 接口
@ -53,4 +54,6 @@ public interface StoreGoodsTypeService {
PageResult<StoreGoodsTypeDO> getStoreGoodsTypePage(StoreGoodsTypePageReqVO pageReqVO); PageResult<StoreGoodsTypeDO> getStoreGoodsTypePage(StoreGoodsTypePageReqVO pageReqVO);
List<StoreGoodsTypeDO> getAll(); List<StoreGoodsTypeDO> getAll();
} }

View File

@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderUploadD
import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo; import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.CardDto; import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.CardDto;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -77,7 +76,7 @@ public interface StoreOrderService {
void reduction(Long orderId, BigDecimal money); void reduction(Long orderId, BigDecimal money);
Boolean appCreate(@RequestBody CardDto dto); Boolean appCreate(CardDto dto);
String customize(StoreOrderDto dto); String customize(StoreOrderDto dto);
} }

View File

@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo; import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.AddReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.GoodsInfoReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageVO; import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderSaveReqVO; import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderSaveReqVO;
@ -21,11 +23,15 @@ import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper; import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper;
import cn.iocoder.yudao.module.member.enums.InventoryTypeEnum;
import cn.iocoder.yudao.module.member.enums.OutTypeEnum;
import cn.iocoder.yudao.module.member.enums.StoreOrderStatusEnum; import cn.iocoder.yudao.module.member.enums.StoreOrderStatusEnum;
import cn.iocoder.yudao.module.member.service.amount.AmountService; import cn.iocoder.yudao.module.member.service.amount.AmountService;
import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.amount.DeductionService;
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService; import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService;
import cn.iocoder.yudao.module.member.service.storegoodsinventory.StoreGoodsInventoryService;
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi; import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi;
@ -78,6 +84,10 @@ public class StoreOrderServiceImpl implements StoreOrderService {
private StoreBusinessService storeBusinessService; private StoreBusinessService storeBusinessService;
@Resource @Resource
private AmountService amountService; private AmountService amountService;
@Resource
private MemberAsyncService memberAsyncService;
@Resource
private StoreGoodsInventoryService storeGoodsInventoryService;
@Resource @Resource
private StringRedisTemplate storeOrderRedisTemplate; private StringRedisTemplate storeOrderRedisTemplate;
@ -300,6 +310,21 @@ public class StoreOrderServiceImpl implements StoreOrderService {
if(amount.compareTo(total) < 0){ if(amount.compareTo(total) < 0){
throw exception(AMOUNT_NOT_ENOUGH); throw exception(AMOUNT_NOT_ENOUGH);
} }
//扣除库存
AddReqVO addReqVO = new AddReqVO();
addReqVO.setType(InventoryTypeEnum.OUT.getCode());
addReqVO.setOutType(OutTypeEnum.SELL.getCode());
List<GoodsInfoReqVO> infos = new ArrayList<>();
for (AppStoreGoodsDetail detail : dto.getGoodsList()){
GoodsInfoReqVO vo = new GoodsInfoReqVO();
BeanUtil.copyProperties(detail,vo);
vo.setCarteenId(dto.getCarteenId());
infos.add(vo);
}
addReqVO.setList(infos);
storeGoodsInventoryService.createStoreGoodsInventory(addReqVO);
//记录
memberAsyncService.batchRecord(addReqVO);
//创建订单 //创建订单
StoreOrderDO storeOrderDO = new StoreOrderDO(); StoreOrderDO storeOrderDO = new StoreOrderDO();