a.json
@@ -1,26 +1,6 @@ { "appointStore": 2, "cashPayment": 1, "commodityAuthority": "-1", "delFlag": 0, "detail": "<p>124</p>", "detailPicture": "http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/ce9f63be73a64fd29449fcd1aae6ed8c.png", "distributionMode": "1", "goodsCategoryId": 21, "homePagePicture": "http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/9655a4f62a784daa8bd46b8881020183.png", "id": 71, "idStr": "71", "introduction": "1111", "name": "面部玫瑰精油", "operatingCost": 20.00, "originalPrice": 2.00, "pageCurr": 1, "pageSize": 10, "pointPayment": 0, "purchaseLimit": -1, "saleNum": 0, "sellingPrice": 15.00, "shopCost": 20.00, "status": 2, "type": 2 "address": "四川省成都市武侯区锦辉西二街天府新谷9号楼二单元1005A", "days": 1, "name": "张三", "phone": "19912351325" } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/AppUser.java
@@ -336,6 +336,9 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime lastOrderTime; @TableField(exist = false) private Set<Long> userIds; public String getIdStr(){ return String.valueOf(id); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopPointCopy.java
@@ -117,4 +117,5 @@ private Integer pageSize; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java
@@ -44,6 +44,11 @@ } @Override public R<Set<Long>> getManagerByManagerName(String managerName) { return R.fail("根据门店管理员名称获取门店id失败:" + cause.getMessage()); } @Override public R<List<ShopBalanceStatement>> getShopBalanceStatementList(ShopBalanceStatement shopBalanceStatement) { return R.fail(); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
@@ -50,6 +50,9 @@ @PostMapping("/shop/getShopIdByName") R<Set<Integer>> getShopIdByName(@RequestParam("shopName") String shopName); @PostMapping("/shop/getManagerByManagerName") R<Set<Long>> getManagerByManagerName(@RequestParam("managerName") String managerName); @PostMapping("/shop-balance-statement/getList") R<List<ShopBalanceStatement>> getShopBalanceStatementList(@RequestBody ShopBalanceStatement shopBalanceStatement); ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.controller; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -31,6 +32,7 @@ import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -50,6 +52,7 @@ @RestController @RequestMapping("/user") @Api(tags = "用户信息") @Slf4j public class SysUserController extends BaseController { @Resource private ISysUserService userService; @@ -130,7 +133,8 @@ if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("手机号已开通账号"); } if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { if (StringUtils.isNotEmpty(user.getNickName()) && !userService.checkNickNameUnique(user)) { return error("登录账号重复"); } //门店员工添加数据,需要判断账号是否存在,共用同一个账号 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -112,18 +112,19 @@ /** * 校验用户名称是否唯一 * * @param userName 用户名称 * @return 结果 */ SysUser checkUserNameUnique(String userName); SysUser checkUserNameUnique(SysUser user); SysUser checkNickNameUnique(SysUser sysUser); /** * 校验手机号码是否唯一 * * @param phonenumber 手机号码 * @return 结果 */ SysUser checkPhoneUnique(String phonenumber); SysUser checkPhoneUnique(SysUser sysUser); ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -81,6 +81,8 @@ */ boolean checkUserNameUnique(SysUser user); boolean checkNickNameUnique(SysUser user); /** * 校验手机号码是否唯一 * ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.service.impl; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.AppUserClient; @@ -192,13 +193,23 @@ @Override public boolean checkUserNameUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkUserNameUnique(user.getUserName()); SysUser info = userMapper.checkUserNameUnique(user); if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } @Override public boolean checkNickNameUnique(SysUser user) { SysUser info = userMapper.checkNickNameUnique(user); System.err.println("aaaaa:"+(JSON.toJSONString(info))); if (StringUtils.isNotNull(info) ) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * 校验手机号码是否唯一 * @@ -208,7 +219,7 @@ @Override public boolean checkPhoneUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); SysUser info = userMapper.checkPhoneUnique(user); if (StringUtils.isNotNull(info)) { return UserConstants.NOT_UNIQUE; } ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml
@@ -196,8 +196,12 @@ </where> ORDER BY create_time DESC </select> <select id="checkNickNameUnique" resultMap="SysUserResult"> select user_id, user_name from sys_user where nick_name = #{nickName} and del_flag = '0' limit 1 </select> <insert id="insertUser" parameterType="com.ruoyi.system.api.domain.SysUser" useGeneratedKeys="true" keyProperty="userId"> <insert id="insertUser" parameterType="com.ruoyi.system.api.domain.SysUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( <if test="userId != null and userId != 0">user_id,</if> <if test="deptId != null and deptId != 0">dept_id,</if> ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -1,6 +1,8 @@ package com.ruoyi.account.controller; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -53,6 +55,8 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import static com.ruoyi.common.core.constant.SecurityConstants.USER_APPLET_KEY; /** * <p> @@ -824,17 +828,17 @@ } private void loginout(Long userId) { // 获取所有符合模式的缓存键 Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); if (!CollectionUtils.isEmpty(keys)) { for (String key : keys) { LoginUser user = redisService.getCacheObject(key); if (user == null || user.getUserid() == null) { continue; } if (user.getUserid().equals(userId)) { redisService.deleteObject(key); break; } if (CollectionUtils.isEmpty(keys)) { return; // 如果没有匹配的键,直接返回 } // 遍历所有键并删除与指定用户ID相关的登录信息 for (String key : keys) { LoginUser user = redisService.getCacheObject(key); if (user != null && userId.equals(user.getUserid())) { redisService.deleteObject(key); } } } @@ -1077,6 +1081,13 @@ userId = orderClient.getAppUserByShoppingShop(shopId).getData(); } UserStatistics userStatistics = appUserMapper.getUserStatistics(shopId, userId); List<Shop> shopList = shopClient.getAllShop().getData(); if (CollectionUtil.isNotEmpty(shopList)){ long count = shopList.stream().map(Shop::getAppUserId).distinct().count(); userStatistics.setShopUser((int) count); }else { userStatistics.setShopUser(0); } return R.ok(userStatistics); } ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
@@ -54,9 +54,11 @@ FROM t_app_user ta <where> ta.del_flag = 0 and ta.status != 3 <if test="null != appUser.name and '' != appUser.name"> <if test="appUser.name != null and appUser.name != ''"> and ta.`name` like CONCAT('%',#{appUser.name},'%') </if> <if test="null != appUser.phone and '' != appUser.phone"> and ta.phone like CONCAT('%',#{appUser.phone},'%') </if> @@ -72,12 +74,13 @@ #{shopId} </foreach> </if> <if test="null != shopId"> <if test="null != shopId and userId !=null and userId.size > 0"> and ta.shop_id = #{shopId} or ta.id in <foreach collection="userId" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </if> </where> order by ta.is_danger desc , ta.create_time desc @@ -116,7 +119,6 @@ <select id="getUserStatistics" resultType="com.ruoyi.account.vo.UserStatistics"> SELECT COUNT(*) AS totalUser, SUM(CASE WHEN tau.user_type = 2 THEN 1 ELSE 0 END) AS shopUser, SUM(CASE WHEN tau.vip_id <![CDATA[<]]> 4 THEN 1 ELSE 0 END) AS consumerUser, SUM(CASE WHEN tau.vip_id = 1 THEN 1 ELSE 0 END) AS commonUser, SUM(CASE WHEN tau.vip_id = 2 THEN 1 ELSE 0 END) AS goldUser, @@ -131,7 +133,7 @@ <where> <if test="null != shopId"> tau.shop_id = #{shopId} <if test="null != userId"> <if test="null != userId and userId.size>0"> or tau.id in <foreach collection="userId" item="item" index="index" open="(" separator="," close=")"> #{item} @@ -139,7 +141,6 @@ </if> </if> and tau.del_flag = 0 and tau.`status` !=3 </where> </select> <select id="getUserStatisticsDetail" resultType="com.ruoyi.account.vo.UserStatisticsDetail"> @@ -158,7 +159,10 @@ t_app_user tau <where> <if test="null != shopId"> tau.shop_id = #{shopId} or tau.shop_id = #{shopId} </if> <if test="null != shopId and null != userId and userId.size() > 0"> or </if> <if test="null != userId and userId.size() > 0"> tau.id in ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -557,7 +557,8 @@ if (StringUtils.isNotEmpty(goodJson) && !"NULL".equals(goodJson)) { Goods goods = JSONObject.parseObject(goodJson, Goods.class); orderExport.setGoodsName(goods.getName()); orderExport.setCostPrice(goods.getShopCost().add(goods.getOperatingCost())); orderExport.setCompanyCostPrice(goods.getOperatingCost()); orderExport.setSupplierCostPrice(goods.getShopCost()); } String expressJson = orderExport.getExpressJson(); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -467,7 +467,7 @@ // appUserClient.vipUpgrade(bdShopAppUser.getId()); } if(shopLavePoint > 0){ if(fws_point > 0){ ShopPointCopy shopPointCopy = new ShopPointCopy(); shopPointCopy.setShopId(shop1.getId()); shopPointCopy.setType(2); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -464,49 +464,7 @@ return r; } /** * 确认发货操作 * * @return */ @Override public R confirmDelivery(ConfirmDelivery confirmDelivery) { Order order = this.getById(confirmDelivery.getOrderId()); if (1 == order.getPayStatus()) { return R.fail("订单还未完成支付"); } if (1 == order.getOrderType() || null == order.getAddressJson()) { return R.fail("该订单不支付快递配送"); } if (1 != order.getOrderStatus()) { return R.fail("无效的操作"); } //添加快递号和修改订单状态 order.setExpressJson(confirmDelivery.getCode()); order.setDeliverProvince(confirmDelivery.getDeliverProvince()); order.setDeliverProvinceCode(confirmDelivery.getDeliverProvinceCode()); order.setDeliverCity(confirmDelivery.getDeliverCity()); order.setDeliverCityCode(confirmDelivery.getDeliverCityCode()); order.setDeliverDistrict(confirmDelivery.getDeliverDistrict()); order.setDeliverDistrictCode(confirmDelivery.getDeliverDistrictCode()); order.setOrderStatus(2); //添加查询快递信息队列 //一小时后定时查询快递信息 SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); Integer waitTime = jsonObject.getInteger("waitTime"); redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC)); JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode()); String com = jsonObject1.getString("com"); String num = jsonObject1.getString("num"); UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, order.getDeliverProvince() + order.getDeliverCity(), userAddress.getProvince() + userAddress.getCity()); order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo)); this.updateById(order); return R.ok(); } /** @@ -1002,11 +960,15 @@ } } @SneakyThrows @Override @Transactional(rollbackFor = Exception.class) public void importExpress(String url) { URL url1 = new URL(url); URL url1 = null; try { url1 = new URL(url); } catch (MalformedURLException e) { throw new RuntimeException(e); } try (InputStream fileInputStream = url1.openStream()) { Workbook workbook = new XSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet @@ -1070,7 +1032,10 @@ confirmDelivery.setDeliverProvinceCode(regionBiCode.getData().getCode()); confirmDelivery.setDeliverCity(regionBiCode1.getData().getName()); confirmDelivery.setDeliverCityCode(regionBiCode1.getData().getCode()); confirmDelivery(confirmDelivery); R r = confirmDelivery(confirmDelivery); if (R.isError(r)) { throw new ServiceException(r.getMsg(), 500); } } } catch (IOException e) { @@ -1081,6 +1046,50 @@ } /** * 确认发货操作 * * @return */ @Override public R confirmDelivery(ConfirmDelivery confirmDelivery) { Order order = this.getById(confirmDelivery.getOrderId()); if (1 == order.getPayStatus()) { return R.fail("订单还未完成支付"); } if (1 == order.getOrderType() || null == order.getAddressJson()) { return R.fail("该订单不支付快递配送"); } if (1 != order.getOrderStatus()) { return R.fail("无效的操作"); } //添加快递号和修改订单状态 order.setExpressJson(confirmDelivery.getCode()); order.setDeliverProvince(confirmDelivery.getDeliverProvince()); order.setDeliverProvinceCode(confirmDelivery.getDeliverProvinceCode()); order.setDeliverCity(confirmDelivery.getDeliverCity()); order.setDeliverCityCode(confirmDelivery.getDeliverCityCode()); order.setDeliverDistrict(confirmDelivery.getDeliverDistrict()); order.setDeliverDistrictCode(confirmDelivery.getDeliverDistrictCode()); order.setOrderStatus(2); //添加查询快递信息队列 //一小时后定时查询快递信息 SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); Integer waitTime = jsonObject.getInteger("waitTime"); redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC)); JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode()); String com = jsonObject1.getString("com"); String num = jsonObject1.getString("num"); UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, order.getDeliverProvince() + order.getDeliverCity(), userAddress.getProvince() + userAddress.getCity()); order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo)); this.updateById(order); return R.ok(); } public static void importExpress2(String filePath) throws MalformedURLException { // 从网络地址读取 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java
@@ -61,8 +61,14 @@ /** * 成本价 */ @Excel(name = "成本价") private BigDecimal costPrice; @Excel(name = "公司运营成本") private BigDecimal companyCostPrice; /** * 成本价 */ @Excel(name = "门店、供应商成本") private BigDecimal supplierCostPrice; /** * 支付金额 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -69,7 +69,7 @@ deliver_province_code, deliver_city, deliver_city_code from t_order where del_flag = 0 and pay_status = 2 from t_order where del_flag = 0 <if test="null != item.code and '' != item.code"> and order_number like CONCAT('%', #{item.code}, '%') </if> @@ -104,15 +104,14 @@ SUM( CASE WHEN tor.order_status!=5 THEN 1 ELSE 0 END ) as total, SUM( CASE WHEN tor.order_type = 1 and tor.order_status!=5 THEN 1 ELSE 0 END ) as serviceTotal, SUM( CASE WHEN tor.order_type = 2 and tor.order_status!=5 THEN 1 ELSE 0 END ) as singleTotal, SUM( tor.total_amount ) as totalMoney, SUM( CASE WHEN tor.order_status!=5 THEN tor.total_amount ELSE 0 END ) as totalMoney, SUM( CASE WHEN tor.order_type = 1 and tor.order_status!=5 THEN tor.total_amount ELSE 0 END ) as serviceTotalMoney, SUM( CASE WHEN tor.order_type = 2 and tor.order_status!=5 THEN tor.total_amount ELSE 0 END ) as singleTotalMoney FROM t_order tor where 1 = 1 t_order tor where 1 = 1 AND tor.del_flag = 0 <if test="null != shopId"> and tor.shop_id = #{shopId} </if> and tor.order_status!=5 </select> ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -678,10 +678,19 @@ @PostMapping("/getShopIdByName") public R<Set<Integer>> getShopIdByName(@RequestParam("shopName") String shopName){ List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>() .like(Shop::getName, shopName)); .like(Shop::getName, shopName) .eq(Shop::getDelFlag, 0)); return R.ok(list.stream().map(Shop::getId).collect(Collectors.toSet())); } @PostMapping("/getManagerByManagerName") public R<Set<Long>> getManagerByManagerName(@RequestParam("managerName") String managerName){ List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>() .like(Shop::getShopManager, managerName) .eq(Shop::getDelFlag, 0)); return R.ok(list.stream().map(Shop::getAppUserId).collect(Collectors.toSet())); } /** * 门店统计 */ ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -142,7 +142,6 @@ }else { byId.setWithdrawAuditMoney(BigDecimal.ZERO); } byId.setWithdrawMoney(byId.getWithdrawMoney().subtract(byId.getWithdrawAuditMoney())); return R.ok(byId); }