From 19df67e19f23cd2a04d1c7f355e1e656f4140af4 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期四, 17 四月 2025 20:04:14 +0800 Subject: [PATCH] 后台:首页统计、系统管理、广告管理、用户管理、商品分类管理 --- ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java | 4 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 13 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java | 16 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java | 13 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java | 5 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserCancellationLogMapper.xml | 3 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java | 2 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java | 29 - ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysDeptMapper.xml | 3 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java | 38 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ConfirmOrderDTO.java | 17 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 75 +++ ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsVO.java | 21 + ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java | 5 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml | 3 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/vo/ShopAnalysisVO.java | 38 ++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java | 4 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopWithdraw.java | 20 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java | 107 +++++ ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java | 6 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java | 14 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | 4 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java | 23 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java | 2 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java | 122 +++--- ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java | 6 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatisticsDetail.java | 52 -- ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 8 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/AddGoodsDTO.java | 4 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/NearbyShopVO.java | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java | 10 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderPageListVo.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 114 ++++++ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/dto/UserCancelQuery.java | 2 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/ShopAnalysisDTO.java | 22 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderStatisticsDetail.java | 29 - ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 5 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/PhoneController.java | 29 - ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java | 2 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml | 3 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatistics.java | 43 -- ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml | 1 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java | 2 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java | 2 ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java | 14 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java | 71 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdatePassword.java | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java | 7 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java | 2 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 11 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml | 7 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java | 5 56 files changed, 669 insertions(+), 393 deletions(-) diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java index 315e863..9cf4f89 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java @@ -7,6 +7,7 @@ import org.springframework.cloud.openfeign.FallbackFactory; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -59,6 +60,11 @@ public R<Long> getOrderCountByAppUserId(Long appUserId) { return R.fail("获取用户订单数量失败:" + cause.getMessage()); } + + @Override + public R<Map<String, Object>> getConsumeScoreAndPayAmount(Long userId) { + return R.fail("获取总消费积分和总支付金额失败:" + cause.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java index c00b984..a0c0ad6 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -87,4 +88,7 @@ */ @PostMapping("/order/getOrderCountByAppUserId") R<Long> getOrderCountByAppUserId(@RequestParam("id") Long appUserId); + + @GetMapping("/order/getOrderCountByAppUserId/") + R<Map<String ,Object>> getConsumeScoreAndPayAmount(@RequestParam("userId") Long userId); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java index e93fe60..c8ee996 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java @@ -37,11 +37,11 @@ - @ApiModelProperty(value = "3待使用4已完成5已取消6已退款7售后中8已评价") + @ApiModelProperty(value = "3待使用4已完成5已取消8已评价") @TableField("order_status") private Integer orderStatus; - @ApiModelProperty(value = "3待使用4已完成5已取消6已退款7售后中8已评价") + @ApiModelProperty(value = "3待使用4已完成5已取消8已评价") @TableField("old_order_status") private Integer oldOrderStatus; @@ -83,7 +83,7 @@ @ApiModelProperty(value = "积分抵扣金额") - @TableField("activity_amount") + @TableField("point_deduction_amount") private BigDecimal pointDeductionAmount; @@ -130,7 +130,7 @@ @ApiModelProperty(value = "添加时间") @TableField("create_time") private LocalDateTime createTime; - + @ApiModelProperty(value = "预计提货时间") @TableField("expected_delivery_time") private String expectedDeliveryTime; @@ -146,6 +146,6 @@ @ApiModelProperty("退款时间") @TableField("refund_time") private LocalDateTime refundTime; - + } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java index 84c100c..00e42f4 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java @@ -1,5 +1,6 @@ package com.ruoyi.order.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -58,4 +59,8 @@ @ApiModelProperty("核销码BASE64") private String writeOffCode; + @ApiModelProperty(value = "核销时间") + @TableField("end_time") + private LocalDateTime endTime; + } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopWithdraw.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopWithdraw.java index 718c8ac..df2c92b 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopWithdraw.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopWithdraw.java @@ -87,4 +87,24 @@ private String shopName; + @ApiModelProperty("报备商户号") + @TableField("tradeMerchantNo") + private String tradeMerchantNo; + + @ApiModelProperty("收款银行卡号") + @TableField("receiverAccountNoEnc") + private String receiverAccountNoEnc; + + @ApiModelProperty("收款银行卡持卡人名称") + @TableField("receiverNameEnc") + private String receiverNameEnc; + + @ApiModelProperty("账户类型(对私账户201,对公账户204)") + @TableField("receiverAccountType") + private Integer receiverAccountType; + + @ApiModelProperty("收款账户联行号") + @TableField("receiverBankChannelNo") + private String receiverBankChannelNo; + } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/ShopAnalysisDTO.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/ShopAnalysisDTO.java new file mode 100644 index 0000000..8181869 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/ShopAnalysisDTO.java @@ -0,0 +1,22 @@ +package com.ruoyi.other.api.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +public class ShopAnalysisDTO { + + private Integer shopId; + + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startTime; + + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endTime; +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java index 239b4ea..ec8f7b8 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java @@ -2,6 +2,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.Shop; +import com.ruoyi.other.api.dto.ShopAnalysisDTO; import com.ruoyi.other.api.feignClient.ShopClient; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; @@ -73,6 +74,11 @@ public R<Shop> getSuperiorServiceProvider(Long appUserId) { return R.fail("获取高级服务商失败"); } + + @Override + public R<Map<String, Object>> getIncomeAnalysis(ShopAnalysisDTO shopAnalysisDTO) { + return R.fail("获取店铺收益失败:" + cause.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java index e05fb0c..2801ea2 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java @@ -3,6 +3,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.Shop; +import com.ruoyi.other.api.dto.ShopAnalysisDTO; import com.ruoyi.other.api.factory.ShopClientFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -82,5 +83,6 @@ @GetMapping("/shop/getSuperiorServiceProvider") public R<Shop> getSuperiorServiceProvider(@RequestParam("appUserId") Long appUserId); - + @PostMapping("/shop/getIncomeAnalysis") + R<Map<String, Object>> getIncomeAnalysis(@RequestBody ShopAnalysisDTO shopAnalysisDTO); } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 6b53013..fefd3ef 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -64,7 +64,7 @@ userClient.updateSysUser(sysUser); return R.ok(map); } - @PostMapping("loginShop") + /*@PostMapping("loginShop") public R<?> loginShop(@RequestBody LoginBody form, HttpServletRequest request) { // 用户登录 LoginUser userInfo = sysLoginService.loginShop(form.getUsername(), form.getPassword(), request); @@ -85,7 +85,7 @@ userClient.updateSysUser(sysUser); return R.ok(map); } - + */ @DeleteMapping("logout") public R<?> logout(HttpServletRequest request) { String token = SecurityUtils.getToken(request); diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java index 262921f..3267876 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java @@ -16,10 +16,7 @@ * 用户密码 */ private String password; - /** - * 登录平台类型(1=平台,2=门店) - */ - private Integer roleType; + public String getUsername() { @@ -40,12 +37,5 @@ { this.password = password; } - - public Integer getRoleType() { - return roleType; - } - - public void setRoleType(Integer roleType) { - this.roleType = roleType; - } + } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java index 13b6d0b..f0e09d1 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -93,7 +93,7 @@ } if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员"); - throw new ServiceException("您所属门店已被冻结,请联系平台"); + throw new ServiceException("您的账号已被停用,请联系平台"); } if (user.getRoleType()==2){ Shop data = shopClient.getShopById(user.getObjectId()).getData(); diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java index d0ea2d0..29c1ca7 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java @@ -117,9 +117,10 @@ public static void main(String[] args) { - String s = encryptPassword("0192023a7bbd73250516f069df18b500"); + String s = encryptPassword("123456"); System.err.println(s); -// System.err.println(matchesPassword("c4ca4238a0b923820dcc509a6f75849b", "$2a$10$/7z/wiZ2ejTjD4GQuuyiSe1ptS8uoxrRAUlGCitiLEmpOO78cISeq")); + System.err.println(matchesPassword("123456", "$2a$10$QTL3AZW2YMtRu/jMEOzYmeeAB7c3aIq/4VyuvqtyEAARVYfhXyFRi")); + System.err.println(matchesPassword("123456", "$2a$10$Mg1l9OMJ/gFTQZmDql.21OVgGulPTQgze/cZWNe5plRpRDRjq79Ju")); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java index 26ac5e8..1c35f3e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java @@ -81,7 +81,7 @@ @PutMapping public AjaxResult edit(@Validated @RequestBody SysDept dept) { Long deptId = dept.getDeptId(); - deptService.checkDeptDataScope(deptId); + deptService.checkDeptDataScope(deptId);//检查是否有权限修改 if (!deptService.checkDeptNameUnique(dept)) { return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java index 6397d3e..95e1ac1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java @@ -94,9 +94,9 @@ } /** - * 重置密码 + * 重置密码 后台-登录 */ - @ApiOperation(value = "个人信息-修改密码") + @ApiOperation(value = "修改密码",notes = "后台-登录") @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PostMapping("/updatePwd") public AjaxResult updatePwd(@RequestBody UpdatePassword updatePassword) @@ -108,11 +108,9 @@ System.err.println(newPassword); // String username = SecurityUtils.getUsername(); SysUser user =null; - if (updatePassword.getType()==1){ - user = userService.selectUserByUserName(username); - }else{ - user = userService.selectUserShopByUserName(username); - } + + user = userService.selectUserByUserName(username); + if (Objects.isNull(user)) { return error("未查询到该账号"); @@ -126,7 +124,7 @@ { return error("新密码不能与旧密码相同"); } - if (updatePassword.getType()==1&&userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) { + if (userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) { // 更新缓存用户密码 // LoginUser loginUser = SecurityUtils.getLoginUser(); // SysUser sysUser = loginUser.getSysUser(); @@ -134,14 +132,7 @@ // tokenService.setLoginUser(loginUser); return success(); } - if (updatePassword.getType()==2&&userService.resetUserShopPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) { - // 更新缓存用户密码 -// LoginUser loginUser = SecurityUtils.getLoginUser(); -// SysUser sysUser = loginUser.getSysUser(); -// loginUser.getSysUser().setPassword(SecurityUtils.encryptPassword(newPassword)); -// tokenService.setLoginUser(loginUser); - return success(); - } + return error("修改密码异常,请联系管理员"); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java index 074a50d..70657cd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java @@ -127,12 +127,8 @@ role.setRoleName(dto.getRoleName()); LambdaQueryWrapper<SysRole> wrapper = Wrappers.lambdaQuery(SysRole.class) .eq(SysRole::getRoleName, dto.getRoleName()).eq(SysRole::getDelFlag, 0); - Long userid = tokenService.getLoginUser().getUserid(); - SysUser sysUser = sysUserService.getById(userid); - if(sysUser.getRoleType() == 2){ - wrapper.eq(SysRole::getShopId, sysUser.getObjectId()); - } - + + long count = roleService.count(wrapper); if (count > 0) { return AjaxResult.error("角色已存在,请重新输入"); @@ -146,10 +142,7 @@ role.setRemark(dto.getRemark()); role.setCreateBy(SecurityUtils.getUsername()); role.setCreateTime(new Date()); - - if(sysUser.getRoleType() == 2){ - role.setShopId(sysUser.getObjectId()); - } + roleService.insertRole(role); return AjaxResult.success(); } @@ -208,20 +201,8 @@ ArrayList<SysRoleMenu> sysRoleMenus = new ArrayList<>(); List<Long> menuIds = dto.getMenuIds(); // 移除原来的权限菜单 - if (menuIds.contains(1061L)) { - sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>() - .eq(SysRoleMenu::getRoleId, dto.getRoleId())); - } else { - sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>() - .eq(SysRoleMenu::getRoleId, dto.getRoleId()) - .ne(SysRoleMenu::getMenuId, 1061L) - .ne(SysRoleMenu::getMenuId, 1062L) - .ne(SysRoleMenu::getMenuId, 1065L) - .ne(SysRoleMenu::getMenuId, 1073L) - .ne(SysRoleMenu::getMenuId, 1161L) - .ne(SysRoleMenu::getMenuId, 1203L) - ); - } + sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, dto.getRoleId())); + for (Long menuId : menuIds) { SysRoleMenu sysRoleMenu = new SysRoleMenu(); sysRoleMenu.setMenuId(menuId); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java index 39470bc..ed7634f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java @@ -132,51 +132,7 @@ return error("登录账号重复"); } //门店员工添加数据,需要判断账号是否存在,共用同一个账号 - if(2 == sysUser1.getRoleType()){ - AppUser appUser = appUserClient.getAppUserByPhone1(user.getPhonenumber()).getData(); - if(null == appUser){ - return error("请先注册小程序账号"); - } - SysUser one2 = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, user.getPhonenumber()) - .eq(SysUser::getDelFlag, "0").eq(SysUser::getStatus, "0").eq(SysUser::getObjectId, sysUser1.getObjectId()) - .eq(SysUser::getRoleType, 2)); - if(null != one2){ - return error("登录账号重复"); - } - SysUser one = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, user.getPhonenumber()) - .eq(SysUser::getDelFlag, "0").eq(SysUser::getStatus, "0").eq(SysUser::getRoleType, 2)); - if(null == one){ - user.setCreateBy(SecurityUtils.getUsername()); - user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); - user.setRoleType(sysUser1.getRoleType()); - user.setObjectId(sysUser1.getObjectId()); - if(null != appUser){ - user.setAppUserId(appUser.getId()); - } - userService.insertUser(user); - one = user; - SysUserRole sysUserRole = new SysUserRole(); - sysUserRole.setRoleId(user.getRoleId()); - sysUserRole.setUserId(user.getUserId()); - userRoleService.insertSysUserRole(sysUserRole); - - } - - //添加门店员工关系数据 - UserShop one1 = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, one.getUserId()).eq(UserShop::getShopId, sysUser1.getObjectId())); - if(null == one1){ - UserShop userShop = new UserShop(); - userShop.setUserId(one.getUserId()); - userShop.setShopId(sysUser1.getObjectId()); - userShop.setRoleType(2); - userShop.setRoleId(user.getRoleId()); - userShop.setDeptId(user.getDeptId()); - userShop.setNickName(user.getNickName()); - userShop.setCreateTime(LocalDateTime.now()); - userShopService.save(userShop); - } - }else{ user.setCreateBy(SecurityUtils.getUsername()); user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); @@ -186,7 +142,7 @@ sysUserRole.setRoleId(user.getRoleId()); sysUserRole.setUserId(user.getUserId()); userRoleService.insertSysUserRole(sysUserRole); - } + return AjaxResult.success(); } @@ -220,17 +176,6 @@ ajax.put("posts", postService.selectPostAll()); if (StringUtils.isNotNull(userId)) { SysUser sysUser = userService.selectUserById(userId); - if(sysUser.getRoleType() == 2){ - Long userid = tokenService.getLoginUser().getUserid(); - SysUser sysUser1 = userService.selectUserById(userid); - UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, sysUser.getUserId()).eq(UserShop::getShopId, sysUser1.getObjectId())); - sysUser.setDeptId(one.getDeptId()); - sysUser.setNickName(one.getNickName()); - SysDept sysDept = deptService.selectDeptById(one.getDeptId()); - sysUser.setDept(sysDept); - sysUser.setRoleId(one.getRoleId()); - } - ajax.put("data", sysUser); ajax.put("postIds", postService.selectPostListByUserId(userId)); ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); @@ -288,17 +233,6 @@ user.setUpdateTime(new Date()); userService.updateUser(user); user = userService.getById(user.getUserId()); - //添加门店员工关系数据 - if(2 == user.getRoleType()){ - UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId()).eq(UserShop::getShopId, user.getObjectId())); - one.setUserId(user.getUserId()); - one.setShopId(user.getObjectId()); - one.setRoleType(one.getRoleType()); - one.setRoleId(user.getRoleId()); - one.setDeptId(user.getDeptId()); - one.setNickName(user.getNickName()); - userShopService.updateById(one); - } return success(); } @@ -396,7 +330,7 @@ return R.fail("用户名或密码错误"); } // 角色集合 - Set<String> roles = permissionService.getRolePermission(sysUser); + Set<String> roles = permissionService.getRolePermission(sysUser);//admin 或 其他权限 // 权限集合getRolePermission Set<String> permissions = permissionService.getMenuPermission(sysUser); LoginUser sysUserVo = new LoginUser(); @@ -476,6 +410,7 @@ userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); + //todo 双重加密,在登录时校验 修改密码时校验 user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); user.setUpdateBy(SecurityUtils.getUsername()); return toAjax(userService.resetPwd(user)); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java index ce244bc..b8042a4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java @@ -12,8 +12,6 @@ @ApiModelProperty(value = "角色名称", required = true) @NotBlank(message = "角色名称不能为空") private String roleName; - @ApiModelProperty(value = "站点id", required = true) - private List<Integer> siteIds; @ApiModelProperty(value = "备注") private String remark; @ApiModelProperty(value = "菜单id", required = true) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java index 3515054..19052b3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java @@ -13,8 +13,6 @@ @ApiModelProperty(value = "角色名称",required = true) @NotBlank(message = "角色名称不能为空") private String roleName; - @ApiModelProperty(value = "站点id", required = true) - private List<Integer> siteIds; @ApiModelProperty(value = "备注") private String remark; @ApiModelProperty(value = "菜单id", required = true) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdatePassword.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdatePassword.java index 04dcba3..2fc6f06 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdatePassword.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdatePassword.java @@ -13,6 +13,5 @@ private String newPassword; private String oldPassword; - // 1平台 2门店 - private Integer type; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index dd687f3..3a124c2 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -48,6 +48,8 @@ * @return 用户对象信息 */ SysUser selectUserByUserName(String userName); + + SysUser selectUserShopByUserName(String userName); /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 2b26388..5c7ae12 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -57,11 +57,6 @@ @Override @DataScope(deptAlias = "d") public List<SysDept> selectDeptList(SysDept dept) { - Long userid = tokenService.getLoginUser().getUserid(); - SysUser sysUser = sysUserService.getById(userid); - if(sysUser.getRoleType() == 2){ - dept.setShopId(sysUser.getObjectId()); - } return deptMapper.selectDeptList(dept); } @@ -190,10 +185,10 @@ @Override public boolean checkDeptNameUnique(SysDept dept) { - Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); - SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();//部门id + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());//查询该父类部门下是否有相同名字的部门 if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) - { + {//有相同部门名称,且部门id不相同,返回不唯一 return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -207,7 +202,7 @@ @Override public void checkDeptDataScope(Long deptId) { - if (!SysUser.isAdmin(SecurityUtils.getUserId())) + if (!SysUser.isAdmin(SecurityUtils.getUserId()))//超级管理员跳过验证 { SysDept dept = new SysDept(); dept.setDeptId(deptId); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java index 0a926ba..3e06f28 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java @@ -65,15 +65,15 @@ public Set<String> getMenuPermission(SysUser user) { Set<String> perms = new HashSet<String>(); - List<UserShop> userShop = userShopService.getUserShop(user.getUserId(), 1); + List<UserShop> userShop = userShopService.getUserShop(user.getUserId(), 1);//获取门店 // 管理员拥有所有权限 if (user.isAdmin()) { perms.add("*:*:*"); - }else if(user.getRoleType() == 2 && null != userShop && userShop.size() > 0){ + }/*else if(user.getRoleType() == 2 && null != userShop && userShop.size() > 0){//门店 List<SysMenu> list = menuService.getAllMenu(2); return list.stream().map(SysMenu::getPath).collect(Collectors.toSet()); - } + }*/ else { List<SysRole> roles = user.getRoles(); @@ -88,13 +88,14 @@ } } else - { - if(user.getRoleType() == 1){ + {//没有角色 + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + /*if(user.getRoleType() == 1){ perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); }else{ UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId()).eq(UserShop::getShopId, user.getObjectId())); perms.addAll(menuService.selectMenuPermsByRoleId(one.getRoleId())); - } + }*/ } } return perms; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index bb1227b..e81e645 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -94,22 +94,13 @@ @Override public Set<String> selectRolePermissionByUserId(SysUser user) { Set<String> permsSet = new HashSet<>(); - if(user.getRoleType() == 1){ + //平台 List<SysRole> perms = roleMapper.selectRolePermissionByUserId(user.getUserId()); for (SysRole perm : perms) { if (StringUtils.isNotNull(perm)) { permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); } } - }/*else{ - List<UserShop> list = userShopService.list(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId()) - .eq(UserShop::getShopId, user.getObjectId())); - for (UserShop userShop : list) { - if (StringUtils.isNotNull(userShop)) { - permsSet.add(userShop.getRoleId() + ""); - } - } - }*/ return permsSet; } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysDeptMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysDeptMapper.xml index aeeaa31..186c0ba 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysDeptMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysDeptMapper.xml @@ -46,9 +46,6 @@ <if test="shopId != null"> AND shop_id = #{shopId} </if> - <if test="shopId == null"> - AND shop_id is null - </if> <!-- 数据范围过滤 --> ${params.dataScope} order by d.parent_id, d.order_num diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml index f873d47..a5f143f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml @@ -105,7 +105,6 @@ <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult"> <include refid="selectUserVo"/> where u.user_name = #{userName} and u.del_flag = '0' - and u.role_type = 1 </select> <select id="selectUserShopByUserName" parameterType="String" resultMap="SysUserResult"> <include refid="selectUserVo"/> diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java index b005e8f..7786439 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java @@ -79,6 +79,8 @@ private OrderClient orderClient; @Resource private SysConfigClient sysConfigClient; + @Resource + private AppUserShopService appUserShopService; @Resource private UserCancellationLogService userCancellationLogService; @@ -310,24 +312,10 @@ public R<IPage<AppUser>> getAppuserPage(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, AppUser appUser){ - - Long userid = tokenService.getLoginUser().getUserid(); - SysUser sysUser = sysUserClient.getSysUser(userid).getData(); Integer shopId = null; Set<Long> userId = null; - if(sysUser.getRoleType() == 2){ - shopId = sysUser.getObjectId(); - userId = orderClient.getAppUserByShoppingShop(shopId).getData(); - } -// appUser.setExcludeStatus(3); IPage<AppUser> appuserPage = appUserService.getAppuserPage(pageNum, pageSize, appUser, shopId, userId); - for (AppUser record : appuserPage.getRecords()) { - Shop shop1 = shopClient.getServiceProvider(record.getId()).getData(); - if(null != shop1){ - record.setShopName(shop1.getName()); - record.setShopId(shop1.getId()); - } - } + return R.ok(appuserPage); } @@ -368,7 +356,7 @@ @GetMapping("/shop/getAppuserPage") - @ApiOperation(value = "用户列表", tags = {"门店后台"}) + @ApiOperation(value = "用户列表-在门店下过单的", tags = {"门店后台"}) public R<IPage<AppUser>> shopGetAppuserPage(@ApiParam("页码") @RequestParam Integer pageCurr, @ApiParam("每一页数据大小") Integer pageSize, AppUser appUser) { @@ -433,6 +421,7 @@ +/* @GetMapping("/detail") @ApiOperation(value = "用户列表-详情", tags = {"管理后台"}) @@ -453,20 +442,13 @@ } byId.setShopNames(shopName); } - //推广人 - /*if (byId.getInviteUserId() != null) { - AppUser appUser = appUserService.getById(byId.getInviteUserId()); - if(null != appUser){ - byId.setInviteUserName(appUser.getName()); - } - }*/ + //最后下单时间 R<Order> lastOrder = remoteOrderGoodsClient.getLastOrder(id); if (lastOrder.getData() != null) { byId.setLastOrderTime(lastOrder.getData().getCreateTime()); } - /*List<AppUser> list = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, id).list(); - byId.setBottomUsers(list);*/ + //消费总金额 if(null == shopId || 1 == sysUser.getRoleType()){ shopId = -1; @@ -484,6 +466,7 @@ } return R.ok(byId); } +*/ @@ -542,51 +525,76 @@ /** - * 用户统计 + * 工作台-顶部 */ - @GetMapping("/statistics") - @ApiOperation(value = "用户统计", tags = {"管理后台-首页统计-用户统计"}) + @GetMapping("/homeStatistics/statistics") + @ApiOperation(value = "统计", tags = {"后台-工作台-顶部"}) public R<UserStatistics> statistics() { - Long userId = tokenService.getLoginUser().getUserid(); - SysUser data = sysUserClient.getSysUser(userId).getData(); - QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>(); - if (data.getRoleType() == 2) { - Integer shopId = data.getObjectId(); - List<Order> orders = orderClient.getRedeemedOrdersByShop(shopId).getData(); - List<Long> userIds = orders.stream().map(Order::getAppUserId).collect(Collectors.toList()); - queryWrapper.in(!CollectionUtils.isEmpty(userIds), "id", userIds); // userIds 不为空时,查询 id 在 userIds 中 - } queryWrapper.eq("del_flag", 0); - queryWrapper.ne("status", 3); - List<AppUser> appUserList = appUserService.list(queryWrapper); + queryWrapper.ne("status", 3);//没有注销的 - Map<Integer, Long> vipIdCountMap = appUserList.stream() - .collect(Collectors.groupingBy(AppUser::getVipId, Collectors.counting())); + List<AppUser> appUserList = appUserService.list(queryWrapper); + long consumerUser = appUserList.stream() + .filter(user -> user.getLastShopTime() != null) + .count();//消费者总数 UserStatistics userStatistics = new UserStatistics(); - userStatistics.setTotalUser(appUserList.size()); - userStatistics.setConsumerUser(vipIdCountMap.getOrDefault(0, 0L).intValue() + - vipIdCountMap.getOrDefault(1, 0L).intValue() + - vipIdCountMap.getOrDefault(2, 0L).intValue() + - vipIdCountMap.getOrDefault(3, 0L).intValue()); - userStatistics.setCommonUser(vipIdCountMap.getOrDefault(1, 0L).intValue()); - userStatistics.setGoldUser(vipIdCountMap.getOrDefault(2, 0L).intValue()); - userStatistics.setDiamondUser(vipIdCountMap.getOrDefault(3, 0L).intValue()); - userStatistics.setEntrepreneurUser(vipIdCountMap.getOrDefault(4, 0L).intValue() + - vipIdCountMap.getOrDefault(5, 0L).intValue() + - vipIdCountMap.getOrDefault(6, 0L).intValue() + - vipIdCountMap.getOrDefault(7, 0L).intValue()); - userStatistics.setProxyUser(vipIdCountMap.getOrDefault(4, 0L).intValue()); - userStatistics.setAgentUser(vipIdCountMap.getOrDefault(5, 0L).intValue()); - userStatistics.setTotalAgentUser(vipIdCountMap.getOrDefault(6, 0L).intValue()); - userStatistics.setPartnerUser(vipIdCountMap.getOrDefault(7, 0L).intValue()); + userStatistics.setTotalUser(appUserList.size());//总用户数 + userStatistics.setConsumerUser((int) consumerUser);//消费过的用户 + //用户类型统计门店 long shopUserCount = appUserList.stream() .filter(appUser -> appUser.getUserType() == 2) .count(); userStatistics.setShopUser((int) shopUserCount); + //门店总数 + long shopNum = shopClient.getAllShop().getData().size(); + userStatistics.setShopNum((int) shopNum); + return R.ok(userStatistics); + } + + /** + * 工作台-用户分析 + */ + @GetMapping("/homeStatistics/userAnalysis") + @ApiOperation(value = "用户分析", tags = {"后台-工作台-用户分析"}) + public R<UserStatisticsDetail> userAnalysis(@ApiParam(value = "用户id") @RequestParam(value = "userId",required = false) Long userId) { + UserStatisticsDetail userStatistics = new UserStatisticsDetail(); + + QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>(); + // 条件构造 统计充值积分 + queryWrapper.select("SUM(recharge_point) as total_points"); + queryWrapper.eq("del_flag", 0);//未删除的 + queryWrapper.ne("status", 3);//未注销的 + if (userId != null) { + queryWrapper.eq("user_id", userId); + } + //统计充值积分 + Map<String, Object> result = appUserService.getMap(queryWrapper); + if (result == null || result.get("total_points") == null) { + userStatistics.setTotalScore(0L); + }else { + userStatistics.setTotalScore((Long) result.get("total_points")); + } + + //统计消费积分和现金支付数 + Map<String, Object> data = orderClient.getConsumeScoreAndPayAmount(userId).getData(); + + if (data == null || data.get("total_points") == null) { + userStatistics.setConsumeScore(0L); + }else { + userStatistics.setConsumeScore(Long.valueOf(data.get("total_points").toString()) ); + } + + if (data == null || data.get("payment_amounts") == null) { + userStatistics.setShopAmount(BigDecimal.ZERO); + }else { + userStatistics.setShopAmount(new BigDecimal(data.get("payment_amounts").toString())); + } + + return R.ok(userStatistics); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/dto/UserCancelQuery.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/dto/UserCancelQuery.java index 2eca393..face70b 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/dto/UserCancelQuery.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/dto/UserCancelQuery.java @@ -14,8 +14,6 @@ @ApiModelProperty("电话") private String userPhone; - - private Integer vipId; @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate localDate1; @JsonFormat(pattern = "yyyy-MM-dd") diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java index 06e3056..dcb326a 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java @@ -520,10 +520,15 @@ List<Shop> shopList = shopClient.getShopByUserId(userId).getData(); user.setShopStatus(0);//未拥有门店 if (shopList != null && !shopList.isEmpty()) { + user.setShopStatus(2);//门店都被冻结 for (Shop shop : shopList) { if (shop.getStatus()==1) { user.setShopStatus(1);//门店状态 } + if(null==user.getShopIds()){ + Set<Integer> integers = new HashSet<>(); + user.setShopIds(integers); + } user.getShopIds().add(shop.getId()); user.setShopIds(user.getShopIds()); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java index 253cbec..7a2b9dc 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java @@ -10,11 +10,15 @@ import com.ruoyi.account.vo.UserPointDetailVO; import com.ruoyi.account.vo.UserPointStatistics; import com.ruoyi.account.vo.UserPointVO; +import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.PhoneNumberValidator; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.enums.PointChangeType; +import com.ruoyi.system.api.domain.SysConfig; +import com.ruoyi.system.api.feignClient.SysConfigClient; import com.ruoyi.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -42,6 +46,8 @@ private TokenService tokenService; @Resource private UserPointService userPointService; + @Resource + private SysConfigClient sysConfigClient; @@ -58,6 +64,16 @@ userPointVO.setExpendPoint(appUser.getExchangePoint()); userPointVO.setTransferableInPoint(appUser.getTransferableInPoint()); userPointVO.setTransferableOutPoint(appUser.getTransferableOutPoint()); + R<SysConfig> info = sysConfigClient.getInfo(9L); + if (info == null || info.getData() == null) { + throw new RuntimeException("获取积分兑换比例配置失败"); + } + String configValue = info.getData().getConfigValue(); + if (StringUtils.isBlank(configValue)) { + throw new RuntimeException("积分兑换比例配置值为空"); + } + Boolean isTransferable = Boolean.valueOf(configValue.trim()); + userPointVO.setIsTransferable(isTransferable); return userPointVO; } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java index 744ea19..db71f30 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java @@ -28,4 +28,7 @@ @ApiModelProperty(value = "转增(转出)") private Integer transferableOutPoint; + + @ApiModelProperty(value = "是否开启转增积分功能") + private Boolean isTransferable; } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatistics.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatistics.java index 1c3052c..5abea29 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatistics.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatistics.java @@ -25,51 +25,14 @@ @ApiModelProperty(value = "消费者用户数") private Integer consumerUser; - /** - * 普通会员数 - */ - @ApiModelProperty(value = "普通会员数") - private Integer commonUser; /** - * 黄金会员数 + * 店铺总数 */ - @ApiModelProperty(value = "黄金会员数") - private Integer goldUser; + @ApiModelProperty(value = "店铺总数") + private Integer shopNum; - /** - * 钻石会员数 - */ - @ApiModelProperty(value = "钻石会员数") - private Integer diamondUser; - /** - * 创业者总数 - */ - @ApiModelProperty(value = "创业者总数") - private Integer entrepreneurUser; - /** - * 准代理数 - */ - @ApiModelProperty(value = "准代理数") - private Integer proxyUser; - /** - * 代理数 - */ - @ApiModelProperty(value = "代理数") - private Integer agentUser; - - /** - * 总代数 - */ - @ApiModelProperty(value = "总代数") - private Integer totalAgentUser; - - /** - * 合伙人数 - */ - @ApiModelProperty(value = "合伙人数") - private Integer partnerUser; } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatisticsDetail.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatisticsDetail.java index 359ade8..c6c9be6 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatisticsDetail.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserStatisticsDetail.java @@ -14,62 +14,14 @@ * 用户获得总积分 */ @ApiModelProperty("用户获得总积分") - private Integer totalScore; + private Long totalScore; /** * 消费积分总数 */ @ApiModelProperty("消费积分总数") - private Integer consumeScore; + private Long consumeScore; - /** - * 返佣积分总数 - */ - @ApiModelProperty("返佣积分总数") - private Integer rebateScore; - - /** - * 拉新人积分总数 - */ - @ApiModelProperty("拉新人积分总数") - private Integer inviteScore; - - /** - * 注册积分总数 - */ - @ApiModelProperty("注册积分总数") - private Integer registerScore; - - /** - * 做工积分总数 - */ - @ApiModelProperty("做工积分总数") - private Integer workScore; - - /** - * 技师业绩积分总数 - */ - @ApiModelProperty("技师业绩积分总数") - private Integer achievementScore; - - /** - * 用户获得分佣总金额 - */ - @ApiModelProperty("用户获得分佣总金额") - private BigDecimal totalRebate; - - /** - * 充值金额 - */ - @ApiModelProperty("充值金额") - private BigDecimal totalRecharge; - - /** - * 已提现金额 - */ - @ApiModelProperty("已提现金额") - private BigDecimal totalWithdraw; - /** * 消费总金额 */ diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml index 423f894..7a6a25f 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml +++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml @@ -54,9 +54,6 @@ FROM t_app_user ta <where> ta.del_flag = 0 and ta.status != 3 - <if test="appUser.excludeStatus != null"> - and ta.status != #{appUser.excludeStatus} - </if> <if test="appUser.name != null and appUser.name != ''"> and ta.`name` like CONCAT('%',#{appUser.name},'%') </if> @@ -66,9 +63,7 @@ <if test="null != appUser.status"> and ta.status = #{appUser.status} </if> - <if test="null != appUser.vipId"> - and ta.vip_id = #{appUser.vipId} - </if> + <if test="null != appUser.shopIds and appUser.shopIds.size() > 0"> and ta.shop_id in <foreach collection="appUser.shopIds" item="shopId" open="(" separator="," close=")"> diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserCancellationLogMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserCancellationLogMapper.xml index 791af61..2859a27 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserCancellationLogMapper.xml +++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserCancellationLogMapper.xml @@ -26,9 +26,6 @@ <if test="agentQuery.userPhone != null and agentQuery.userPhone != ''"> and t2.phone like concat('%',#{agentQuery.userPhone},'%') </if> - <if test="agentQuery.vipId != null"> - and t1.vip_id = #{agentQuery.vipId} - </if> <if test="agentQuery.localDate1 != null"> and DATE(t1.create_time) between #{agentQuery.localDate1} and #{agentQuery.localDate2} </if> diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java index 59a0cec..593366c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; @@ -15,6 +16,8 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.dto.ConfirmOrderDTO; + import com.ruoyi.order.enums.OrderStatus; import com.ruoyi.order.mapper.OrderMapper; import com.ruoyi.order.model.Order; @@ -22,10 +25,13 @@ import com.ruoyi.order.util.payment.model.RefundCallbackResult; import com.ruoyi.order.util.payment.model.UniPayCallbackResult; import com.ruoyi.order.util.vo.MapTrackKD100Vo; +import com.ruoyi.order.util.vo.ShopAnalysisVO; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.BaseSetting; import com.ruoyi.other.api.domain.Goods; +import com.ruoyi.other.api.dto.ShopAnalysisDTO; import com.ruoyi.other.api.feignClient.BaseSettingClient; +import com.ruoyi.other.api.feignClient.ShopClient; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; @@ -40,7 +46,10 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -70,13 +79,16 @@ @Resource private AppUserClient appUserClient; + @Resource + private ShopClient shopClient; + @ResponseBody - @GetMapping("/confirmOrder") + @PostMapping("/confirmOrder") @ApiOperation(value = "确定订单", tags = {"商城-订单-小程序"}) - public R<ConfirmOrderVo> confirmOrder(@ApiParam("商品id") Integer goodId,@ApiParam("支付类型(1-现金,2-积分)")Integer type) { - ConfirmOrderVo confirmOrderVo = orderService.confirmOrder(goodId,type); + public R<ConfirmOrderVo> confirmOrder(@RequestBody ConfirmOrderDTO confirmOrderDTO) { + ConfirmOrderVo confirmOrderVo = orderService.confirmOrder(confirmOrderDTO.getGoodId(),confirmOrderDTO.getType()); return R.ok(confirmOrderVo); } @@ -644,5 +656,101 @@ } + /** + * 工作台统计 + */ + @PostMapping("/homeStatistics/getShopAnalysis") + @ApiOperation(value = "店铺分析", tags = {"后台-工作台-店铺统计"}) + public R<ShopAnalysisVO> getShopAnalysis(@RequestBody ShopAnalysisDTO shopAnalysisDTO) { + ShopAnalysisVO shopAnalysisVO = new ShopAnalysisVO(); + if (shopAnalysisDTO.getStartTime() == null || shopAnalysisDTO.getEndTime() == null) { + LocalDate now = LocalDate.now(); + shopAnalysisDTO.setStartTime(now.minusDays(6)); // 7天前 + shopAnalysisDTO.setEndTime(now); + } + else if (shopAnalysisDTO.getStartTime().isAfter(shopAnalysisDTO.getEndTime())) { + return R.fail("开始时间不能大于结束时间"); + } + /* // 限制最大查询范围不超过3个月(可选) + else if (Duration.between(shopAnalysisDTO.getStartTime(), shopAnalysisDTO.getEndTime()).toDays() > 90) { + return R.fail("查询时间范围不能超过90天"); + }*/ + //订单统计 + QueryWrapper<Order> queryWrapper = new QueryWrapper<>(); + queryWrapper.select("count(*) as total","SUM(total_amount) as total_money"); + queryWrapper.eq("del_flag", 0); + queryWrapper.in("order_status", Arrays.asList(3,4,8));//待核销 已完成 已评价 + queryWrapper.eq("pay_status",2); + queryWrapper.ge("create_time", shopAnalysisDTO.getStartTime().atStartOfDay()); + queryWrapper.le("create_time", shopAnalysisDTO.getEndTime().atTime(LocalTime.MAX)); + + if (null!=shopAnalysisDTO.getShopId()){ + queryWrapper.eq("shop_id", shopAnalysisDTO.getShopId()); + } + Map<String, Object> result = orderService.getMap(queryWrapper); + if (result == null || result.get("total") == null) { + shopAnalysisVO.setTotal(0); + }else { + shopAnalysisVO.setTotal(Integer.valueOf(result.get("total").toString())); + } + + if (result == null || result.get("total_money") == null) { + shopAnalysisVO.setTotalMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setTotalMoney(new BigDecimal(result.get("total_money").toString())); + } + + + //收益分析 + Map<String, Object> shopResult =shopClient.getIncomeAnalysis(shopAnalysisDTO).getData(); + if (shopResult!=null){ + if (shopResult.get("balance")==null||shopResult.get("canWithdrawMoney")==null){ + shopAnalysisVO.setCanWithdrawMoney(BigDecimal.ZERO); + shopAnalysisVO.setFreezeMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setCanWithdrawMoney(new BigDecimal(shopResult.get("canWithdrawMoney").toString())); + shopAnalysisVO.setFreezeMoney(new BigDecimal(shopResult.get("balance").toString()).subtract(shopAnalysisVO.getCanWithdrawMoney())); + } + if (shopResult.get("withdrawMoney")==null){ + shopAnalysisVO.setWithdrawMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setWithdrawMoney(new BigDecimal(shopResult.get("withdrawMoney").toString())); + } + if (shopResult.get("withdrawAuditMoney")==null){ + shopAnalysisVO.setWithdrawAuditMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setWithdrawAuditMoney(new BigDecimal(shopResult.get("withdrawAuditMoney").toString())); + } + }else { + shopAnalysisVO.setCanWithdrawMoney(BigDecimal.ZERO); + shopAnalysisVO.setFreezeMoney(BigDecimal.ZERO); + shopAnalysisVO.setWithdrawMoney(BigDecimal.ZERO); + shopAnalysisVO.setWithdrawAuditMoney(BigDecimal.ZERO); + } + + + //折线图 + List<OrderStatisticsDetail> orderStatisticsDetailList=orderService.getOrderListGroupByDate(shopAnalysisDTO.getStartTime(), shopAnalysisDTO.getEndTime()); + shopAnalysisVO.setOrderStatisticsDetailList(orderStatisticsDetailList); + return R.ok(shopAnalysisVO); + } + + /** + * 统计用户总消费积分数和现金支付金额 + */ + @GetMapping("/getOrderCountByAppUserId/") + R<Map<String ,Object>> getConsumeScoreAndPayAmount(@RequestParam(value = "userId",required = false) Long userId){ + QueryWrapper<Order> queryWrapper = new QueryWrapper<>(); + // 条件构造 统计充值积分 + queryWrapper.select("SUM(point) as total_points","SUM(payment_amount) as payment_amounts"); + queryWrapper.eq("del_flag", 0); + queryWrapper.in("order_status", Arrays.asList(3,4,8));//待核销 已完成 已评价 + queryWrapper.eq("pay_status",2); + if (userId != null) { + queryWrapper.eq("user_id", userId); + } + return R.ok(orderService.getMap(queryWrapper)); + } + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ConfirmOrderDTO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ConfirmOrderDTO.java new file mode 100644 index 0000000..48e76fb --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ConfirmOrderDTO.java @@ -0,0 +1,17 @@ +package com.ruoyi.order.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class ConfirmOrderDTO { + @ApiModelProperty("Integer goodId") + @NotNull(message = "商品Id不能为空") + private Integer goodId; + @ApiModelProperty("支付类型(1-现金,2-积分)") + @NotNull(message = "商品类型不能为空") + private Integer type; + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java index e9bce9e..f5064af 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java @@ -5,9 +5,11 @@ import com.ruoyi.order.vo.*; import com.ruoyi.order.model.Order; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; /** * <p> @@ -56,4 +58,8 @@ Integer getShopSaleNumByShopIds(@Param("shopIds") List<Integer> shopIds, @Param("type") Integer type); List<OrderExport> getOrderExportList( @Param("item") OrderPageList order); + + + + List<OrderStatisticsDetail> getOrderListGroupByDate(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java index d176d94..30207e3 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java @@ -10,6 +10,8 @@ import com.ruoyi.order.vo.*; import org.springframework.web.multipart.MultipartFile; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; /** @@ -128,4 +130,9 @@ IPage<OrderPageListVo> getShopOrderList(String content, Integer status, Integer shopId, Integer pageNum, Integer pageSize); R shopCancelOrder(Long orderId); + + /** + * 后台-工作台,订单折线图 + */ + List<OrderStatisticsDetail> getOrderListGroupByDate(LocalDate startTime, LocalDate endTime); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 4b43a20..77a9a9f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -57,13 +57,12 @@ import java.math.RoundingMode; import java.text.SimpleDateFormat; -import java.time.LocalDateTime; +import java.time.*; -import java.time.ZoneId; -import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -188,6 +187,10 @@ } catch (Exception e) { e.printStackTrace(); throw new ServiceException("生成核销码失败"); + } + if(3!=order.getOrderStatus()){ + //不属于未使用的,应该有个核销\取消时间 + orderDetailVO.setEndTime(order.getEndTime()); } //该商品是否被用户评论 Long evaluateId = goodsEvaluateClient.getEvaluateIdByOrderId(order.getId()).getData(); @@ -419,6 +422,9 @@ //退款成功再回退积分 AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if (order.getPoint()>0) { + if(null==appUser.getCancelPoint()){ + appUser.setCancelPoint(0); + } //返回订单抵扣积分 Integer historicalPoint = appUser.getAvailablePoint(); Integer availablePoint = appUser.getAvailablePoint() + order.getPoint();//可用积分 @@ -684,11 +690,16 @@ //判断是否是积分支付 if (type == 1) {//现金 confirmOrderVo.setOrderMoney(confirmOrderVo.getCash()); + Integer availablePoint = appUser.getAvailablePoint();//用户可用积分 + + BigDecimal maxPointDeductionAmount = getCashByPoint(availablePoint);//最大可抵扣金额 + //计算积分抵扣的金额 将积分转为金额,去掉小数 - BigDecimal deduction=getCashByPoint(confirmOrderVo.getResidualPoint()); + //实际抵扣金额 + BigDecimal deduction= maxPointDeductionAmount.min(confirmOrderVo.getCash()); confirmOrderVo.setDeduction(deduction); }else {//积分 - confirmOrderVo.setOrderPoint(good.getIntegral()); + confirmOrderVo.setOrderPoint(confirmOrderVo.getPoint()); } //限购检查 //判断当前数量是否已经超出限购数量(需要计算已经购买的数量) @@ -844,6 +855,13 @@ } //判断积分是否为零,积分支付 if (0 != order.getPoint()){ + if (null==appUser.getAvailablePoint()){ + appUser.setAvailablePoint(0); + } + if (null==appUser.getExchangePoint()){ + appUser.setExchangePoint(0); + } + //积分支付 Integer historicalPoint = appUser.getAvailablePoint();//历史积分 Integer availablePoint = historicalPoint - orderPoint;//可用积分 @@ -896,6 +914,10 @@ //门店增加冻结资金 即增加余额, 冻结资金=余额-可用资金 Shop shop = shopClient.getShopById(order.getShopId()).getData(); + if (null==shop.getBalance()){ + shop.setBalance(BigDecimal.ZERO); + } + BigDecimal historicalBalance=shop.getBalance();//历史余额 BigDecimal variableAmount=goods.getSellingPrice();//变动金额 BigDecimal balance=shop.getBalance().add(goods.getSellingPrice());//变动后余额 @@ -1048,8 +1070,11 @@ queryWrapper.eq("shop_id", shopId); } // 添加订单状态条件 - if (status != null) { - queryWrapper.eq("order_status", status); + if (status != null&&status==4) { //4-已完成 8-已评价 + queryWrapper.in("order_status",Arrays.asList(4,8)); + } + if (status != null&&status!=4) {//3-待核销 5-已取消 + queryWrapper.eq("order_status",status); } // 模糊查询条件 if (StringUtils.isNotBlank(content)) { @@ -1079,12 +1104,47 @@ return R.fail("订单取消失败"); } order.setOrderStatus(5); + order.setEndTime(LocalDateTime.now()); R r = refundPayMoney(order); if (200 == r.getCode()) { this.updateById(order); } return r; } + + /** + * 后台-工作台-折线图 + * @param startTime + * @param endTime + * @return + */ + @Override + public List<OrderStatisticsDetail> getOrderListGroupByDate(LocalDate startTime, LocalDate endTime) { + // 查询数据库获取原始数据 + List<OrderStatisticsDetail> rawData = orderMapper.getOrderListGroupByDate( + startTime.atTime(0,0, 0), + endTime.atTime(23,59,59) + ); + + // 创建完整日期范围的映射 + Map<LocalDate, OrderStatisticsDetail> dateMap = rawData.stream() + .collect(Collectors.toMap( + OrderStatisticsDetail::getDateTime, + Function.identity() + )); + + // 生成完整日期序列并填充缺失数据 + List<OrderStatisticsDetail> completeList = new ArrayList<>(); + for (LocalDate date = startTime; !date.isAfter(endTime); date = date.plusDays(1)) { + if (dateMap.containsKey(date)) { + completeList.add(dateMap.get(date)); + } else { + completeList.add(new OrderStatisticsDetail(date, 0, BigDecimal.ZERO)); + } + } + return completeList; + } + private OrderPageListVo convertToOrderListVo(Order order) { OrderPageListVo vo = new OrderPageListVo(); @@ -1095,6 +1155,7 @@ if (user != null) { vo.setPhone(user.getPhone()); } + vo.setIdStr(order.getId().toString()); return vo; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/vo/ShopAnalysisVO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/vo/ShopAnalysisVO.java new file mode 100644 index 0000000..ac5b7be --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/vo/ShopAnalysisVO.java @@ -0,0 +1,38 @@ +package com.ruoyi.order.util.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.ruoyi.order.vo.OrderStatisticsDetail; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class ShopAnalysisVO { + /** + * 订单总数 + */ + @ApiModelProperty(value = "订单总数") + private Integer total; + /** + * 收益 + */ + @ApiModelProperty(value = "总收益") + private BigDecimal totalMoney; + + + @ApiModelProperty(value = "可提现金额") + private BigDecimal canWithdrawMoney; + @ApiModelProperty(value = "已提现金额") + private BigDecimal withdrawMoney; + @ApiModelProperty(value = "提现中金额") + private BigDecimal withdrawAuditMoney; + @ApiModelProperty(value = "冻结中金额") + private BigDecimal freezeMoney; + + + private List<OrderStatisticsDetail> orderStatisticsDetailList; + + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderPageListVo.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderPageListVo.java index a99dc36..764af81 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderPageListVo.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderPageListVo.java @@ -18,6 +18,8 @@ public class OrderPageListVo { @ApiModelProperty("订单id") private Long id; + @ApiModelProperty("订单idStr") + private String idStr; @ApiModelProperty("订单编号") @Excel(name = "订单编号") private String orderNumber; diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderStatisticsDetail.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderStatisticsDetail.java index 46b6a90..df370de 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderStatisticsDetail.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderStatisticsDetail.java @@ -1,39 +1,30 @@ package com.ruoyi.order.vo; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; @Data +@AllArgsConstructor +@NoArgsConstructor public class OrderStatisticsDetail { - private String date; - /** - * 服务订单数量 - */ - private Integer serviceTotal; - /** - * 单品订单数量 - */ - private Integer singleTotal; - + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate dateTime; /** * 订单总数量 */ private Integer total; - /** * 订单总金额 */ private BigDecimal totalMoney; - /** - * 服务订单金额 - */ - private BigDecimal serviceTotalMoney; - /** - * 单品订单金额 - */ - private BigDecimal singleTotalMoney; } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 9a95ea0..561d43f 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -226,4 +226,12 @@ </if> order by o.create_time desc </select> + <select id="getOrderListGroupByDate" resultType="com.ruoyi.order.vo.OrderStatisticsDetail"> + SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS `date_time`, COUNT(id) AS total, SUM(total_amount) AS total_money + FROM t_order WHERE del_flag = 0 AND order_status IN (3, 4, 8) AND pay_status = 2 + AND create_time BETWEEN #{startTime} AND #{endTime} + GROUP BY `date_time` ORDER BY `date_time` ASC + </select> + + </mapper> diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java index eb508a2..6f20118 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java @@ -43,7 +43,7 @@ @ResponseBody @GetMapping("/getAgreementByType/{type}") - @ApiOperation(value = "协议管理-详情", tags = {"管理后台"}) + @ApiOperation(value = "协议管理-详情", tags = {"后台"}) @ApiImplicitParams({ @ApiImplicitParam(value = "类型(1=用户协议,2=隐私协议,4=注销协议,5门店提现免责声明)", name = "type", required = true, dataType = "int"), }) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java index 28222d3..dc51f49 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java @@ -38,6 +38,8 @@ @Resource private ShopService shopService; + + @Resource private GoodsService goodsService; @@ -53,8 +55,10 @@ if (shop == null || shop.getStatus() ==2 || shop.getDelFlag()==1) { return R.ok(); } + one.setShopName(shop.getName()); one.setPhone(shop.getPhone()); + one.setAddress(shop.getAddress()); return R.ok(one); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/PhoneController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/PhoneController.java index 7379c22..1d868ed 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/PhoneController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/PhoneController.java @@ -57,16 +57,10 @@ @GetMapping("/getSysPhone") - @ApiOperation(value = "获取客服电话", tags = {"管理后台-客服电话", "门店后台-客服电话"}) + @ApiOperation(value = "获取客服电话", tags = {"后台-客服电话"}) public R<Phone> getSysPhone(){ - Long userId = tokenService.getLoginUser().getSysUser().getUserId(); - SysUser sysUser = sysUserClient.getSysUser(userId).getData(); LambdaQueryWrapper<Phone> wrapper = new LambdaQueryWrapper<>(); - if(sysUser.getRoleType() == 1){ - wrapper.eq(Phone::getType, 1); - }else{ - wrapper.eq(Phone::getType, 2).eq(Phone::getShopId, sysUser.getObjectId()); - } + wrapper.eq(Phone::getType, 1); Phone one = phoneService.getOne(wrapper); return R.ok(one); } @@ -74,12 +68,9 @@ @PostMapping("/savePhone") - @ApiOperation(value = "保存客服电话", tags = {"管理后台-客服电话", "门店后台-客服电话"}) + @ApiOperation(value = "保存客服电话", tags = {"管理后台-客服电话"}) public R savePhone(@RequestBody Phone phone){ - Long userId = tokenService.getLoginUser().getSysUser().getUserId(); - SysUser sysUser = sysUserClient.getSysUser(userId).getData(); //平台配置 - if(sysUser.getRoleType() == 1){ Phone one = phoneService.getOne(new LambdaQueryWrapper<Phone>().eq(Phone::getType, 1)); if(null != one){ one.setPhoneOne(phone.getPhoneOne()); @@ -89,19 +80,7 @@ phone.setType(1); phoneService.save(phone); } - }else{ - //门店配置 - Phone one = phoneService.getOne(new LambdaQueryWrapper<Phone>().eq(Phone::getType, 2).eq(Phone::getShopId, sysUser.getObjectId())); - if(null != one){ - one.setPhoneOne(phone.getPhoneOne()); - one.setPhoneTwo(phone.getPhoneTwo()); - phoneService.updateById(one); - }else{ - phone.setType(2); - phone.setShopId(sysUser.getObjectId()); - phoneService.save(phone); - } - } + return R.ok(); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java index 067bc89..0c8d8c1 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -22,6 +23,7 @@ import com.ruoyi.order.vo.OrderSaleNum; import com.ruoyi.order.vo.VerifiableShopVo; import com.ruoyi.other.api.domain.*; +import com.ruoyi.other.api.dto.ShopAnalysisDTO; import com.ruoyi.other.dto.AddGoodsDTO; import com.ruoyi.other.enums.PhoneType; import com.ruoyi.other.mapper.ShopMapper; @@ -773,6 +775,16 @@ } /** + * 编辑商品 + */ + @PostMapping("/editGoods") + @ApiOperation(value = "编辑商品", tags = {"门店后台-商品管理"}) + public R<Integer> editGoods(@RequestBody AddGoodsDTO addGoodsDTO) { + return R.ok( shopService.editGoodsByShop(addGoodsDTO)); + } + + + /** * 上、下架商品 */ @PostMapping("/status/{goodsId}") @@ -807,11 +819,10 @@ /** * 获取所有门店 - * @return */ @PostMapping("/getAllShop") public R<List<Shop>> getAllShop(){ - List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getStatus, 1)); + List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0)); return R.ok(list); } @@ -855,6 +866,7 @@ } +/* @GetMapping("/getShopStatistics") public R<Map<String, BigDecimal> > getShopStatistics(@RequestParam("shopId") Integer shopId){ LambdaQueryWrapper<Shop> queryWrapper = new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getStatus, 1); @@ -864,16 +876,34 @@ List<Shop> shopList = shopService.list(queryWrapper); BigDecimal serverGiveawayMoney = BigDecimal.ZERO; BigDecimal giveawayMoney = BigDecimal.ZERO; - /* for (Shop shop : shopList) { + */ +/* for (Shop shop : shopList) { serverGiveawayMoney = serverGiveawayMoney.add(shop.getServerGiveawayMoney()); giveawayMoney = giveawayMoney.add(shop.getGiveawayMoney().add(shop.getLowerLevelGiveawayMoney())); - }*/ + }*//* + Map<String, BigDecimal> map = new HashMap<>(); map.put("serverGiveawayMoney", serverGiveawayMoney); map.put("giveawayMoney", giveawayMoney); return R.ok(map); } +*/ + /** + * 获取店铺收益 后天-工作台-收益分析 + */ + @PostMapping("/getIncomeAnalysis") + R<Map<String, Object>> getIncomeAnalysis(@RequestBody ShopAnalysisDTO shopAnalysisDTO){ + QueryWrapper<Shop> queryWrapper=new QueryWrapper<>(); + //余额 已提现 提现中 可提现 + queryWrapper.select("sum(balance) as balance","sum(withdraw_money) as withdrawMoney" + ,"sum(withdraw_audit_money) as withdrawAuditMoney","sum(can_withdraw_money) as canWithdrawMoney"); + queryWrapper.eq("del_flag",0); + if (shopAnalysisDTO.getShopId() != null) { + queryWrapper.eq("id", shopAnalysisDTO.getShopId()); + } + return R.ok(shopService.getMap(queryWrapper)); + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java index fcbb2b7..ba52569 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java @@ -120,9 +120,15 @@ .eq(auditStatus!=null,ShopWithdraw::getAuditStatus,auditStatus) .orderByDesc(ShopWithdraw::getCreateTime) ); + //添加转账的银行卡号和账户姓名 + List<ShopWithdraw> records = page.getRecords(); + for (ShopWithdraw record : records) { + + } return R.ok(page); } +/* @GetMapping("/shop/info") @ApiOperation(value = "提现申请列表上方数据", notes = "提现申请列表", tags = {"门店后台"}) public R<Shop> shopCommissionStatisticsinfo(){ @@ -154,6 +160,7 @@ } return R.ok(byId); } +*/ @GetMapping("/shop/with") @ApiOperation(value = "提现申请", notes = "提现申请列表", tags = {"门店后台"}) @@ -196,6 +203,13 @@ shopWithdraw.setAuditStatus(0);//待审核 shopWithdraw.setStatus(1);//申请中 shopWithdraw.setCreateTime(LocalDateTime.now()); + + shopWithdraw.setTradeMerchantNo(shop.getTradeMerchantNo()); + shopWithdraw.setReceiverAccountNoEnc(shop.getReceiverAccountNoEnc()); + shopWithdraw.setReceiverNameEnc(shop.getReceiverNameEnc()); + shopWithdraw.setReceiverBankChannelNo(shop.getReceiverBankChannelNo()); + shopWithdraw.setReceiverAccountType(shop.getReceiverAccountType()); + shopWithdrawService.save(shopWithdraw); //扣除账户余额及添加变动明细 BigDecimal balance = shop.getBalance();//余额 diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/AddGoodsDTO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/AddGoodsDTO.java index f02e7fa..8cc7867 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/AddGoodsDTO.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/AddGoodsDTO.java @@ -13,6 +13,10 @@ @Data public class AddGoodsDTO { + @ApiModelProperty(value = "商品id") + private Integer goodId; + + @ApiModelProperty(value = "门店id") private Integer shopId; @ApiModelProperty(value = "名称") diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java index a800afb..ab445f8 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java @@ -58,4 +58,6 @@ GoodsVO goodsDetail(Long goodsId); Integer addGoodsByShop(AddGoodsDTO addGoodsDTO); + + Integer editGoodsByShop(AddGoodsDTO addGoodsDTO); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java index 12e5e1e..5035619 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java @@ -39,6 +39,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -232,6 +233,7 @@ //已售数量 Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData(); goodsVO.setSaleNum(integer); + return goodsVO; } @@ -241,6 +243,9 @@ public List<GoodsVO> getGoodsListByShopId(PageInfo<GoodsVO> pageInfo, Integer shopId) { //查询该门店商品 List<GoodsVO> goods = goodsMapper.selectListByShopId(pageInfo, shopId); + if (goods == null) { + return null; + } for (GoodsVO good : goods) { //价格 Price price = getPrice( good.getGoodsId()); diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java index bcd8074..ac388e0 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java @@ -32,6 +32,7 @@ import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -247,7 +248,13 @@ if(null == goods){ return null; } - for (GoodsVO good : goods) { + // 根据id去重 + List<GoodsVO> distinctGoods = goods.stream() + .collect(Collectors.collectingAndThen( + Collectors.toMap(GoodsVO::getGoodsId, Function.identity(), (existing, replacement) -> existing), + map -> new ArrayList<>(map.values()) + )); + for (GoodsVO good : distinctGoods) { //价格 Price price = getPrice( good.getGoodsId()); if(null != price){ @@ -261,7 +268,7 @@ Integer data = orderClient.getGoodsSaleNum(good.getGoodsId(), 1).getData(); good.setSaleNum(data); } - return goods; + return distinctGoods; } @Override @@ -280,10 +287,15 @@ goodsVO.setGoodsId(goods.getId()); goodsVO.setGoodsName(goods.getName()); + //商品活动前售价(编辑商品回显) + goodsVO.setEditPrice(goods.getSellingPrice()); + //限购数量(编辑商品回显) + goodsVO.setEditNum(goods.getPurchaseLimit()); + //计算所需价格和积分 Price price = getPrice( goods.getId()); if(null != price){ - //秒杀活动 + //在秒杀活动时间段内 goodsVO.setSellingPrice(price.getCash()); goodsVO.setIntegral(price.getPoint()); goodsVO.setStartTime(price.getStartTime()); @@ -301,9 +313,28 @@ //已售数量 Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData(); goodsVO.setSaleNum(integer); + //分类id + goodsVO.setGoodsCategoryId(goods.getGoodsCategoryId()); + + //一个商品只有一个秒杀活动 + SeckillActivityInfo seckillActivityInfo = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>() + .eq(SeckillActivityInfo::getGoodId, goodsId) + .eq(SeckillActivityInfo::getDelFlag, 0)); + //商品是否开启秒杀活动 + goodsVO.setIsSkillActivity(0); + if (seckillActivityInfo != null) { + goodsVO.setIsSkillActivity(1); + //活动限购数量 + goodsVO.setEditActivityNum(seckillActivityInfo.getMaxNum()); + GoodsSeckill one = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId())); + //有秒杀活动,查看秒杀价格 + goodsVO.setEditActivityPrice(one.getSellingPrice()); + } + return goodsVO; } + /** * 发布商品 门店后台-商品管理 @@ -353,6 +384,76 @@ return goods.getId(); } + + /** + * 编辑商品 + * @param addGoodsDTO + * @return + */ + + @Override + public Integer editGoodsByShop(AddGoodsDTO addGoodsDTO) { + if(addGoodsDTO.getPurchaseLimit()==null){ + addGoodsDTO.setPurchaseLimit(-1); + } + //先修改商品 + Goods goods = new Goods(); + BeanUtils.copyProperties(addGoodsDTO, goods); + goods.setStatus(GoodsStatus.DOWN.getCode());//下架状态 + goods.setId(addGoodsDTO.getGoodId()); + goods.setIntegral(getPoint(addGoodsDTO.getSellingPrice()));//积分 + goods.setDelFlag(0); + goods.setCreateTime(LocalDateTime.now()); + goodsService.updateById(goods);//添加商品 + + + //门店关系不变 + + //判断是否参加秒杀活动 + if (addGoodsDTO.getIsActivity()==1){//参加 + //一个商品只有一个秒杀活动 + SeckillActivityInfo seckillActivityInfo = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>() + .eq(SeckillActivityInfo::getGoodId, addGoodsDTO.getGoodId()) + .eq(SeckillActivityInfo::getDelFlag, 0)); + if (seckillActivityInfo != null) { + //删除原本活动 + goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId())); + //删除主表 + seckillActivityInfoService.removeById(seckillActivityInfo.getId()); + } + //新增 + //秒杀活动 + SeckillActivityInfo seckillActivityInfo1 = new SeckillActivityInfo(); + seckillActivityInfo1.setDelFlag(0); + seckillActivityInfo1.setCreateTime(LocalDateTime.now()); + seckillActivityInfo1.setGoodId(goods.getId()); + seckillActivityInfo1.setMaxNum(addGoodsDTO.getMaxNum()); + seckillActivityInfo1.setStartTime(addGoodsDTO.getStartTime()); + seckillActivityInfo1.setEndTime(addGoodsDTO.getEndTime()); + seckillActivityInfo1.setIsShelves(1);//默认上架 + seckillActivityInfoService.save(seckillActivityInfo1); + //秒杀活动价格 + GoodsSeckill goodsSeckill = new GoodsSeckill(); + goodsSeckill.setSellingPrice(addGoodsDTO.getActivityPrice()); + goodsSeckill.setIntegral(getPoint(addGoodsDTO.getActivityPrice())); + goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo1.getId()); + goodsSeckillService.save(goodsSeckill); + }else{ + //不参加秒杀活动,删除之前的活动 + //一个商品只有一个秒杀活动 + SeckillActivityInfo seckillActivityInfo = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>() + .eq(SeckillActivityInfo::getGoodId, addGoodsDTO.getGoodId()) + .eq(SeckillActivityInfo::getDelFlag, 0)); + if (seckillActivityInfo != null) { + //删除原本活动 + goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId())); + //删除主表 + seckillActivityInfoService.removeById(seckillActivityInfo.getId()); + } + } + return goods.getId(); + } + /** * 获取商品当前的价格,就是看当前商品是否在秒杀活动中 */ diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsVO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsVO.java index ed06888..138b151 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsVO.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsVO.java @@ -1,5 +1,6 @@ package com.ruoyi.other.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.other.api.domain.Shop; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -35,6 +36,8 @@ private String detailPicture; + @ApiModelProperty(value = "详情图,多个逗号分隔") + private Integer goodsCategoryId; @ApiModelProperty(value = "基础积分") private Integer integral; @@ -51,16 +54,34 @@ @ApiModelProperty(value = "门店id") private Integer shopId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "活动开始时间") private LocalDateTime startTime; @ApiModelProperty(value = "活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; @ApiModelProperty(value = "状态(1=下架,2=上架)") private Integer status; + + @ApiModelProperty(value = "商品售价(编辑商品)") + private BigDecimal editPrice; + @ApiModelProperty(value = "限购数量(编辑商品)") + private Integer editNum; + + @ApiModelProperty(value = "是否秒杀活动,0-否,1-是") + private Integer isSkillActivity; + + + @ApiModelProperty(value = "活动限购数量(编辑商品)") + private Integer editActivityNum; + + @ApiModelProperty(value = "活动价格(编辑商品)") + private BigDecimal editActivityPrice; + @ApiModelProperty(value = "门店") private Shop shop; diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/NearbyShopVO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/NearbyShopVO.java index a995004..94fb09a 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/NearbyShopVO.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/NearbyShopVO.java @@ -16,8 +16,10 @@ @ApiModelProperty(value = "门店名称") private String name; - @ApiModelProperty(value = "详细地址") + @ApiModelProperty(value = "商家地址") private String address; + @ApiModelProperty(value = "详细地址") + private String detailAddress; @ApiModelProperty(value = "距离") private Double distance; diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml index 266986b..435c70f 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml @@ -3,7 +3,7 @@ <mapper namespace="com.ruoyi.other.mapper.GoodsMapper"> <select id="selectListByShopId" resultType="com.ruoyi.other.vo.GoodsVO"> - SELECT + SELECT distinct tg.id as goodsId, tg.`name` as goodsName, tg.purchase_limit as purchaseLimit, @@ -16,7 +16,6 @@ tg.sort FROM t_goods tg where tg.del_flag = 0 and tg.status = 2 and tg.id in (select goods_id from t_goods_shop where shop_id = #{shopId}) - and tg.type = 2 ORDER BY ifnull(tg.sort, -1) DESC </select> <select id="selectManageGoodsList" resultType="com.ruoyi.other.api.domain.Goods"> diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml index bd0d145..40daa7a 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml @@ -32,9 +32,6 @@ ts.latitude, ts.status, ts.phone, - ts.province, - ts.city, - ts.district, (select ROUND(AVG(score), 1) from t_shop_score where shop_id = ts.id) as score FROM t_shop ts -- Gitblit v1.7.1