From c22b895afe54ea30e395e00ed225883243fb8309 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 30 八月 2024 18:15:24 +0800 Subject: [PATCH] 用户角色接口 --- ruoyi-system/src/main/java/com/ruoyi/system/mapper/TStockDataSetMapper.java | 8 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 15 ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserUpdateStatusDTO.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderMeal.java | 11 ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml | 35 ++ ruoyi-system/src/main/resources/mapper/system/TStockDataSetMapper.xml | 24 + ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderSaleGeneratorDTO.java | 32 ++ ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java | 12 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java | 287 +++++++++++++++++ ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml | 3 ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml | 5 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | 7 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java | 103 ------ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStockDataSetServiceImpl.java | 27 + ruoyi-system/src/main/java/com/ruoyi/system/vo/TDataGeneratorVO.java | 19 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java | 39 ++ ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStock.java | 28 + ruoyi-system/pom.xml | 15 ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderMealGeneratorDTO.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java | 13 ruoyi-system/src/main/java/com/ruoyi/system/domain/TStockDataSet.java | 42 ++ ruoyi-system/src/main/java/com/ruoyi/system/dto/StockDataSetDTO.java | 23 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 11 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java | 26 + ruoyi-system/src/main/java/com/ruoyi/system/domain/TDataGenerator.java | 32 + ruoyi-system/src/main/java/com/ruoyi/system/query/TDataGeneratorQuery.java | 23 + ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml | 4 ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java | 13 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/service/TStockDataSetService.java | 20 + ruoyi-system/src/main/java/com/ruoyi/system/service/TDataGeneratorService.java | 25 + 32 files changed, 774 insertions(+), 153 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java index c52f3b8..c731e6c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataGeneratorController.java @@ -1,16 +1,21 @@ package com.ruoyi.web.controller.api; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.system.domain.TDataGenerator; import com.ruoyi.system.dto.OrderMealGeneratorDTO; +import com.ruoyi.system.dto.OrderSaleGeneratorDTO; +import com.ruoyi.system.query.TDataGeneratorQuery; import com.ruoyi.system.service.TDataGeneratorService; import com.ruoyi.system.service.TOrderMealService; +import com.ruoyi.system.vo.TDataGeneratorVO; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * <p> @@ -34,9 +39,29 @@ } @ApiOperation( value = "餐饮数据生成") - @PostMapping(value = "/dataGenerator") - public AjaxResult<String> dataGenerator(@RequestBody OrderMealGeneratorDTO dto) { - dataGeneratorService.dataGenerator(dto); + @PostMapping(value = "/mealDataGenerator") + public AjaxResult<String> mealDataGenerator(@RequestBody OrderMealGeneratorDTO dto) { + dataGeneratorService.mealDataGenerator(dto); + return AjaxResult.success(); + } + + @ApiOperation( value = "销售数据生成") + @PostMapping(value = "/saleDataGenerator") + public AjaxResult<String> saleDataGenerator(@RequestBody OrderSaleGeneratorDTO dto) { + dataGeneratorService.saleDataGenerator(dto); + return AjaxResult.success(); + } + + @ApiOperation( value = "数据生成分页") + @PostMapping(value = "/pageList") + public AjaxResult<PageInfo<TDataGeneratorVO>> pageList(@Validated @RequestBody TDataGeneratorQuery query) { + return AjaxResult.success(dataGeneratorService.pageList(query)); + } + + @ApiOperation( value = "数据覆盖") + @GetMapping(value = "/dataCoverage") + public AjaxResult<String> dataCoverage(@RequestParam(value = "id") Long id) { + dataGeneratorService.dataCoverage(id); return AjaxResult.success(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index fa44b77..087fea1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -178,6 +178,10 @@ if (flag){ return error("修改角色'" + dto.getRoleName() + "'失败,角色名称已存在"); } + SysRole sysRole = roleService.selectRoleById(dto.getRoleId()); + if("meal".equals(sysRole.getRoleKey()) || "sale".equals(sysRole.getRoleKey()) || "admin".equals(sysRole.getRoleKey())){ + return error("当前角色无法修改"); + } if (roleService.editRole(dto) > 0) { // 更新缓存用户权限 @@ -215,6 +219,10 @@ @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysRole role) { + SysRole sysRole = roleService.selectRoleById(role.getRoleId()); + if("meal".equals(sysRole.getRoleKey()) || "sale".equals(sysRole.getRoleKey()) || "admin".equals(sysRole.getRoleKey())){ + return error("当前角色无法修改状态"); + } role.setUpdateBy(getUsername()); roleService.updateStatus(role); return AjaxResult.success(); @@ -224,7 +232,23 @@ * 删除角色 */ // @PreAuthorize("@ss.hasPermi('system:role:remove')") - @ApiOperation(value = "删除角色") + @ApiOperation(value = "批量删除角色") + @Log(title = "角色信息-角色删除角色", businessType = BusinessType.DELETE) + @DeleteMapping("/deleteById/{id}") + public AjaxResult remove(@PathVariable(value = "id") Long id) + { + SysRole sysRole = roleService.selectRoleById(id); + if("meal".equals(sysRole.getRoleKey()) || "sale".equals(sysRole.getRoleKey()) || "admin".equals(sysRole.getRoleKey())){ + return error("当前角色无法删除"); + } + return AjaxResult.success(roleService.deleteRoleById(id)); + } + + /** + * 删除角色 + */ + // @PreAuthorize("@ss.hasPermi('system:role:remove')") + @ApiOperation(value = "批量删除角色") @Log(title = "角色信息-角色删除角色", businessType = BusinessType.DELETE) @DeleteMapping("/deleteById/{ids}") public AjaxResult remove(@PathVariable String ids) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 310a24a..5a1354f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -82,105 +82,6 @@ // } /** - * 人员借用列表 - */ -// @ApiOperation(value = "人员借用列表") -// @GetMapping("/userBorrowList") -// public AjaxResult userBorrowList(@RequestParam(required = false) String name, -// @RequestParam(required = false) Integer type) -// { -// -// UserAddListVO userAddListVO = new UserAddListVO(); -// -// Long companyId = tokenService.getLoginUser().getUser().getCompanyId(); -// -// List<TCompany> companyList = new ArrayList<>(); -// List<TDept> deptList = new ArrayList<>(); -// List<SysUser> userList = new ArrayList<>(); -// // 查询公司 -// if(Objects.nonNull(type) && type == 1){ -// companyList = companyService.userAddListByCompanyName(name); -// } -// // 查询部门 -// if(Objects.nonNull(type) && type == 2){ -// deptList = tDeptService.userAddListByDeptName(name); -// } -// // 查询用户 -// if(Objects.nonNull(type) && type == 3){ -// userList = userService.selectListByNamePhone(name); -// } -// -// if(Objects.isNull(type)){ -// companyList = companyService.userAddListByCompanyName(name); -// deptList = tDeptService.userAddListByDeptName(name); -// userList = userService.selectListByNamePhone(name); -// } -// -// List<Long> companyIds = companyList.stream().map(TCompany::getId).collect(Collectors.toList()); -// List<Long> deptCompanyIds = deptList.stream().map(TDept::getCompanyId).collect(Collectors.toList()); -// List<Long> userCompanyIds = userList.stream().map(SysUser::getCompanyId).collect(Collectors.toList()); -// companyIds.addAll(deptCompanyIds); -// companyIds.addAll(userCompanyIds); -// -// companyIds = companyIds.stream().distinct().collect(Collectors.toList()); -// -// if(CollectionUtils.isEmpty(companyIds)){ -// return AjaxResult.success(userAddListVO); -// } -// SysUser user1 = tokenService.getLoginUser().getUser(); -// if(!user1.isAdmin()){ -// companyIds = companyIds.stream().filter(e->!e.equals(companyId)).collect(Collectors.toList()); -// } -// -// // 查询符合要求的公司 -// List<UserLevelVO> parent = companyService.userAddListByCompanyIds(companyIds); -// -// List<TDept> depts = tDeptService.selectList(); -// -// List<SysUser> sysUsers = userService.selectList(); -// -// for (UserLevelVO userLevelVO : parent) { -// -// // 找到公司下的部门 -// List<TDept> tDepts = depts.stream().filter(e -> userLevelVO.getKey().equals(e.getCompanyId())).collect(Collectors.toList()); -// List<UserLevelVO> children = new ArrayList<>(); -// // 封装部门 -// for (TDept dept : tDepts) { -// userLevelVO.setChildren(children); -// UserLevelVO userLevelVO1 = new UserLevelVO(); -// userLevelVO1.setKey(dept.getId()); -// userLevelVO1.setTitle(dept.getDeptName()); -// // 找到部门下的人员 -// List<SysUser> users; -// if(StringUtils.isNotEmpty(name) && type == 3){ -// users = sysUsers.stream().filter(e -> userLevelVO1.getKey().equals(e.getDeptId()) -// && ((StringUtils.isNotEmpty(e.getNickName()) && e.getNickName().contains(name))) -// || (StringUtils.isNotEmpty(e.getPhonenumber()) && e.getPhonenumber().contains(name))).collect(Collectors.toList()); -// }else { -// users = sysUsers.stream().filter(e -> userLevelVO1.getKey().equals(e.getDeptId())).collect(Collectors.toList()); -// } -// List<UserLevelVO> children1 = new ArrayList<>(); -// // 封装人员 -// for (SysUser user : users) { -// UserLevelVO userLevelVO2 = new UserLevelVO(); -// userLevelVO2.setKey(user.getUserId()); -// userLevelVO2.setTitle(user.getNickName()); -// userLevelVO2.setAvatar(user.getAvatar()); -// userLevelVO2.setFlag(true); -// children1.add(userLevelVO2); -// } -// userLevelVO1.setChildren(children1); -// -// children.add(userLevelVO1); -// } -// userLevelVO.setChildren(children); -// } -// userAddListVO.setUserLevelVOS(parent); -// userAddListVO.setUserList(sysUsers); -// return AjaxResult.success(userAddListVO); -// } - - /** * 获取用户详情 */ @ApiOperation(value = "获取用户详情") @@ -270,7 +171,6 @@ @PostMapping("/add") public AjaxResult add(@Validated @RequestBody SysUser user) { - user.setUserName(user.getPhonenumber()); if (!userService.checkUserNameUnique(user)) { return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); @@ -279,6 +179,7 @@ { return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); } + user.setPassword("123456"); user.setCreateBy(getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); userService.insertUser(user); @@ -359,7 +260,7 @@ SysUser user = new SysUser(); user.setUserId(dto.getUserId()); user.setStatus(String.valueOf(dto.getStatus())); - user.setRemark(dto.getRemark()); + user.setDisableRemark(dto.getDisableRemark()); user.setUpdateBy(getUsername()); return AjaxResult.success(userService.updateUserStatus(user)); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index b49a187..f6cf7a2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -112,11 +112,18 @@ /** 角色ID */ @ApiModelProperty(value = "角色ID") private Long roleId; + @ApiModelProperty(value = "角色类型 1=平台 2=餐饮店铺 3=销售店铺") + private Integer roleType; /** * 是否为黑名单 1是 0否 */ @ApiModelProperty(value = "是否为黑名单 1是 0否") private Integer ifBlack; + /** + * 禁用备注 + */ + @ApiModelProperty(value = "禁用备注") + private String disableRemark; @TableField(exist = false) private String roleName; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java index 670e6b3..ce64fab 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java @@ -60,6 +60,7 @@ * 操作系统 */ private String os; + private String nickName; /** * 权限列表 @@ -89,6 +90,14 @@ this.permissions = permissions; } + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + public Long getUserId() { return userId; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index eadb4d3..24c6c1d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -113,6 +113,7 @@ } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + loginUser.setNickName(user.getNickName()); recordLoginInfo(loginUser.getUserId()); // 生成token return loginUser; diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index 10998d3..44d22cf 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -55,11 +55,11 @@ <!-- <version>4.3.2</version>--> <!-- </dependency>--> -<!-- <dependency>--> -<!-- <groupId>org.springframework</groupId>--> -<!-- <artifactId>spring-test</artifactId>--> -<!-- <version>5.1.3.RELEASE</version>--> -<!-- </dependency>--> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>5.1.3.RELEASE</version> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> @@ -70,6 +70,11 @@ <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-framework</artifactId> + <version>3.8.6</version> + </dependency> </dependencies> diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TDataGenerator.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TDataGenerator.java index 47d6c04..2d1e20a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TDataGenerator.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TDataGenerator.java @@ -1,6 +1,7 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,6 +9,8 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -43,22 +46,43 @@ @ApiModelProperty(value = "开始时间") @TableField("startTime") - private LocalDateTime startTime; + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate startTime; @ApiModelProperty(value = "结束时间") @TableField("endTime") - private LocalDateTime endTime; + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate endTime; @ApiModelProperty(value = "最小金额") @TableField("minMoney") - private Double minMoney; + private BigDecimal minMoney; @ApiModelProperty(value = "最大金额") @TableField("maxMoney") - private Double maxMoney; + private BigDecimal maxMoney; @ApiModelProperty(value = "状态 1=生成中 2=待覆盖 3=已覆盖") @TableField("status") private Integer status; + @ApiModelProperty(value = "订单类型 1=餐饮 2=销售") + @TableField("orderType") + private Integer orderType; + @ApiModelProperty(value = "微信支付占比") + @TableField("weiXinPay") + private BigDecimal weiXinPay; + @ApiModelProperty(value = "支付宝支付占比") + @TableField("aliPay") + private BigDecimal aliPay; + @ApiModelProperty(value = "支付宝支付占比") + @TableField("cardPay") + private BigDecimal cardPay; + @ApiModelProperty(value = "现金支付占比") + @TableField("moneyPay") + private BigDecimal moneyPay; + @ApiModelProperty(value = "其他支付") + @TableField("otherPay") + private BigDecimal otherPay; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderMeal.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderMeal.java index d81c0d2..d5faf30 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderMeal.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderMeal.java @@ -62,10 +62,19 @@ @ApiModelProperty(value = "支付状态 1=待支付 2=已支付") @TableField("status") private Integer status; + @ApiModelProperty(value = "是否覆盖 1=是 0=否") + @TableField("isCover") + private Integer isCover; + @ApiModelProperty(value = "数据生成id") + @TableField("generatorId") + private Long generatorId; + @ApiModelProperty(value = "店铺id") + @TableField("shopId") + private Long shopId; @ApiModelProperty(value = "商品集合") @TableField(exist = false) - private List<TOrderMealGoods> mealOrderGoods;; + private List<TOrderMealGoods> mealOrderGoods; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java index 9503c82..82b9c02 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderSale.java @@ -1,6 +1,7 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,7 +10,9 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; /** * <p> @@ -31,8 +34,9 @@ private Long id; @ApiModelProperty(value = "下单时间") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @TableField("orderTime") - private LocalDateTime orderTime; + private LocalDate orderTime; @ApiModelProperty(value = "备注说明") @TableField("remark") @@ -53,6 +57,13 @@ @ApiModelProperty(value = "支付状态 1=待支付 2=已支付") @TableField("status") private Integer status; + @ApiModelProperty(value = "店铺id") + @TableField("shopId") + private Long shopId; + + @ApiModelProperty(value = "销售订单商品") + @TableField(exist = false) + private List<TOrderSaleGoods> orderSaleGoods; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStock.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStock.java index 063b394..e7e3a14 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStock.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TOrderStock.java @@ -1,6 +1,7 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,7 +10,9 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; /** * <p> @@ -35,11 +38,28 @@ private String stockNum; @ApiModelProperty(value = "进货日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @TableField("stockTime") - private LocalDateTime stockTime; + private LocalDate stockTime; - @ApiModelProperty(value = "进货总价") - @TableField("stockTotalPrice") - private BigDecimal stockTotalPrice; +// @ApiModelProperty(value = "进货总价") +// @TableField("stockTotalPrice") +// private BigDecimal stockTotalPrice; + @ApiModelProperty(value = "是否覆盖 1=是 0=否") + @TableField("isCover") + private Integer isCover; + @ApiModelProperty(value = "数据生成id") + @TableField("generatorId") + private Long generatorId; + @ApiModelProperty(value = "店铺id") + @TableField("shopId") + private Long shopId; +// @ApiModelProperty(value = "支付方式 1=现金 2=支付宝 3=微信 4=银行卡 5=其他") +// @TableField("payType") +// private Integer payType; + + @ApiModelProperty(value = "进货数据商品集合") + @TableField(exist = false) + private List<TOrderStockGoods> orderStockGoods; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TStockDataSet.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TStockDataSet.java new file mode 100644 index 0000000..663107e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TStockDataSet.java @@ -0,0 +1,42 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseModel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("t_stock_data_set") +@ApiModel(value="TStockDataSet对象", description="进货数据设置") +public class TStockDataSet extends BaseModel { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty(value = "进货日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @TableField("stockDate") + private LocalDate stockDate; + + @ApiModelProperty(value = "损耗率") + @TableField("lossRate") + private BigDecimal lossRate; + + @ApiModelProperty(value = "数据生成id") + @TableField("generatorId") + private Long generatorId; + @ApiModelProperty(value = "店铺id") + @TableField("shopId") + private Long shopId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderMealGeneratorDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderMealGeneratorDTO.java index 9b38a5a..4cc764c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderMealGeneratorDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderMealGeneratorDTO.java @@ -6,6 +6,7 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; @Data @@ -15,11 +16,17 @@ @ApiModelProperty(value = "店铺id") private Long shopId; + @ApiModelProperty(value = "开始时间") + private LocalDate startTime; + + @ApiModelProperty(value = "结束时间") + private LocalDate endTime; + @ApiModelProperty(value = "营业额小") - private BigDecimal minTurnover; + private BigDecimal minMoney; @ApiModelProperty(value = "营业额大") - private BigDecimal maxTurnover; + private BigDecimal maxMoney; @ApiModelProperty(value = "微信占比") private BigDecimal weiXinProportion; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderSaleGeneratorDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderSaleGeneratorDTO.java new file mode 100644 index 0000000..8538251 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/OrderSaleGeneratorDTO.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.dto; + +import com.ruoyi.system.domain.TOrderSale; +import com.ruoyi.system.domain.TStockDataSet; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +@Data +@ApiModel(value = "销售数据生成DTO") +public class OrderSaleGeneratorDTO implements Serializable { + + @ApiModelProperty(value = "店铺id") + private Long shopId; + + @ApiModelProperty(value = "开始时间") + private LocalDate startTime; + + @ApiModelProperty(value = "结束时间") + private LocalDate endTime; + + @ApiModelProperty(value = "销售订单") + private List<TOrderSale> orderSales; + + @ApiModelProperty(value = "进货数据设置") + private List<TStockDataSet> stockDataSets; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/StockDataSetDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/StockDataSetDTO.java new file mode 100644 index 0000000..5244e3f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/StockDataSetDTO.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +@ApiModel(value = "进货数据设置DTO") +public class StockDataSetDTO implements Serializable { + + @ApiModelProperty(value = "进货日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate stockDate; + + @ApiModelProperty(value = "损耗率") + private BigDecimal lossRate; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserUpdateStatusDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserUpdateStatusDTO.java index 57f6eec..b7dd3cf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserUpdateStatusDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserUpdateStatusDTO.java @@ -16,7 +16,7 @@ @ApiModelProperty(value = "状态 帐号状态(0正常 1停用)") private Integer status; - @ApiModelProperty(value = "备注") - private String remark; + @ApiModelProperty(value = "禁用备注") + private String disableRemark; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java index 7ada9fb..98fb24b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TDataGeneratorMapper.java @@ -2,7 +2,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.domain.TDataGenerator; +import com.ruoyi.system.query.TDataGeneratorQuery; +import com.ruoyi.system.vo.TDataGeneratorVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -14,4 +20,11 @@ */ public interface TDataGeneratorMapper extends BaseMapper<TDataGenerator> { + /** + * 数据生成分页 + * @param query + * @param pageInfo + * @return + */ + List<TDataGeneratorVO> pageList(@Param("query") TDataGeneratorQuery query, @Param("pageInfo")PageInfo<TDataGeneratorVO> pageInfo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TStockDataSetMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TStockDataSetMapper.java new file mode 100644 index 0000000..47c00e7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TStockDataSetMapper.java @@ -0,0 +1,8 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.TStockDataSet; + +public interface TStockDataSetMapper extends BaseMapper<TStockDataSet> { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java index 8609862..3229257 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java @@ -5,18 +5,20 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data @ApiModel(value = "账户列表query") public class SysUserQuery extends BasePage { - @ApiModelProperty(value = "姓名") - private String nickName; + @ApiModelProperty(value = "姓名或者手机号") + private String nickNameOrPhone; @ApiModelProperty(value = "角色id") - private Integer roleId; + private List<Integer> roleIds; - @ApiModelProperty(value = "手机号") - private String phonenumber; +// @ApiModelProperty(value = "手机号") +// private String phonenumber; @ApiModelProperty(value = "状态 0=正常 1=停用") private String status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TDataGeneratorQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TDataGeneratorQuery.java new file mode 100644 index 0000000..adcfdb9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TDataGeneratorQuery.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.model.TimeRangeQueryBody; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +@ApiModel(value = "数据生成分页") +public class TDataGeneratorQuery extends TimeRangeQueryBody { + @ApiModelProperty(value = "操作人姓名") + private String userName; + @ApiModelProperty(value = "店铺名称") + private String shopName; + @ApiModelProperty(value = "状态 1=生成中 2=待覆盖 3=已覆盖") + private Integer status; + @ApiModelProperty(value = "订单类型 1=餐饮 2=销售") + @NotNull(message = "订单类型不能为空") + private Integer orderType; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TDataGeneratorService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TDataGeneratorService.java index 39d4e54..3a808b4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TDataGeneratorService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TDataGeneratorService.java @@ -1,8 +1,12 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.domain.TDataGenerator; import com.ruoyi.system.dto.OrderMealGeneratorDTO; +import com.ruoyi.system.dto.OrderSaleGeneratorDTO; +import com.ruoyi.system.query.TDataGeneratorQuery; +import com.ruoyi.system.vo.TDataGeneratorVO; /** * <p> @@ -17,5 +21,24 @@ * 餐饮数据生成 * @param dto */ - void dataGenerator(OrderMealGeneratorDTO dto); + void mealDataGenerator(OrderMealGeneratorDTO dto); + + /** + * 销售数据生成 + * @param dto + */ + void saleDataGenerator(OrderSaleGeneratorDTO dto); + + /** + * 数据生成分页 + * @param query + */ + PageInfo<TDataGeneratorVO> pageList(TDataGeneratorQuery query); + + /** + * 数据覆盖 + * @param id + * @return + */ + void dataCoverage(Long id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TStockDataSetService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TStockDataSetService.java new file mode 100644 index 0000000..918f61c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TStockDataSetService.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.domain.TShop; +import com.ruoyi.system.domain.TStockDataSet; +import com.ruoyi.system.query.TShopQuery; +import com.ruoyi.system.vo.TShopVO; + +/** + * <p> + * </p> + * + * @author xiaochen + * @since 2024-08-14 + */ +public interface TStockDataSetService extends IService<TStockDataSet> { + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 4db6ccd..28a5868 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -646,9 +646,15 @@ SysUser sysUser = new SysUser(); sysUser.setUserName(dto.getAccount()); sysUser.setNickName(dto.getShopHead()); + if(dto.getShopType() ==1){ + sysUser.setRoleType(2); + }else { + sysUser.setRoleType(3); + } sysUser.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); this.insertUser(sysUser); // TODO 自动绑定角色 + } @Override @@ -659,6 +665,11 @@ } sysUser.setUserName(dto.getAccount()); sysUser.setNickName(dto.getShopHead()); + if(dto.getShopType() ==1){ + sysUser.setRoleType(2); + }else { + sysUser.setRoleType(3); + } sysUser.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); this.updateUser(sysUser); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java index 527d183..d3b6229 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java @@ -1,22 +1,30 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.OrderNumConstants; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CodeGenerateUtils; +import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.*; -import com.ruoyi.system.dto.OrderMealGeneratorCountDTO; -import com.ruoyi.system.dto.OrderMealGeneratorDTO; -import com.ruoyi.system.dto.TOrderMealDTO; +import com.ruoyi.system.dto.*; import com.ruoyi.system.mapper.TDataGeneratorMapper; +import com.ruoyi.system.query.TDataGeneratorQuery; import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.SysUserVO; +import com.ruoyi.system.vo.TDataGeneratorVO; import com.ruoyi.system.vo.TFoundationConfigVO; import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -41,9 +49,38 @@ private TOrderMealService orderMealService; @Autowired private TOrderMealGoodsService orderMealGoodsService; + @Autowired + private TOrderSaleService orderSaleService; + @Autowired + private TOrderSaleGoodsService orderSaleGoodsService; + @Autowired + private TOrderStockService orderStockService; + @Autowired + private TOrderStockGoodsService orderStockGoodsService; + @Autowired + private TokenService tokenService; + @Autowired + private TStockDataSetService stockDataSetService; @Override - public void dataGenerator(OrderMealGeneratorDTO dto) { + public void mealDataGenerator(OrderMealGeneratorDTO dto) { + // 存储数据生成数据 + TDataGenerator dataGenerator = new TDataGenerator(); + dataGenerator.setUserId(tokenService.getLoginUser().getUserId()); + dataGenerator.setUserName(tokenService.getLoginUser().getNickName()); + dataGenerator.setShopId(dataGenerator.getShopId()); + dataGenerator.setStartTime(dto.getStartTime()); + dataGenerator.setEndTime(dto.getEndTime()); + dataGenerator.setMinMoney(dto.getMinMoney()); + dataGenerator.setMaxMoney(dto.getMaxMoney()); + dataGenerator.setStatus(2); + dataGenerator.setOrderType(1); + dataGenerator.setWeiXinPay(dto.getWeiXinProportion()); + dataGenerator.setAliPay(dto.getAliProportion()); + dataGenerator.setCardPay(dto.getCardProportion()); + dataGenerator.setMoneyPay(dto.getMoneyProportion()); + dataGenerator.setOtherPay(dto.getOtherProportion()); + this.save(dataGenerator); long start = System.currentTimeMillis(); // 查询所有的人数用餐标准 List<TFoundationConfigVO> foundationConfigs = foundationConfigService.getList(); @@ -99,7 +136,7 @@ } } BigDecimal sumMoney = orderMeals.stream().map(TOrderMeal::getPayMoney).reduce(BigDecimal::add).get(); - if(sumMoney.compareTo(dto.getMinTurnover()) >= 0 || sumMoney.compareTo(dto.getMaxTurnover()) <= 0){ + if(sumMoney.compareTo(dto.getMinMoney()) >= 0 || sumMoney.compareTo(dto.getMaxMoney()) <= 0){ int weiXin = getRandomPayType(orderMeals.size(), dto.getWeiXinProportion()); int ali = getRandomPayType(orderMeals.size(), dto.getAliProportion()); int card = getRandomPayType(orderMeals.size(), dto.getCardProportion()); @@ -148,12 +185,17 @@ allOrderMeals.addAll(cardOrderMeals); allOrderMeals.addAll(moneyOrderMeals); allOrderMeals.addAll(otherOrderMeals); + allOrderMeals.forEach(e->{ + e.setIsCover(0); + e.setGeneratorId(dataGenerator.getId()); + }); orderMealService.saveBatch(allOrderMeals); - for (TOrderMeal weiXinOrderMeal : allOrderMeals) { - weiXinOrderMeal.getMealOrderGoods().forEach(e->e.setOrderId(weiXinOrderMeal.getId())); + for (TOrderMeal orderMeal : allOrderMeals) { + orderMeal.getMealOrderGoods().forEach(e->e.setOrderId(orderMeal.getId())); } orderMealGoodsService.saveBatch(allOrderMeals.stream().map(TOrderMeal::getMealOrderGoods).flatMap(Collection::stream).collect(Collectors.toList())); + // 存储 long end = System.currentTimeMillis() - start; System.err.println("相差时间========="+end); }else { @@ -162,6 +204,237 @@ } + @Override + public void saleDataGenerator(OrderSaleGeneratorDTO dto) { + // 查询上一次的数据生成时间 + TDataGenerator lastDataGenerator = this.getOne(new LambdaQueryWrapper<TDataGenerator>().eq(TDataGenerator::getShopId, dto.getShopId()).orderByDesc(TDataGenerator::getCreateTime).last("limit 1")); + if(Objects.nonNull(lastDataGenerator) && lastDataGenerator.getEndTime().isAfter(dto.getStartTime())){ + throw new ServiceException("数据生成时间不能小于上次生成时间"); + } + // 查询上次生成最后一次的时间 后续涛哥不用这个类,可以改成TOrderStock的最后一条数据 + TStockDataSet stockDataSet = stockDataSetService.getOne(new LambdaQueryWrapper<TStockDataSet>() + .eq(TStockDataSet::getShopId, dto.getShopId()) + .orderByDesc(TStockDataSet::getStockDate) + .last("limit 1")); + // 存储数据生成数据 + TDataGenerator dataGenerator = new TDataGenerator(); + dataGenerator.setUserId(tokenService.getLoginUser().getUserId()); + dataGenerator.setUserName(tokenService.getLoginUser().getNickName()); + dataGenerator.setShopId(dataGenerator.getShopId()); + dataGenerator.setStartTime(dto.getStartTime()); + dataGenerator.setEndTime(dto.getEndTime()); + dataGenerator.setStatus(2); + dataGenerator.setOrderType(2); + this.save(dataGenerator); + + // 存储进货数据设置 + List<TStockDataSet> stockDataSets = dto.getStockDataSets(); + stockDataSets.forEach(e->e.setGeneratorId(dataGenerator.getId())); + stockDataSetService.saveBatch(stockDataSets); + + // 添加销售订单数 + List<TOrderSale> orderSales = dto.getOrderSales(); + orderSaleService.saveBatch(orderSales); + for (TOrderSale orderSale : orderSales) { + orderSale.getOrderSaleGoods().forEach(e->e.setOrderId(orderSale.getId())); + } + List<TOrderSaleGoods> orderSaleGoods = orderSales.stream().map(TOrderSale::getOrderSaleGoods).flatMap(Collection::stream).collect(Collectors.toList()); + orderSaleGoodsService.saveBatch(orderSaleGoods); + + // 生成进货数据 + List<TOrderStock> stockList = new ArrayList<>(); + stockDataSets.stream().sorted(Comparator.comparing(TStockDataSet::getStockDate)); + for (int i = 0; i < stockDataSets.size(); i++) { + TStockDataSet start = stockDataSets.get(i); + LocalDate startTime = start.getStockDate(); + if(i==stockDataSets.size()-1){ + // 最后一次 + LocalDate endTime = LocalDate.now(); + List<Long> saleIds = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) <= 0).map(TOrderSale::getId).collect(Collectors.toList()); + List<TOrderSaleGoods> orderSaleGoodsList = orderSaleGoods.stream().filter(e -> saleIds.contains(e.getOrderId())).collect(Collectors.toList()); + // 根据商品新生成一条数据 + TOrderStock orderStock = new TOrderStock(); + orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn()); + orderStock.setStockTime(startTime); + orderStock.setIsCover(0); + orderStock.setGeneratorId(dataGenerator.getId()); + orderStock.setShopId(dto.getShopId()); + + Map<String, List<TOrderSaleGoods>> goodsList = orderSaleGoodsList.stream().collect(Collectors.groupingBy(TOrderSaleGoods::getGoodsName)); + List<TOrderStockGoods> orderStockGoods = new ArrayList<>(); + goodsList.forEach((k,v)->{ + TOrderStockGoods tOrderStockGoods = new TOrderStockGoods(); + tOrderStockGoods.setGoodsName(k); + tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum()); + tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice()); + tOrderStockGoods.setSalePrice(v.get(0).getSalePrice()); + tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture()); + tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + orderStockGoods.add(tOrderStockGoods); + }); + orderStock.setOrderStockGoods(orderStockGoods); + stockList.add(orderStock); + + }else if(i==0 && Objects.nonNull(stockDataSet)){ + // 第一次 第一次的进货时间为上一次的结束时间 开始时间为上一次的开始时间 + LocalDate startTime1 = stockDataSet.getStockDate(); + List<Long> saleIds = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) < 0).map(TOrderSale::getId).collect(Collectors.toList()); + List<TOrderSaleGoods> orderSaleGoodsList = orderSaleGoods.stream().filter(e -> saleIds.contains(e.getOrderId())).collect(Collectors.toList()); + // 查询上一次开始之后的订单数据 + List<TOrderSale> orderSales1 = orderSaleService.list(new LambdaQueryWrapper<TOrderSale>().gt(TOrderSale::getOrderTime, startTime1)); + List<Long> saleIds1 = orderSales1.stream().map(TOrderSale::getId).collect(Collectors.toList()); + // 查询上一次的商品 + List<TOrderSaleGoods> list = orderSaleGoodsService.list(new LambdaQueryWrapper<TOrderSaleGoods>().in(TOrderSaleGoods::getOrderId, saleIds1)); + // 结合上次最后一次的数据 + list.addAll(orderSaleGoodsList); + // 删除上一次的数据生成 新生成一条数据 + TOrderStock orderStock = new TOrderStock(); + orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn()); + orderStock.setStockTime(startTime); + orderStock.setIsCover(0); + orderStock.setGeneratorId(dataGenerator.getId()); + orderStock.setShopId(dto.getShopId()); + + Map<String, List<TOrderSaleGoods>> goodsList = list.stream().collect(Collectors.groupingBy(TOrderSaleGoods::getGoodsName)); + List<TOrderStockGoods> orderStockGoods = new ArrayList<>(); + goodsList.forEach((k,v)->{ + TOrderStockGoods tOrderStockGoods = new TOrderStockGoods(); + tOrderStockGoods.setGoodsName(k); + tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum()); + tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice()); + tOrderStockGoods.setSalePrice(v.get(0).getSalePrice()); + tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture()); + tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + orderStockGoods.add(tOrderStockGoods); + }); + orderStock.setOrderStockGoods(orderStockGoods); + stockList.add(orderStock); + + // 处理第一次到下一次的数据 + TStockDataSet end = stockDataSets.get(i + 1); + LocalDate endTime = end.getStockDate(); + List<Long> saleIds2 = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) < 0).map(TOrderSale::getId).collect(Collectors.toList()); + List<TOrderSaleGoods> orderSaleGoodsList2 = orderSaleGoods.stream().filter(e -> saleIds2.contains(e.getOrderId())).collect(Collectors.toList()); + // 根据商品新生成一条数据 + TOrderStock orderStock1 = new TOrderStock(); + orderStock1.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn()); + orderStock1.setStockTime(startTime); + orderStock1.setIsCover(0); + orderStock1.setGeneratorId(dataGenerator.getId()); + orderStock1.setShopId(dto.getShopId()); + + Map<String, List<TOrderSaleGoods>> goodsList1 = orderSaleGoodsList2.stream().collect(Collectors.groupingBy(TOrderSaleGoods::getGoodsName)); + List<TOrderStockGoods> orderStockGoods1 = new ArrayList<>(); + goodsList1.forEach((k,v)->{ + TOrderStockGoods tOrderStockGoods = new TOrderStockGoods(); + tOrderStockGoods.setGoodsName(k); + tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum()); + tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice()); + tOrderStockGoods.setSalePrice(v.get(0).getSalePrice()); + tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture()); + tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + orderStockGoods1.add(tOrderStockGoods); + }); + orderStock1.setOrderStockGoods(orderStockGoods1); + stockList.add(orderStock1); + + }else { + TStockDataSet end = stockDataSets.get(i + 1); + LocalDate endTime = end.getStockDate(); + List<Long> saleIds = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) >= 0 && e.getOrderTime().compareTo(endTime) < 0).map(TOrderSale::getId).collect(Collectors.toList()); + List<TOrderSaleGoods> orderSaleGoodsList = orderSaleGoods.stream().filter(e -> saleIds.contains(e.getOrderId())).collect(Collectors.toList()); + // 根据商品新生成一条数据 + TOrderStock orderStock = new TOrderStock(); + orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn()); + orderStock.setStockTime(startTime); + orderStock.setIsCover(0); + orderStock.setGeneratorId(dataGenerator.getId()); + orderStock.setShopId(dto.getShopId()); + + Map<String, List<TOrderSaleGoods>> goodsList = orderSaleGoodsList.stream().collect(Collectors.groupingBy(TOrderSaleGoods::getGoodsName)); + List<TOrderStockGoods> orderStockGoods = new ArrayList<>(); + goodsList.forEach((k,v)->{ + TOrderStockGoods tOrderStockGoods = new TOrderStockGoods(); + tOrderStockGoods.setGoodsName(k); + tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum()); + tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice()); + tOrderStockGoods.setSalePrice(v.get(0).getSalePrice()); + tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture()); + tOrderStockGoods.setStockCount(v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum()); + orderStockGoods.add(tOrderStockGoods); + }); + orderStock.setOrderStockGoods(orderStockGoods); + stockList.add(orderStock); + } + } + // 删除上一次的数据生成 + TOrderStock orderStock = orderStockService.getOne(Wrappers.lambdaQuery(TOrderStock.class) + .eq(TOrderStock::getShopId, dto.getShopId()) + .orderByDesc(TOrderStock::getStockTime) + .last("LIMIT 1")); + if(Objects.nonNull(orderStock)){ + orderStockService.removeById(orderStock); + } + // 添加数据 + orderStockService.saveBatch(stockList); + for (TOrderStock stock : stockList) { + stock.getOrderStockGoods().forEach(e->e.setOrderId(stock.getId())); + } + List<TOrderStockGoods> orderStockGoods = stockList.stream().map(TOrderStock::getOrderStockGoods).flatMap(Collection::stream).collect(Collectors.toList()); + orderStockGoodsService.saveBatch(orderStockGoods); + } + + @Override + public PageInfo<TDataGeneratorVO> pageList(TDataGeneratorQuery query) { + PageInfo<TDataGeneratorVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TDataGeneratorVO> list = this.baseMapper.pageList(query,pageInfo); + List<Long> ids = list.stream().map(TDataGeneratorVO::getId).collect(Collectors.toList()); + if(query.getOrderType() == 1){ + List<TOrderMeal> orderMeals = orderMealService.list(Wrappers.lambdaQuery(TOrderMeal.class) + .in(TOrderMeal::getGeneratorId, ids)); + List<Long> mealIds = orderMeals.stream().map(TOrderMeal::getId).collect(Collectors.toList()); + List<TOrderMealGoods> mealGoods = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class) + .in(TOrderMealGoods::getOrderId, mealIds)); + for (TDataGeneratorVO tDataGeneratorVO : list) { + List<Long> collect = orderMeals.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).map(TOrderMeal::getId).collect(Collectors.toList()); + BigDecimal money = mealGoods.stream().filter(e -> collect.contains(e.getOrderId())) + .reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getGoodsSalePrice().multiply(new BigDecimal(y.getGoodsCount()))), BigDecimal::add); + tDataGeneratorVO.setTotalRevenue(money); + } + }else { + List<TOrderStock> orderStocks = orderStockService.list(Wrappers.lambdaQuery(TOrderStock.class) + .in(TOrderStock::getGeneratorId, ids)); + List<Long> stockIds = orderStocks.stream().map(TOrderStock::getId).collect(Collectors.toList()); + List<TOrderStockGoods> stockGoods = orderStockGoodsService.list(Wrappers.lambdaQuery(TOrderStockGoods.class) + .in(TOrderStockGoods::getOrderId, stockIds)); + for (TDataGeneratorVO tDataGeneratorVO : list) { + List<Long> collect = orderStocks.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).map(TOrderStock::getId).collect(Collectors.toList()); + BigDecimal money = stockGoods.stream().filter(e -> collect.contains(e.getOrderId())) + .reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStockPrice().multiply(new BigDecimal(y.getStockCount()))), BigDecimal::add); + tDataGeneratorVO.setTotalRevenue(money); + } + } + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public void dataCoverage(Long id) { + TDataGenerator dataGenerator = this.getOne(Wrappers.lambdaQuery(TDataGenerator.class) + .eq(TDataGenerator::getId, id)); + if(dataGenerator.getOrderType() == 1){ + // 删除时间段的数据 + orderMealService.remove(Wrappers.lambdaQuery(TOrderMeal.class) + .gt(TOrderMeal::getCreateTime, dataGenerator.getStartTime()) + .lt(TOrderMeal::getCreateTime, dataGenerator.getEndTime())); + // 修改覆盖类型为已覆盖 + orderMealService.update(Wrappers.lambdaUpdate(TOrderMeal.class).set(TOrderMeal::getIsCover, 1).eq(TOrderMeal::getGeneratorId, id)); + }else { + // 修改覆盖类型为已覆盖 + orderStockService.update(Wrappers.lambdaUpdate(TOrderStock.class).set(TOrderStock::getIsCover, 1).eq(TOrderStock::getGeneratorId, id)); + } + } + private int getRandomPayType(Integer size,BigDecimal count) { BigDecimal bigDecimal = new BigDecimal(size).multiply(count.divide(new BigDecimal(100))).setScale(0, RoundingMode.HALF_UP); return Integer.parseInt(bigDecimal.toString()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStockDataSetServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStockDataSetServiceImpl.java new file mode 100644 index 0000000..58ad69b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStockDataSetServiceImpl.java @@ -0,0 +1,27 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.domain.TShop; +import com.ruoyi.system.domain.TStockDataSet; +import com.ruoyi.system.mapper.TShopMapper; +import com.ruoyi.system.mapper.TStockDataSetMapper; +import com.ruoyi.system.query.TShopQuery; +import com.ruoyi.system.service.TShopService; +import com.ruoyi.system.service.TStockDataSetService; +import com.ruoyi.system.vo.TShopVO; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * <p> + * </p> + * + * @author xiaochen + * @since 2024-08-14 + */ +@Service +public class TStockDataSetServiceImpl extends ServiceImpl<TStockDataSetMapper, TStockDataSet> implements TStockDataSetService { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TDataGeneratorVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TDataGeneratorVO.java new file mode 100644 index 0000000..138c890 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TDataGeneratorVO.java @@ -0,0 +1,19 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.domain.TDataGenerator; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "数据生成VO") +public class TDataGeneratorVO extends TDataGenerator { + + @ApiModelProperty(value = "店铺名称") + private String shopName; + @ApiModelProperty(value = "营业额合计") + private BigDecimal totalRevenue; + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 6ab93b6..aa1a9b0 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -228,14 +228,15 @@ left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id WHERE u.del_flag = 0 - <if test="query.nickName != null and query.nickName != ''"> - AND u.nick_name LIKE concat('%',#{query.nickName},'%') + <if test="query.nickNameOrPhone != null and query.nickNameOrPhone != ''"> + AND (u.nick_name LIKE concat('%',#{query.nickNameOrPhone},'%') + OR u.phonenumber LIKE concat('%',#{query.nickNameOrPhone},'%')) </if> - <if test="query.roleId != null"> - AND r.role_id = #{query.roleId} - </if> - <if test="query.phonenumber != null and query.phonenumber != ''"> - AND u.phonenumber LIKE concat('%',#{query.phonenumber},'%') + <if test="query.roleIds != null and query.roleIds.size()>0"> + AND r.role_id in + <foreach collection="query.roleIds" separator="," item="id" open="(" close=")"> + #{id} + </foreach> </if> <if test="query.status != null and query.status != ''"> AND u.status = #{query.status} diff --git a/ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml index af72615..52fb97b 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TDataGeneratorMapper.xml @@ -18,11 +18,44 @@ <result column="disabled" property="disabled" /> <result column="createBy" property="createBy" /> <result column="updateBy" property="updateBy" /> + <result column="orderType" property="orderType" /> + <result column="weiXinPay" property="weiXinPay" /> + <result column="aliPay" property="aliPay" /> + <result column="cardPay" property="cardPay" /> + <result column="moneyPay" property="moneyPay" /> + <result column="otherPay" property="otherPay" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, userId, userName, shopId, startTime, endTime, minMoney, maxMoney, status, createTime, updateTime, disabled, createBy, updateBy + id, userId, userName, shopId, startTime, endTime, minMoney, maxMoney, status, createTime, updateTime, disabled, createBy, updateBy,orderType,weiXinPay, + aliPay,cardPay,moneyPay,otherPay </sql> + <select id="pageList" resultType="com.ruoyi.system.vo.TDataGeneratorVO"> + select tdg.id, tdg.userId, tdg.userName, tdg.shopId, tdg.startTime, tdg.endTime, tdg.minMoney, tdg.maxMoney, tdg.status, tdg.createTime, + tdg.updateTime, tdg.disabled, tdg.createBy, tdg.updateBy,tdg.orderType,tdg.weiXinPay,tdg.aliPay,tdg.cardPay,tdg.moneyPay,tdg.otherPay, + ts.shopName + from t_data_generator tdg + left join t_shop ts on tdg.shopId = ts.id + <where> + <if test="query.shopName != null and query.shopName != ''"> + and ts.shopName like concat('%', #{query.shopName}, '%') + </if> + <if test="query.userName != null and query.userName != ''"> + and tdg.shopName like concat('%', #{query.userName}, '%') + </if> + <if test="query.status != null"> + and tdg.status = #{query.status} + </if> + <if test="query.orderType != null"> + and tdg.orderType = #{query.orderType} + </if> + <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> + AND DATE_FORMAT(tdg.createTime, '%Y-%m-%d %H:%i:%s') BETWEEN #{query.startTime} + AND #{query.endTime} + </if> + AND tdg.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml index ffb3db1..394a3fb 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml @@ -18,11 +18,13 @@ <result column="updateBy" property="updateBy" /> <result column="orderNum" property="orderNum" /> <result column="status" property="status" /> + <result column="isCover" property="isCover" /> + <result column="shopId" property="shopId" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, boardId, mealType, mealPerson, orderMoney, payMoney, payType, createTime, updateTime, disabled, createBy, updateBy, orderNum, status + id, boardId, mealType, mealPerson, orderMoney, payMoney, payType, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,isCover,shopId </sql> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml index 561422f..6944e12 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml @@ -16,11 +16,12 @@ <result column="status" property="status" /> <result column="orderMoney" property="orderMoney" /> <result column="payMoney" property="payMoney" /> + <result column="shopId" property="shopId" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney + id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId </sql> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml index a286d7c..7b80f34 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TOrderStockMapper.xml @@ -7,17 +7,18 @@ <id column="id" property="id" /> <result column="stockNum" property="stockNum" /> <result column="stockTime" property="stockTime" /> - <result column="stockTotalPrice" property="stockTotalPrice" /> <result column="createTime" property="createTime" /> <result column="updateTime" property="updateTime" /> <result column="disabled" property="disabled" /> <result column="createBy" property="createBy" /> <result column="updateBy" property="updateBy" /> + <result column="isCover" property="isCover" /> + <result column="shopId" property="shopId" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, stockNum, stockTime, stockTotalPrice, createTime, updateTime, disabled, createBy, updateBy + id, stockNum, stockTime, createTime, updateTime, disabled, createBy, updateBy,isCover,shopId </sql> <select id="pageList" resultType="com.ruoyi.system.vo.TOrderStockVO"> SELECT <include refid="Base_Column_List"></include> diff --git a/ruoyi-system/src/main/resources/mapper/system/TStockDataSetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TStockDataSetMapper.xml new file mode 100644 index 0000000..722e993 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/TStockDataSetMapper.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.TStockDataSetMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TStockDataSet"> + <id column="id" property="id" /> + <result column="stockDate" property="stockDate" /> + <result column="lossRate" property="lossRate" /> + <result column="generatorId" property="generatorId" /> + <result column="shopId" property="shopId" /> + <result column="createTime" property="createTime" /> + <result column="updateTime" property="updateTime" /> + <result column="disabled" property="disabled" /> + <result column="createBy" property="createBy" /> + <result column="updateBy" property="updateBy" /> + </resultMap> + + <!-- 通用查询结果列 --> + <sql id="Base_Column_List"> + id,generatorId, stockDate, lossRate,shopId, createTime, updateTime, disabled, createBy, updateBy + </sql> + +</mapper> -- Gitblit v1.7.1