超市小程序统计
This commit is contained in:
@ -1,33 +1,45 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
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.hutool.core.collection.CollectionUtil;
|
||||
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.CommonResult;
|
||||
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.operatelog.core.annotations.OperateLog;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storegoodsinventory.vo.*;
|
||||
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.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.service.async.MemberAsyncService;
|
||||
import cn.iocoder.yudao.module.member.service.storegoods.StoreGoodsService;
|
||||
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 = "管理后台 - 商品库存")
|
||||
@RestController
|
||||
@ -37,12 +49,19 @@ public class StoreGoodsInventoryController {
|
||||
|
||||
@Resource
|
||||
private StoreGoodsInventoryService storeGoodsInventoryService;
|
||||
@Resource
|
||||
private StoreGoodsService storeGoodsService;
|
||||
@Resource
|
||||
private MemberAsyncService memberAsyncService;
|
||||
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "出入库")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-goods-inventory:create')")
|
||||
public CommonResult<Integer> createStoreGoodsInventory(@Valid @RequestBody StoreGoodsInventorySaveReqVO createReqVO) {
|
||||
return success(storeGoodsInventoryService.createStoreGoodsInventory(createReqVO));
|
||||
public CommonResult<Integer> createStoreGoodsInventory(@Valid @RequestBody AddReqVO createReqVO) {
|
||||
Integer storeGoodsInventory = storeGoodsInventoryService.createStoreGoodsInventory(createReqVO);
|
||||
memberAsyncService.batchRecord(createReqVO);
|
||||
return success(storeGoodsInventory);
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@ -76,7 +95,18 @@ public class StoreGoodsInventoryController {
|
||||
@PreAuthorize("@ss.hasPermission('member:store-goods-inventory:query')")
|
||||
public CommonResult<PageResult<StoreGoodsInventoryRespVO>> getStoreGoodsInventoryPage(@Valid StoreGoodsInventoryPageReqVO 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")
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -1,12 +1,13 @@
|
||||
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 lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 商品库存 Response VO")
|
||||
@Data
|
||||
@ -37,4 +38,8 @@ public class StoreGoodsInventoryRespVO {
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "商品ID", example = "16735")
|
||||
@ExcelIgnore
|
||||
private StoreGoodsDO goodsInfo;
|
||||
|
||||
}
|
@ -1,14 +1,13 @@
|
||||
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.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 lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单 Response VO")
|
||||
@Data
|
||||
@ -59,4 +58,9 @@ public class StoreOrderRespVO {
|
||||
|
||||
private Long carteenId;
|
||||
|
||||
/**
|
||||
* (1-已支付,2-已完成,3-已取消,4-已退款)
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -1,32 +1,23 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.storegoods;
|
||||
|
||||
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.storegoods.vo.StoreGoodsPageReqVO;
|
||||
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.service.storegoods.StoreGoodsService;
|
||||
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.*;
|
||||
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.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
|
||||
@ -37,4 +28,12 @@ public class AppStoreGoodsController {
|
||||
@Resource
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
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.OtherVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||
@ -15,4 +16,6 @@ public interface MemberAsyncService {
|
||||
void flashTime(DiningPlatesDO diningPlatesDO);
|
||||
|
||||
void createOrderDetail(AppOrderDetailSaveReqVO createReqVO, OtherVO otherVO);
|
||||
|
||||
void batchRecord(AddReqVO addReqVO);
|
||||
}
|
||||
|
@ -1,13 +1,18 @@
|
||||
package cn.iocoder.yudao.module.member.service.async;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.OtherVO;
|
||||
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.storegoodsinventoryrecord.StoreGoodsInventoryRecordDO;
|
||||
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.storegoodsinventoryrecord.StoreGoodsInventoryRecordMapper;
|
||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -18,6 +23,8 @@ import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zt
|
||||
@ -37,6 +44,10 @@ public class MemberAsyncServiceImpl implements MemberAsyncService{
|
||||
@Resource
|
||||
private OrderDetailMapper orderDetailMapper;
|
||||
|
||||
|
||||
@Resource
|
||||
private StoreGoodsInventoryRecordMapper storeGoodsInventoryRecordMapper;
|
||||
|
||||
@Async
|
||||
@Override
|
||||
public void flashTime(DiningPlatesDO diningPlatesDO){
|
||||
@ -69,7 +80,19 @@ public class MemberAsyncServiceImpl implements MemberAsyncService{
|
||||
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(){
|
||||
//DishesNutritionRespDTO dishEnergy = dishesNutritionApi.getDishEnergy(createReqVO.getDishesId());
|
||||
|
@ -1,13 +1,13 @@
|
||||
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.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 接口
|
||||
@ -56,4 +56,13 @@ public interface StoreBusinessService {
|
||||
|
||||
|
||||
void updateStatistics(StatisticsVo vo);
|
||||
|
||||
BusinessDataVO getDay(String time, Long carteenId);
|
||||
|
||||
|
||||
BusinessDataVO getMonth(String time,Long carteenId);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,35 +1,42 @@
|
||||
package cn.iocoder.yudao.module.member.service.storebusiness;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
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.dal.dataobject.business.BusinessDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
||||
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 cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||
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 org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.*;
|
||||
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.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
||||
import java.time.YearMonth;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
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.service.amount.LockManager.getStoreLock;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_BUSINESS_NOT_EXISTS;
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
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.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 接口
|
||||
@ -20,7 +21,7 @@ public interface StoreGoodsInventoryService {
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Integer createStoreGoodsInventory(@Valid StoreGoodsInventorySaveReqVO createReqVO);
|
||||
Integer createStoreGoodsInventory(@Valid AddReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新商品库存
|
||||
|
@ -1,24 +1,26 @@
|
||||
package cn.iocoder.yudao.module.member.service.storegoodsinventory;
|
||||
|
||||
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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.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.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.storegoodsinventory.StoreGoodsInventoryMapper;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
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 实现类
|
||||
@ -33,36 +35,45 @@ public class StoreGoodsInventoryServiceImpl implements StoreGoodsInventoryServic
|
||||
private StoreGoodsInventoryMapper storeGoodsInventoryMapper;
|
||||
|
||||
@Override
|
||||
public synchronized Integer createStoreGoodsInventory(StoreGoodsInventorySaveReqVO createReqVO) {
|
||||
|
||||
public synchronized Integer createStoreGoodsInventory(@Valid AddReqVO createReqVO) {
|
||||
Integer id = null;
|
||||
// 入库
|
||||
LambdaQueryWrapper<StoreGoodsInventoryDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(StoreGoodsInventoryDO::getGoodsId,createReqVO.getGoodsId())
|
||||
.eq(StoreGoodsInventoryDO::getCarteenId,createReqVO.getCarteenId());
|
||||
List<StoreGoodsInventoryDO> storeGoodsInventoryDOS = storeGoodsInventoryMapper.selectList(wrapper);
|
||||
if(InventoryTypeEnum.IN.getCode().equals(createReqVO.getType())){
|
||||
if(CollectionUtil.isNotEmpty(storeGoodsInventoryDOS)){
|
||||
List<GoodsInfoReqVO> list = createReqVO.getList();
|
||||
for (GoodsInfoReqVO vo:list){
|
||||
LambdaQueryWrapper<StoreGoodsInventoryDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(StoreGoodsInventoryDO::getGoodsId,vo.getGoodsId())
|
||||
.eq(StoreGoodsInventoryDO::getCarteenId,vo.getCarteenId());
|
||||
List<StoreGoodsInventoryDO> storeGoodsInventoryDOS = storeGoodsInventoryMapper.selectList(wrapper);
|
||||
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.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);
|
||||
id= storeGoodsInventoryDO.getId();
|
||||
}else {
|
||||
StoreGoodsInventoryDO storeGoodsInventory = BeanUtils.toBean(createReqVO, StoreGoodsInventoryDO.class);
|
||||
storeGoodsInventoryMapper.insert(storeGoodsInventory);
|
||||
id = storeGoodsInventory.getId();
|
||||
id = storeGoodsInventoryDO.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;
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
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.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 接口
|
||||
@ -52,4 +52,6 @@ public interface StoreGoodsInventoryRecordService {
|
||||
*/
|
||||
PageResult<StoreGoodsInventoryRecordDO> getStoreGoodsInventoryRecordPage(StoreGoodsInventoryRecordPageReqVO pageReqVO);
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,21 +1,18 @@
|
||||
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.PageParam;
|
||||
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 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.module.member.enums.ErrorCodeConstants.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_GOODS_INVENTORY_RECORD_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 商品出入库记录 Service 实现类
|
||||
@ -71,4 +68,5 @@ public class StoreGoodsInventoryRecordServiceImpl implements StoreGoodsInventory
|
||||
return storeGoodsInventoryRecordMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
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.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 接口
|
||||
@ -53,4 +54,6 @@ public interface StoreGoodsTypeService {
|
||||
PageResult<StoreGoodsTypeDO> getStoreGoodsTypePage(StoreGoodsTypePageReqVO pageReqVO);
|
||||
|
||||
List<StoreGoodsTypeDO> getAll();
|
||||
|
||||
|
||||
}
|
@ -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.storeorder.vo.CardDto;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.math.BigDecimal;
|
||||
@ -77,7 +76,7 @@ public interface StoreOrderService {
|
||||
|
||||
void reduction(Long orderId, BigDecimal money);
|
||||
|
||||
Boolean appCreate(@RequestBody CardDto dto);
|
||||
Boolean appCreate(CardDto dto);
|
||||
|
||||
String customize(StoreOrderDto dto);
|
||||
}
|
@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
|
||||
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.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.StoreOrderPageVO;
|
||||
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.user.MemberUserDO;
|
||||
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.service.amount.AmountService;
|
||||
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.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.user.MemberUserService;
|
||||
import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi;
|
||||
@ -78,6 +84,10 @@ public class StoreOrderServiceImpl implements StoreOrderService {
|
||||
private StoreBusinessService storeBusinessService;
|
||||
@Resource
|
||||
private AmountService amountService;
|
||||
@Resource
|
||||
private MemberAsyncService memberAsyncService;
|
||||
@Resource
|
||||
private StoreGoodsInventoryService storeGoodsInventoryService;
|
||||
|
||||
@Resource
|
||||
private StringRedisTemplate storeOrderRedisTemplate;
|
||||
@ -300,6 +310,21 @@ public class StoreOrderServiceImpl implements StoreOrderService {
|
||||
if(amount.compareTo(total) < 0){
|
||||
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();
|
||||
|
Reference in New Issue
Block a user