ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TShopController.java
@@ -72,11 +72,7 @@ user.setPhonenumber(dto.getAccount()); if (!userService.checkUserNameUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); return error("添加用户'" + user.getUserName() + "'失败,登录账号已存在"); } shopService.save(dto); // 添加账号 @@ -95,13 +91,10 @@ SysUser user = new SysUser(); user.setUserName(dto.getAccount()); user.setPhonenumber(dto.getAccount()); user.setUserId(dto.getUserId()); if (!userService.checkUserNameUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); } shopService.updateById(dto); userService.updateAccount(dto); ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -71,7 +71,7 @@ return AjaxResult.error("用户不存在!"); } if(sysUser.getRoleType() != 1){ return AjaxResult.error("商家无法登录平台系统!请访问商家平台"); return AjaxResult.error("商家账号无权限登录"); } @@ -128,6 +128,38 @@ } /** * 商家跳转登录 * * @param loginBody 登录信息 * @return 结果 */ @ApiOperation(value = "商家跳转登录",notes = "商家跳转登录") @PostMapping("/reLogin") public AjaxResult<Map<String,Object>> reLogin(@RequestBody LoginBody loginBody) { Map<String,Object> map = new HashMap<>(); loginBody.setPassword("123456"); // 生成令牌 LoginUser loginUser = loginService.reLogin(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid()); map.put(Constants.TOKEN, tokenService.createToken(loginUser)); List<SysRole> roles = loginUser.getUser().getRoles(); if(CollectionUtils.isEmpty(roles)){ return AjaxResult.error("请关联角色!"); } if(roles.get(0).getStatus() == 1){ return AjaxResult.error("该账号角色已被禁用!"); } List<SysMenu> menus = roleService.roleInfoFromUserId(loginUser.getUserId()); map.put("menus",menus); map.put("roleName",roles.get(0).getRoleName()); map.put("userInfo",loginUser); return AjaxResult.success(map); } /** * 账号密码登录 * * @param loginBody 登录信息 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -182,6 +182,7 @@ return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); } user.setPassword("123456"); user.setRePassword("123456"); user.setCreateBy(getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); userService.insertUser(user); @@ -247,7 +248,8 @@ // userService.checkUserDataScope(user.getUserId()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setUpdateBy(getUsername()); return AjaxResult.success(userService.resetPwd(user)); userService.resetPwd(user); return AjaxResult.success(); } /** ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
@@ -74,5 +74,5 @@ * 密码长度限制 */ public static final int PASSWORD_MIN_LENGTH = 5; public static final int PASSWORD_MAX_LENGTH = 20; public static final int PASSWORD_MAX_LENGTH = 40; } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -124,6 +124,11 @@ */ @ApiModelProperty(value = "禁用备注") private String disableRemark; /** * 隐藏的密码,用于跳转 */ @ApiModelProperty(value = "隐藏的密码,用于跳转") private String rePassword; @TableField(exist = false) private String roleName; ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -111,7 +111,7 @@ // 过滤请求 .authorizeRequests() // 对于登录login 注册register 验证码captchaImage 允许匿名访问 .antMatchers("/getPrivacyAgreement/{agreementType}","/applet/queryProtocolConfigByType","/applet/login","/login","/applet/queryProtocolConfigByType", "/register","/applet/getCode","/applet/loginCode","/applet/changepwd", "/captchaImage","/getCode","/loginCode","/operations/getBySingleNum/**", .antMatchers("/getPrivacyAgreement/{agreementType}","/applet/queryProtocolConfigByType","/applet/login","/reLogin","/platformLogin","/login","/applet/queryProtocolConfigByType", "/register","/applet/getCode","/applet/loginCode","/applet/changepwd", "/captchaImage","/getCode","/loginCode","/operations/getBySingleNum/**", "/user/getUserInfoByNumber/**").permitAll() // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -121,6 +121,60 @@ return loginUser; } public LoginUser reLogin(String username, String password, String code, String uuid) { // 验证码校验 validateCaptcha(username, code, uuid); // 登录前置校验 loginPreCheck(username, password); // 用户验证 Authentication authentication = null; // 用户验证 SysUser user = userService.selectUserByUserName(username); if (StringUtils.isNull(user)){ log.info("登录用户:{} 不存在.", username); throw new ServiceException(MessageUtils.message("user.not.exists")); } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { log.info("登录用户:{} 已被删除.", username); throw new ServiceException(MessageUtils.message("user.password.delete")); } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { log.info("登录用户:{} 已被停用.", username); throw new ServiceException(MessageUtils.message("user.blocked")); } try { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username+"_", password); AuthenticationContextHolder.setContext(authenticationToken); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); } catch (Exception e) { if (e instanceof BadCredentialsException) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); throw new UserPasswordNotMatchException(); } else { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); throw new ServiceException(e.getMessage()); } } finally { AuthenticationContextHolder.clearContext(); } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); loginUser.setNickName(user.getNickName()); loginUser.setRoleType(user.getRoleType()); loginUser.setObjectId(user.getObjectId()); recordLoginInfo(loginUser.getUserId()); // 生成token return loginUser; } /** * 登录验证 * ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java
@@ -78,12 +78,60 @@ clearLoginRecordCache(username); } } public void reValidate(SysUser user) { Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); String username = usernamePasswordAuthenticationToken.getName(); if(username.contains("_")){ username = username.split("_")[0]; } String password = usernamePasswordAuthenticationToken.getCredentials().toString(); Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); if (retryCount == null) { retryCount = 0; } if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); } if (!reMatches(user, password)) { retryCount = retryCount + 1; AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count", retryCount))); redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); throw new UserPasswordNotMatchException(); } else { clearLoginRecordCache(username); } } public boolean matches(SysUser user, String rawPassword) { return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); } public static void main(String[] args) { // $2a$10$qofXsM/ZKUMqvysvsWBAfOizecqUdAaXPFUYDVxaYYM0FJg6/mOpq String s = SecurityUtils.encryptPassword("111111"); System.err.println(s); boolean b = SecurityUtils.matchesPassword("111111", "$2a$10$Wx75W2oW23.tsSkvA21QyueQ59iwWwv2ns06Bxubje0ZwPe2wNOQ2"); System.err.println(b); } public boolean reMatches(SysUser user, String rawPassword) { return SecurityUtils.matchesPassword(rawPassword, user.getRePassword()); } public void clearLoginRecordCache(String loginName) { if (redisCache.hasKey(getCacheKey(loginName))) ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
@@ -37,7 +37,12 @@ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SysUser user = userService.selectUserByUserName(username); SysUser user; if(username.contains("_")){ user = userService.selectUserByUserName(username.split("_")[0]); }else { user = userService.selectUserByUserName(username); } if (StringUtils.isNull(user)) { log.info("登录用户:{} 不存在.", username); @@ -53,8 +58,11 @@ log.info("登录用户:{} 已被停用.", username); throw new ServiceException(MessageUtils.message("user.blocked")); } passwordService.validate(user); if(username.contains("_")){ passwordService.reValidate(user); }else { passwordService.validate(user); } return createLoginUser(user); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -651,6 +651,7 @@ sysUser.setRoleId(2L); } sysUser.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); sysUser.setRePassword(SecurityUtils.encryptPassword("123456")); this.insertUser(sysUser); return sysUser.getUserId(); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
@@ -113,7 +113,10 @@ List<OrderMealGeneratorCountDTO> orderMealGeneratorCountDTOS = dto.getOrderMealGeneratorCountDTOS(); List<TOrderMeal> orderMeals = new ArrayList<>(); for (OrderMealGeneratorCountDTO orderMealGeneratorCountDTO : orderMealGeneratorCountDTOS) { TBoard board = boards.stream().filter(e -> e.getId().equals(orderMealGeneratorCountDTO.getBoardId())).findFirst().get(); TBoard board = boards.stream().filter(e -> e.getId().equals(orderMealGeneratorCountDTO.getBoardId())).findFirst().orElse(null); if(Objects.isNull(board)){ throw new ServiceException("桌台用餐人数配置不存在"); } Integer orderCount = orderMealGeneratorCountDTO.getOrderCount(); // 查询当前桌的用餐人数 for (int i = 1; i <= orderCount; i++) { @@ -526,7 +529,7 @@ // BigDecimal money = orderSaleGoods.stream().filter(e -> collect.contains(e.getOrderId())) // .reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getGoodsCostPrice().multiply(new BigDecimal(y.getGoodsCount()))), BigDecimal::add); if(!CollectionUtils.isEmpty(orderSales)){ BigDecimal money = orderSales.stream().map(TOrderSale::getPayMoney).reduce(BigDecimal::add).get(); BigDecimal money = orderSales.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).map(TOrderSale::getPayMoney).reduce(BigDecimal::add).get(); tDataGeneratorVO.setTotalRevenue(money); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TFoundationPersonServiceImpl.java
@@ -34,6 +34,14 @@ @Override public void add(TFoundationPersonDTO dto) { long count1 = this.count(Wrappers.lambdaQuery(TFoundationPerson.class) .eq(TFoundationPerson::getShopId, dto.getShopId()) .eq(TFoundationPerson::getMealCount, dto.getMealCount())); if(count1>0){ throw new ServiceException("该店铺已存在该用餐人数设置"); } List<TFoundationConfig> foundationConfigs = dto.getFoundationConfigs(); long count = foundationConfigs.stream().map(TFoundationConfig::getTypeId).distinct().count(); if(foundationConfigs.size()!=count){ @@ -50,6 +58,14 @@ @Override public void edit(TFoundationPersonDTO dto) { long count1 = this.count(Wrappers.lambdaQuery(TFoundationPerson.class) .eq(TFoundationPerson::getShopId, dto.getShopId()) .eq(TFoundationPerson::getMealCount, dto.getMealCount()) .ne(TFoundationPerson::getId,dto.getId())); if(count1>0){ throw new ServiceException("该店铺已存在该用餐人数设置"); } List<TFoundationConfig> foundationConfigs = dto.getFoundationConfigs(); long count = foundationConfigs.stream().map(TFoundationConfig::getTypeId).distinct().count(); if(foundationConfigs.size()!=count){ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java
@@ -5,8 +5,10 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.OrderNumConstants; import com.ruoyi.common.enums.BoardEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CodeGenerateUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.*; import com.ruoyi.system.mapper.TOrderMealGoodsMapper; @@ -51,11 +53,17 @@ @Override public void add(TOrderMealDTO dto) { if(Objects.isNull(dto.getBoardId())){ throw new RuntimeException("餐桌不能为空"); } TOrderMeal orderMeal = this.getById(dto.getId()); orderMeal.setRemark(orderMeal.getRemark()+dto.getRemark()); if(Objects.isNull(orderMeal)){ throw new ServiceException("该订单不存在"); } if(StringUtils.isNotEmpty(dto.getRemark())){ if(StringUtils.isNotEmpty(orderMeal.getRemark())){ orderMeal.setRemark(orderMeal.getRemark()+dto.getRemark()); }else { orderMeal.setRemark(dto.getRemark()); } } orderMeal.setMealType(dto.getMealType()); orderMeal.setMealPerson(dto.getMealPerson()); orderMeal.setMealTime(dto.getMealTime()); @@ -63,44 +71,46 @@ // 查询菜品分类 List<TGoodsType> list1 = goodsTypeService.list(); // 查询餐桌 TBoard board = boardService.getById(dto.getBoardId()); TBoard board = boardService.getById(orderMeal.getBoardId()); if(!CollectionUtils.isEmpty(dto.getMealOrderGoodsDTOS())){ board.setStatus(BoardEnum.DURING_MEAL.getCode()); boardService.updateById(board); // 订单金额,订单编号 String orderNum = OrderNumConstants.MEAL+CodeGenerateUtils.generateVolumeSn(); dto.setOrderNum(orderNum); // String orderNum = OrderNumConstants.MEAL+CodeGenerateUtils.generateVolumeSn(); // dto.setOrderNum(orderNum); List<TOrderMealGoods> orderMealGoods = new ArrayList<>(); // 查询商品 List<Long> goodsIds = dto.getMealOrderGoodsDTOS().stream().map(MealOrderGoodsDTO::getGoodsId).collect(Collectors.toList()); List<MealOrderGoodsDTO> mealOrderGoodsDTOS = dto.getMealOrderGoodsDTOS(); List<Long> goodsIds = mealOrderGoodsDTOS.stream().map(MealOrderGoodsDTO::getGoodsId).collect(Collectors.toList()); List<TGoods> list = goodsService.list(Wrappers.lambdaQuery(TGoods.class) .in(TGoods::getId, goodsIds)); // 查询已存在的菜品 List<TOrderMealGoods> list2 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class) .in(TOrderMealGoods::getOrderId, dto.getId())); dto.getMealOrderGoodsDTOS().forEach(item -> { if(CollectionUtils.isEmpty(list2)){ list.stream().filter(item1 -> item1.getId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> { TOrderMealGoods orderMealGood = new TOrderMealGoods(); orderMealGood.setGoodsName(item1.getGoodsName()); orderMealGood.setGoodsNum(item1.getGoodsNum()); orderMealGood.setGoodsPicture(item1.getGoodsPicture()); orderMealGood.setGoodsCount(item.getGoodsCount()); orderMealGood.setGoodsSalePrice(item1.getSalePrice()); orderMealGood.setCostPrice(item1.getCostPrice()); orderMealGood.setTypeId(item1.getTypeId()); orderMealGood.setGoodsId(item1.getId()); orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(item1.getTypeId())).findFirst().get().getTypeName()); orderMealGoods.add(orderMealGood); }); }else { list2.stream().filter(item1 -> item1.getGoodsId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> { item1.setGoodsCount(item1.getGoodsCount()+item.getGoodsCount()); orderMealGoods.add(item1); }); for (MealOrderGoodsDTO mealOrderGoodsDTO : mealOrderGoodsDTOS) { TOrderMealGoods tOrderMealGoods = list2.stream().filter(item1 -> item1.getGoodsId().equals(mealOrderGoodsDTO.getGoodsId())).findFirst().orElse(null); if(Objects.nonNull(tOrderMealGoods)){ tOrderMealGoods.setGoodsCount(tOrderMealGoods.getGoodsCount()+mealOrderGoodsDTO.getGoodsCount()); orderMealGoods.add(tOrderMealGoods); continue; } }); BigDecimal orderMoney = BigDecimal.ZERO; for (TGoods goods : list) { if(goods.getId().equals(mealOrderGoodsDTO.getGoodsId())){ TOrderMealGoods orderMealGood = new TOrderMealGoods(); orderMealGood.setGoodsName(goods.getGoodsName()); orderMealGood.setGoodsNum(goods.getGoodsNum()); orderMealGood.setGoodsPicture(goods.getGoodsPicture()); orderMealGood.setGoodsCount(mealOrderGoodsDTO.getGoodsCount()); orderMealGood.setGoodsSalePrice(goods.getSalePrice()); orderMealGood.setCostPrice(goods.getCostPrice()); orderMealGood.setTypeId(goods.getTypeId()); orderMealGood.setGoodsId(goods.getId()); orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(goods.getTypeId())).findFirst().get().getTypeName()); orderMealGoods.add(orderMealGood); } } } BigDecimal orderMoney = orderMeal.getOrderMoney(); // 添加菜品 for (TOrderMealGoods orderMealGood : orderMealGoods) { orderMealGood.setOrderId(dto.getId()); @@ -168,33 +178,35 @@ @Override public PageInfo<TOrderMealVO> pageList(TOrderMealQuery query) { if(Objects.nonNull(query.getTimeType())){ LocalDateTime startTime = null; LocalDateTime endTime = null; switch (query.getTimeType()){ case 1: // 今日 startTime = DateUtils.getDayStart(LocalDateTime.now()); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 2: // 昨日 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); break; case 3: // 近7天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 4: // 近30天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){ if(Objects.nonNull(query.getTimeType())){ LocalDateTime startTime = null; LocalDateTime endTime = null; switch (query.getTimeType()){ case 1: // 今日 startTime = DateUtils.getDayStart(LocalDateTime.now()); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 2: // 昨日 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); break; case 3: // 近7天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 4: // 近30天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; } query.setStartTime(DateUtils.localDateTimeToDate(startTime)); query.setEndTime(DateUtils.localDateTimeToDate(endTime)); } query.setStartTime(DateUtils.localDateTimeToDate(startTime)); query.setEndTime(DateUtils.localDateTimeToDate(endTime)); } PageInfo<TOrderMealVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize()); List<TOrderMealVO> list = this.baseMapper.pageList(query,pageInfo); @@ -218,6 +230,36 @@ @Override public AmountSumVO amountSum(TOrderMealQuery query) { if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){ if(Objects.nonNull(query.getTimeType())){ LocalDateTime startTime = null; LocalDateTime endTime = null; switch (query.getTimeType()){ case 1: // 今日 startTime = DateUtils.getDayStart(LocalDateTime.now()); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 2: // 昨日 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); break; case 3: // 近7天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 4: // 近30天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; } query.setStartTime(DateUtils.localDateTimeToDate(startTime)); query.setEndTime(DateUtils.localDateTimeToDate(endTime)); } } return this.baseMapper.amountSum(query); } @@ -310,11 +352,11 @@ @Override public List<OrderTrendsVO> orderingTrends(TDataStatisticsQuery query) { List<OrderTrendsVO> orderTrendsVOS = this.baseMapper.orderingTrends(query); LocalDate localDate = LocalDate.now(); LocalDate localDate = DateUtils.stringToLocalDateTime(query.getEndTime()).toLocalDate(); for (int i = 0; i < 7; i++) { if(i == 0){ LocalDate finalLocalDate = localDate; OrderTrendsVO orderTrendsVO = orderTrendsVOS.stream().filter(e -> DateUtils.stringToLocalDate(e.getDayTime()).compareTo(finalLocalDate) == 0).findFirst().orElse(null); OrderTrendsVO orderTrendsVO = orderTrendsVOS.stream().filter(e -> finalLocalDate.compareTo(DateUtils.stringToLocalDate(e.getDayTime())) == 0).findFirst().orElse(null); if(Objects.isNull(orderTrendsVO)){ orderTrendsVO = new OrderTrendsVO(); orderTrendsVO.setDayTime(DateUtils.localDateToString(localDate)); @@ -324,7 +366,7 @@ }else { localDate = localDate.minusDays(1); LocalDate finalLocalDate1 = localDate; OrderTrendsVO orderTrendsVO = orderTrendsVOS.stream().filter(e -> DateUtils.stringToLocalDate(e.getDayTime()).compareTo(finalLocalDate1) == 0).findFirst().orElse(null); OrderTrendsVO orderTrendsVO = orderTrendsVOS.stream().filter(e -> finalLocalDate1.compareTo(DateUtils.stringToLocalDate(e.getDayTime())) == 0).findFirst().orElse(null); if(Objects.isNull(orderTrendsVO)){ orderTrendsVO = new OrderTrendsVO(); orderTrendsVO.setDayTime(DateUtils.localDateToString(finalLocalDate1)); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
@@ -156,6 +156,37 @@ @Override public Map<String, Object> getDataGeneratorStockDetail(TDataGeneratorStockQuery query) { if(Objects.isNull(query.getStartTime()) && Objects.isNull(query.getEndTime())){ // 判断时间 if(Objects.nonNull(query.getTimeType())){ LocalDateTime startTime = null; LocalDateTime endTime = null; switch (query.getTimeType()){ case 1: // 今日 startTime = DateUtils.getDayStart(LocalDateTime.now()); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 2: // 昨日 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); break; case 3: // 近7天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; case 4: // 近30天 startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); endTime = DateUtils.getDayEnd(LocalDateTime.now()); break; } query.setStartTime(DateUtils.localDateTimeToDate(startTime)); query.setEndTime(DateUtils.localDateTimeToDate(endTime)); } } return this.baseMapper.getDataGeneratorStockDetail(query); } ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -24,6 +24,7 @@ <result property="updateTime" column="update_time" /> <result property="remark" column="remark" /> <result property="disableRemark" column="disableRemark" /> <result property="rePassword" column="rePassword" /> <result property="roleType" column="roleType" /> <result property="objectId" column="objectId" /> <association property="dept" javaType="SysDept" resultMap="deptResult" /> @@ -51,7 +52,7 @@ <sql id="selectUserVo"> select u.user_id, u.dept_id, u.user_name , u.nick_name , u.email , u.avatar , u.phonenumber , u.password , u.sex , u.status , u.del_flag , u.login_ip , u.phonenumber , u.password , u.sex , u.status , u.del_flag , u.login_ip ,u.rePassword, u.login_date , u.create_by , u.create_time , u.remark ,u.roleType , u.objectId ,u.disableRemark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status ruoyi-system/src/main/resources/mapper/system/TOrderMealGoodsMapper.xml
@@ -22,7 +22,7 @@ id, goodsNum, goodsName, goodsSalePrice, goodsPicture, goodsCount, orderId,typeName,costPrice,typeId,goodsId </sql> <select id="costTotal" resultType="java.math.BigDecimal"> select sum(costPrice) from t_order_meal_goods select sum(costPrice*goodsCount) from t_order_meal_goods <where> <if test="ids != null and ids.size()>0"> AND orderId IN ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml
@@ -58,7 +58,7 @@ AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} AND tom.isCover = 1 </where> ORDER BY tom.mealTime DESC ORDER BY tom.mealTime,tom.createTime DESC </select> <select id="amountSum" resultType="com.ruoyi.system.vo.AmountSumVO"> select @@ -156,6 +156,7 @@ AND isCover = 1 AND status = 2 </where> GROUP BY DATE_FORMAT(mealTime, '%Y-%m-%d') </select> <select id="personnelStatistics" resultType="com.ruoyi.system.vo.PersonnelStatisticsVO"> select ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml
@@ -23,7 +23,8 @@ <select id="getListByTimeAndShopId" resultType="com.ruoyi.system.domain.TOrderStockGoods"> select t.id, t.orderId, t.goodsNum, t.goodsName, t.costPrice, t.salePrice, t.goodsPicture, t.stockCount,t.thisCostPrice,t.goodsId from t_order_stock_goods t where t.orderId in (select id from t_order_stock where DATE_FORMAT(orderTime, '%Y-%m-%d')) = #{orderTime} and shopId = #{shopId}) left join t_order_stock ts on t.orderId = ts.id where DATE_FORMAT(ts.stockTime, '%Y-%m-%d') = #{orderTime} and ts.shopId = #{shopId} </select> </mapper>