diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/StoreGoodsInventoryController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/StoreGoodsInventoryController.java index 14d1562e..8e74327e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/StoreGoodsInventoryController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/StoreGoodsInventoryController.java @@ -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 createStoreGoodsInventory(@Valid @RequestBody StoreGoodsInventorySaveReqVO createReqVO) { - return success(storeGoodsInventoryService.createStoreGoodsInventory(createReqVO)); + public CommonResult 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> getStoreGoodsInventoryPage(@Valid StoreGoodsInventoryPageReqVO pageReqVO) { PageResult pageResult = storeGoodsInventoryService.getStoreGoodsInventoryPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, StoreGoodsInventoryRespVO.class)); + PageResult bean = BeanUtils.toBean(pageResult, StoreGoodsInventoryRespVO.class); + List list = bean.getList(); + if(CollectionUtil.isNotEmpty(list)){ + List goodsList = list.stream().map(StoreGoodsInventoryRespVO::getGoodsId).collect(Collectors.toList()); + List all = storeGoodsService.getAll(goodsList); + Map 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") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/AddReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/AddReqVO.java new file mode 100644 index 00000000..2fb5eda6 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/AddReqVO.java @@ -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 + * @since 2024/11/4 + */ +@Data +public class AddReqVO { + + @Schema(description = "商品信息") + List list; + + @Schema(description = "1-入库,2-出库") + private Integer type; + + @Schema(description = "出库类型") + private Integer outType; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/GoodsInfoReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/GoodsInfoReqVO.java new file mode 100644 index 00000000..92030c5c --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/GoodsInfoReqVO.java @@ -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 + * @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; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/StoreGoodsInventoryRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/StoreGoodsInventoryRespVO.java index b1138ed4..6d093590 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/StoreGoodsInventoryRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodsinventory/vo/StoreGoodsInventoryRespVO.java @@ -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; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java index 469ece24..285fa61b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java @@ -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; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storebusiness/AppStoreBusinessController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storebusiness/AppStoreBusinessController.java new file mode 100644 index 00000000..5bb438e7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storebusiness/AppStoreBusinessController.java @@ -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 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); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoods/AppStoreGoodsController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoods/AppStoreGoodsController.java index abbfac5d..31045628 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoods/AppStoreGoodsController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoods/AppStoreGoodsController.java @@ -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> getStoreGoodsPage(@Valid StoreGoodsPageReqVO pageReqVO) { + PageResult pageResult = storeGoodsService.getStoreGoodsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, StoreGoodsRespVO.class)); + } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoodstype/AppStoreGoodsTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoodstype/AppStoreGoodsTypeController.java new file mode 100644 index 00000000..55380447 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storegoodstype/AppStoreGoodsTypeController.java @@ -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 createStoreGoodsType(@Valid @RequestBody StoreGoodsTypeSaveReqVO createReqVO) { + return success(storeGoodsTypeService.createStoreGoodsType(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品类别") + public CommonResult updateStoreGoodsType(@Valid @RequestBody StoreGoodsTypeSaveReqVO updateReqVO) { + storeGoodsTypeService.updateStoreGoodsType(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品类别") + @Parameter(name = "id", description = "编号", required = true) + public CommonResult 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 getStoreGoodsType(@RequestParam("id") Integer id) { + StoreGoodsTypeDO storeGoodsType = storeGoodsTypeService.getStoreGoodsType(id); + return success(BeanUtils.toBean(storeGoodsType, StoreGoodsTypeRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品类别分页") + public CommonResult> getStoreGoodsTypePage(@Valid StoreGoodsTypePageReqVO pageReqVO) { + PageResult 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 list = storeGoodsTypeService.getStoreGoodsTypePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品类别.xls", "数据", StoreGoodsTypeRespVO.class, + BeanUtils.toBean(list, StoreGoodsTypeRespVO.class)); + } + + @GetMapping("/all") + @Operation(summary = "获得商品类别分页") + public CommonResult> getAll() { + List all = storeGoodsTypeService.getAll(); + return success(BeanUtils.toBean(all, StoreGoodsTypeRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/OutTypeEnum.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/OutTypeEnum.java new file mode 100644 index 00000000..c5998082 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/OutTypeEnum.java @@ -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; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java index b65f9023..a2660600 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java @@ -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); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java index 70ad9fa4..07e501ea 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java @@ -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 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()); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessService.java index 68a59f88..1376ee8c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessService.java @@ -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); + + + + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessServiceImpl.java index 6c24faee..db757681 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storebusiness/StoreBusinessServiceImpl.java @@ -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 wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StoreBusinessDO::getCarteenId,carteenId); + wrapper.orderByAsc(StoreBusinessDO::getCreateTime); + wrapper.apply("DATE_FORMAT(create_time, '%Y-%m') = {0}", time); + List businessDOS = storeBusinessMapper.selectList(wrapper); + + Map map = businessDOS.stream().collect(Collectors.toMap( + vo -> vo.getCreateTime().toLocalDate().getDayOfMonth() + , vo -> vo, (existing, replacement) -> existing)); + + // 创建一个Map来存储每天的数据 + Map 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 previousWrapper = new LambdaQueryWrapper<>(); + previousWrapper.eq(StoreBusinessDO::getCarteenId,carteenId); + previousWrapper.orderByAsc(StoreBusinessDO::getCreateTime); + previousWrapper.apply("DATE_FORMAT(create_time, '%Y-%m-%d') = {0}", formattedDate); + List 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 wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StoreBusinessDO::getCarteenId,carteenId); + wrapper.orderByAsc(StoreBusinessDO::getCreateTime); + wrapper.apply("DATE_FORMAT(create_time, '%Y') = {0}", year); + List businessDOS = storeBusinessMapper.selectList(wrapper); + + Map 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 previousWrapper = new LambdaQueryWrapper<>(); + previousWrapper.eq(StoreBusinessDO::getCarteenId,carteenId); + previousWrapper.orderByAsc(StoreBusinessDO::getCreateTime); + previousWrapper.apply("DATE_FORMAT(create_time, '%Y-%m') = {0}", previousYear+"-12"); + List 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; + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryService.java index 4a1f1dda..0aed12b4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryService.java @@ -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); /** * 更新商品库存 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryServiceImpl.java index 3d9a2c69..aa9f4373 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventory/StoreGoodsInventoryServiceImpl.java @@ -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 wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(StoreGoodsInventoryDO::getGoodsId,createReqVO.getGoodsId()) - .eq(StoreGoodsInventoryDO::getCarteenId,createReqVO.getCarteenId()); - List storeGoodsInventoryDOS = storeGoodsInventoryMapper.selectList(wrapper); - if(InventoryTypeEnum.IN.getCode().equals(createReqVO.getType())){ - if(CollectionUtil.isNotEmpty(storeGoodsInventoryDOS)){ + List list = createReqVO.getList(); + for (GoodsInfoReqVO vo:list){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StoreGoodsInventoryDO::getGoodsId,vo.getGoodsId()) + .eq(StoreGoodsInventoryDO::getCarteenId,vo.getCarteenId()); + List 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() getStoreGoodsInventoryRecordPage(StoreGoodsInventoryRecordPageReqVO pageReqVO); + + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventoryrecord/StoreGoodsInventoryRecordServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventoryrecord/StoreGoodsInventoryRecordServiceImpl.java index dedd7fb4..6561d2da 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventoryrecord/StoreGoodsInventoryRecordServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodsinventoryrecord/StoreGoodsInventoryRecordServiceImpl.java @@ -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); } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodstype/StoreGoodsTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodstype/StoreGoodsTypeService.java index 3389cfe5..7a092348 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodstype/StoreGoodsTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storegoodstype/StoreGoodsTypeService.java @@ -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 getStoreGoodsTypePage(StoreGoodsTypePageReqVO pageReqVO); List getAll(); + + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java index a6f76052..8fa441c1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java @@ -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); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java index b8d12672..7bdb4960 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java @@ -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 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();