bug
jiangqs
2023-08-27 58d3e3d9d6a129c687044eef0418def8ad6e7cad
bug
18个文件已修改
1个文件已添加
318 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/MsgUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/test/java/com/ruoyi/order/orderTest.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/staff/StaffSysController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtStaffEditDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtSysStaffImportDto.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeptSimpleVo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/staff/SysStaffMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/staff/SysStaffMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -74,6 +74,8 @@
    String SHOP_USER_DOUBLE = "账号已经关联其他商户登录";
    String SHOP_CLOSED = "商户在审核中暂时无法购买商品";
    String COUPON_AUDIT_EDIT = "只能编辑审核拒绝的优惠券";
    String VERIFY_USED = "该核销码已核销,请更换";
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
@@ -83,7 +83,7 @@
        return R.ok(totalDataTotalVoList);
    }
    @RequestMapping(value = "/getPlTotalDataTotal", method = RequestMethod.POST)
    @RequestMapping(value = "/exportPlTotalDataTotal", method = RequestMethod.POST)
    @ApiOperation(value = "导出平台商户数据统计(统计-店铺数据统计)")
    public void exportPlTotalDataTotal(MgtBasePlatformDto mgtBasePlatformDto, HttpServletResponse response) {
        Long userId = SecurityUtils.getUserId();
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -1,18 +1,13 @@
package com.ruoyi.order.controller.miniapp;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.order.Order;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.constant.DelayTaskEnum;
import com.ruoyi.system.api.constant.SecurityConstant;
import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
import com.ruoyi.system.api.domain.poji.member.Member;
@@ -186,26 +181,11 @@
    }
    @RequestMapping(value = "/payOrder", method = RequestMethod.POST)
    @ApiOperation(value = "支付订单(临时)")
    public R<AppPlaceOrderVo> placeOrder(@RequestBody AppBaseGetDto appBaseGetDto) {
    @ApiOperation(value = "支付订单")
    public R<AppPlaceOrderVo> payOrder(@RequestBody AppBaseGetDto appBaseGetDto) {
        Long userId = SecurityUtils.getUserId();
        AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
        Order order = orderService.getById(appBaseGetDto.getId());
        PartnerTransactionsResult transaction = new PartnerTransactionsResult();
        transaction.setOutTradeNo(appBaseGetDto.getId());
        orderService.payBack(transaction);
        appPlaceOrderVo.setOrderId(order.getOrderId());
        appPlaceOrderVo.setOrderNo(order.getOrderNo());
        appPlaceOrderVo.setPayType(order.getPayType());
        appPlaceOrderVo.setPayMoney(order.getPayMoney());
        appPlaceOrderVo.setUnpaidMoney(order.getPayMoney());
        Integer delayTime = 30;
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
        remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        return R.ok(appPlaceOrderVo);
    }
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java
@@ -70,7 +70,6 @@
    private Integer[] orderTotalValue;
    @ApiModelProperty(value = "订单分布金额")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "销售占比数量")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java
@@ -70,7 +70,6 @@
    private Integer[] orderTotalValue;
    @ApiModelProperty(value = "订单分布金额")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "销售占比数量")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
@@ -76,7 +76,6 @@
    private Integer[] orderTotalValue;
    @ApiModelProperty(value = "订单分布金额")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "销售占比数量")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -67,6 +67,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -156,6 +157,10 @@
    @Override
    public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) {
        Long userId = appSureOrderDto.getUserId();
        Shop shop = remoteShopService.getShop(appSureOrderDto.getShopId()).getData();
        if(shop!=null&&shop.getShopStatus()!=1){
            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
        }
        // 初始化订单对象
        AppSureOrderVo appSureOrderVo = new AppSureOrderVo();
        // 初始化订单商品列表
@@ -414,6 +419,10 @@
    @Override
    public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto) {
        Long userId = appPanicBuyDto.getUserId();
        Shop shop = remoteShopService.getShop(appPanicBuyDto.getShopId()).getData();
        if(shop!=null&&shop.getShopStatus()!=1){
            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
        }
        AppPanicBuyVo appPanicBuyVo = new AppPanicBuyVo();
        String activityId = appPanicBuyDto.getActivityId();
        String goodsId = appPanicBuyDto.getGoodsId();
@@ -762,28 +771,27 @@
        }
        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
            String outTradeNo = IdUtils.simpleUUID();
            // 保存订单 交易流水
            order.setOutTradeNo(outTradeNo);
            this.saveOrUpdate(order);
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                    appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1);
            //生成自动取消订单延时任务
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
            String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getPaySign();
            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, payStr , delayTime.longValue(), TimeUnit.MINUTES);
            DelayTask delayTask = new DelayTask();
            delayTask.setDelFlag(0);
            delayTask.setCreateTime(new Date());
            delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
            delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
            remoteConfigService.addDelayTask(delayTask);
            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        }else{
            order.setOrderStatus(2);
            this.saveOrUpdate(order);
@@ -846,7 +854,10 @@
            amount.setTotal(totalFee);
            amount.setCurrency("CNY");
            request.setAmount(amount);
            Date endTime = appPlaceOrderVo.getEndTime();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
            String rfc3339Format = formatter.format(endTime);
            request.setTimeExpire(rfc3339Format);
            // 支付者
            PartnerTransactionsRequest.Payer payer = new PartnerTransactionsRequest.Payer();
            payer.setSpOpenid(openid);
@@ -1163,23 +1174,25 @@
            // 保存订单 交易流水
            order.setOutTradeNo(outTradeNo);
            this.saveOrUpdate(order);
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo,
                    orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
                    appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2);
            //生成自动取消订单延时任务
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
            String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getPaySign();
            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, payStr , delayTime.longValue(), TimeUnit.MINUTES);
            DelayTask delayTask = new DelayTask();
            delayTask.setDelFlag(0);
            delayTask.setCreateTime(new Date());
            delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
            delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
            remoteConfigService.addDelayTask(delayTask);
            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        }else{
            order.setOrderStatus(2);
            this.saveOrUpdate(order);
@@ -1305,6 +1318,47 @@
        } else {
            throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
        }
    }
    /**
     * @description  支付订单
     * @author  jqs
     * @date    2023/8/27 15:26
     * @param orderId
     * @return  AppPlaceOrderVo
     */
    @Override
    public AppPlaceOrderVo payOrder(String orderId){
        Order order = this.getById(orderId);
        if(order.getOrderStatus()!=1){
            throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
        }
        String payStr = redisService.getCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+orderId);
        if(StringUtils.isBlank(payStr)){
            throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
        }
        Integer delayTime = 30;
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
        OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
        String[] payArr = payStr.split("-");
        appPlaceOrderVo.setOrderId(order.getOrderId());
        appPlaceOrderVo.setOrderNo(order.getOrderNo());
        appPlaceOrderVo.setPayType(order.getPayType());
        appPlaceOrderVo.setPayMoney(order.getPayMoney());
        appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        appPlaceOrderVo.setAppId(payArr[0]);
        appPlaceOrderVo.setMchId(orderPayment.getSubMchId());
        appPlaceOrderVo.setTimeStamp(payArr[1]);
        appPlaceOrderVo.setNonceStr(payArr[2]);
        appPlaceOrderVo.setPackageStr(payArr[3]);
        appPlaceOrderVo.setSignType(payArr[4]);
        appPlaceOrderVo.setPaySign(payArr[5]);
        appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId());
        return appPlaceOrderVo;
    }
    /**
@@ -1602,15 +1656,17 @@
                    List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>();
                    String description = "订单:" + orderNo + " 平台抽取佣金";
                    //获取商户分成
                    BigDecimal proportionPercent = shopProportion.getProportionPercent();
                    if (null == proportionPercent) {
                        proportionPercent = BigDecimal.ZERO;
                    }
                    //平台分成
                    proportionPercent = new BigDecimal("100.00").subtract(proportionPercent);
                    if(proportionPercent.compareTo(BigDecimal.ZERO)>0){
                    ProfitSharingResult result = new ProfitSharingResult();
                    result.setOutOrderNo(orderNo);
                    result.setStatus("FINISHED");
                    // 计算分成金额
                    int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue();
                    log.info("订单分账:{} 分账金额: {}", orderNo, amount);
@@ -1635,6 +1691,7 @@
                    // 保存请求信息
                    sendMessage = JSONObject.toJSONString(request);
                    resultMessage = JSONObject.toJSONString(result);
                    }
                } else {
                    resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo);
                    log.info(resultMessage);
@@ -3116,6 +3173,10 @@
            }
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        if(mgtBasePlatformDto.getShopId()!=null){
            shopIdList = new ArrayList<>();
            shopIdList.add(mgtBasePlatformDto.getShopId());
        }
        mgtBasePlatformDto.setShopIdList(shopIdList);
        //获取基础统计
        MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getPlTotalOrderTotalOrderFrom(mgtBasePlatformDto);
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -82,6 +82,15 @@
    void cancelOrder(String orderId);
    /**
     * @description  支付订单
     * @author  jqs
     * @date    2023/8/27 15:26
     * @param orderId
     * @return  AppPlaceOrderVo
     */
    AppPlaceOrderVo payOrder(String orderId);
    /**
     * 获取用户订单统计
     * @param userId
     * @return
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/MsgUtils.java
@@ -23,7 +23,6 @@
public class MsgUtils {
    public static void sendMsg(String phoneNumber,Integer sendType,String sendContent) throws Exception {
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -939,19 +939,22 @@
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT order_id) AS mapValueFirst,
        SUM(order_money) AS mapValueSecond,
        FROM
        t_order
        WHERE
        del_flag = 0 AND order_from = 2
        AND Date(create_time) >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
        SUM(order_money) AS mapValueSecond
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2 AND order_status IN (2,3)
        <if test="param.shopId != null and param.shopId != ''">
            AND shop_id = #{param.shopId}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND Date(create_time) &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND Date(create_time) &lt;= #{param.endDate}
        </if>
        GROUP BY
        DATE_FORMAT(create_time, '%Y-%m-%d')
        mapKey
        ORDER BY
        DATE_FORMAT(create_time, '%Y-%m-%d') ASC
        mapKey ASC
    </select>
    <select id="getUserIdAgeRank" resultType="java.lang.Long">
@@ -1224,6 +1227,12 @@
                #{item}
            </foreach>
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND Date(toc.create_time) &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND Date(toc.create_time) &lt;= #{param.endDate}
        </if>
        GROUP BY tog.goods_type
    </select>
@@ -1331,11 +1340,8 @@
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status = 3 AND toc.new_member_flag = 1
        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        <if test="param.shopId != null and param.shopId != ''">
            AND toc.shop_id = #{param.shopId}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND Date(toc.create_time) &gt;= #{param.startDate}
ruoyi-modules/ruoyi-order/src/test/java/com/ruoyi/order/orderTest.java
@@ -24,14 +24,9 @@
    /*@Test
    public void main() {
        MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
        orderService.getPlTotalOrderTotal(mgtBasePlatformDto);
        AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
        orderService.createWxPayInfo( appPlaceOrderVo, 280L, 50L,
                "测试支付商品", "SC202308160046",
                "0fa36ad3edcc40bebc2795cc505b5272", new BigDecimal("0.1"),
                "oL-gp5GG6-KRVSIAE_qYLMULPFjw", "127.0.0.1", Arrays.asList("测试支付商品"));
        System.out.println(appPlaceOrderVo.toString());
    }*/
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -439,6 +439,7 @@
               SIN((105.43587830688473 * PI() / 180 - ts.shop_longitude * PI() / 180) / 2), 2
               ))) AS distance
        FROM t_shop ts
        WHERE del_flag = 0 AND shop_status = 1
        ORDER BY distance ASC LIMIT 1
    </select>
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/staff/StaffSysController.java
@@ -83,5 +83,14 @@
        return R.ok(page.setRecords(staffSuggestPageVoList));
    }
    @ApiOperation(value = "导入员工")
    @PostMapping("/importSysStaffData")
    public AjaxResult importGoodsTagData(@RequestPart("file")MultipartFile file) throws Exception
    {
        ExcelUtil<MgtSysStaffImportDto> util = new ExcelUtil<MgtSysStaffImportDto>(MgtSysStaffImportDto.class);
        List<MgtSysStaffImportDto> tagList = util.importExcel(file.getInputStream());
        String message = sysStaffService.importSysStaff(tagList);
        return success(message);
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtStaffEditDto.java
@@ -59,4 +59,7 @@
        @NotNull(message = "负责人标记不能为空")
        private String headFlag;
        @ApiModelProperty(value = "微信userId")
        private String wxUserId;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtSysStaffImportDto.java
@@ -16,10 +16,10 @@
    @Excel(name = "姓名")
    private String staffName;
    @Excel(name = "账号")
    @Excel(name = "帐号")
    private String userName;
    @Excel(name = "昵称")
    @Excel(name = "别名")
    private String nickName;
    @Excel(name = "职务")
@@ -37,6 +37,6 @@
    @Excel(name = "座机")
    private String phone;
    @Excel(name = "邮箱")
    @Excel(name = "个人邮箱")
    private String email;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeptSimpleVo.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName DeptSimpleVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/8/27 17:45
 * @Version 1.0
 */
@Data
public class DeptSimpleVo {
    @ApiModelProperty(value = "部门id")
    private Long deptId;
    @ApiModelProperty(value = "部门名字")
    private String deptName;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/staff/SysStaffMapper.java
@@ -1,9 +1,10 @@
package com.ruoyi.system.mapper.staff;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.domain.dto.MgtStaffPageDto;
import com.ruoyi.system.domain.pojo.staff.SysStaff;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.vo.DeptSimpleVo;
import com.ruoyi.system.domain.vo.MgtDeptStaffListVo;
import com.ruoyi.system.domain.vo.MgtStaffPageVo;
import org.apache.ibatis.annotations.Param;
@@ -47,4 +48,13 @@
     * @return  List<MgtStaffPageVo>
     */
    List<MgtStaffPageVo> pageMgtStaff(Page page, @Param("param")MgtStaffPageDto mgtStaffPageDto);
    /**
     * @description
     * @author  jqs
     * @date    2023/8/27 17:46
     * @param
     * @return  List<DeptSimpleVo>
     */
    List<DeptSimpleVo> listSimpleDept();
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
@@ -20,6 +20,7 @@
import com.ruoyi.system.domain.dto.MgtStaffPageDto;
import com.ruoyi.system.domain.dto.MgtSysStaffImportDto;
import com.ruoyi.system.domain.pojo.staff.SysStaff;
import com.ruoyi.system.domain.vo.DeptSimpleVo;
import com.ruoyi.system.domain.vo.MgtDeptStaffListVo;
import com.ruoyi.system.domain.vo.MgtStaffPageVo;
import com.ruoyi.system.mapper.staff.SysStaffMapper;
@@ -31,7 +32,10 @@
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -165,6 +169,7 @@
        sysStaff.setStaffPost(mgtStaffEditDto.getStaffPost());
        sysStaff.setStaffAvatar(mgtStaffEditDto.getStaffAvatar());
        sysStaff.setHeadFlag(mgtStaffEditDto.getHeadFlag());
        sysStaff.setWxUserId(mgtStaffEditDto.getWxUserId());
        this.saveOrUpdate(sysStaff);
        MgtShopStaffEditDto mgtShopStaffEditDto = new MgtShopStaffEditDto();
        mgtShopStaffEditDto.setUserId(sysStaff.getUserId());
@@ -303,16 +308,76 @@
        String mobile;
        String userName;
        String department;
        String departmentFirst;
        String departmentSecond;
        String departmentThird;
        int lastIndex;
        int firstIndex;
        int secondIndex;
        int thirdIndex;
        DeptSimpleVo deptSimpleVo;
        SysUser sysUser;
        List<DeptSimpleVo> deptSimpleVoList = sysStaffMapper.listSimpleDept();
        Map<String, DeptSimpleVo> deptMap = deptSimpleVoList.stream()
                .collect(Collectors.toMap(DeptSimpleVo::getDeptName, Function.identity()));
        for (MgtSysStaffImportDto entity : staffImportDtoList) {
            try {
                mobile = entity.getMobile();
                userName = entity.getUserName();
                department = entity.getDepartment();
                lastIndex = department.lastIndexOf("/");
                department = department.substring(lastIndex + 1);
                lastIndex = department.indexOf(";");
                department = (lastIndex != -1) ? department.substring(0, lastIndex) : department;
                firstIndex = department.lastIndexOf("/");
                secondIndex = department.lastIndexOf('/', firstIndex - 1);
                thirdIndex = department.lastIndexOf('/', secondIndex - 1);
                departmentFirst = department.substring(firstIndex + 1);
                deptSimpleVo = deptMap.get(departmentFirst);
                if(deptSimpleVo==null){
                    departmentSecond = department.substring(secondIndex + 1, firstIndex);
                    deptSimpleVo = deptMap.get(departmentSecond);
                }
                if(deptSimpleVo==null){
                    departmentThird = department.substring(thirdIndex + 1, secondIndex);
                    deptSimpleVo = deptMap.get(departmentThird);
                }
                if(deptSimpleVo!=null&&StringUtils.isNotBlank(entity.getMobile())){
                    LambdaQueryWrapper<SysStaff> queryWrapper = new LambdaQueryWrapper();
                    queryWrapper.eq(SysStaff::getDelFlag,0);
                    queryWrapper.eq(SysStaff::getStaffMobile,entity.getMobile());
                    SysStaff sysStaffSame = this.getOne(queryWrapper, false);
                    if(sysStaffSame!=null){
                        sysStaffSame.setStaffName(entity.getStaffName());
                        sysStaffSame.setStaffPost(entity.getPost());
                        sysStaffSame.setWxUserId(entity.getUserName());
                        if(StringUtils.isNotBlank(entity.getEmail())){
                            sysStaffSame.setStaffEmail(entity.getEmail());
                        }
                        this.saveOrUpdate(sysStaffSame);
                        sysUser = sysUserService.selectUserById(sysStaffSame.getUserId());
                        sysUser.setDeptId(deptSimpleVo.getDeptId());
                        sysUser.setNickName(entity.getStaffName());
                        if(entity.getGender().equals("男")){
                            sysUser.setSex("0");
                        }else if(entity.getGender().equals("女")){
                            sysUser.setSex("1");
                        }else{
                            sysUser.setSex("2");
                        }
                        if(StringUtils.isNotBlank(entity.getEmail())){
                            sysUser.setEmail(entity.getEmail());
                        }
                        sysUserService.updateOnlyUser(sysUser);
                    }else{
                        MgtStaffEditDto mgtStaffEditDto = new MgtStaffEditDto();
                        mgtStaffEditDto.setDeptId(deptSimpleVo.getDeptId());
                        mgtStaffEditDto.setStaffName(entity.getStaffName());
                        mgtStaffEditDto.setStaffMobile(entity.getMobile());
                        mgtStaffEditDto.setStaffEmail(entity.getEmail());
                        mgtStaffEditDto.setStaffPost(entity.getPost());
                        mgtStaffEditDto.setStaffAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/2023/8/26/362e964917304255aaa36a874063d198.jpg");
                        mgtStaffEditDto.setHeadFlag("0");
                        mgtStaffEditDto.setWxUserId(entity.getUserName());
                        this.mgtStaffEdit(mgtStaffEditDto);
                    }
                }
                /*tagName = entity.getTagName();
                sysTagSame = null;
                // 验证是否存在这个用户
ruoyi-modules/ruoyi-system/src/main/resources/mapper/staff/SysStaffMapper.xml
@@ -58,4 +58,12 @@
            AND tss.staff_name LIKE CONCAT('%',#{param.staffName},'%')
        </if>
    </select>
    <select id="listSimpleDept" resultType="com.ruoyi.system.domain.vo.DeptSimpleVo">
        SELECT
            dept_id deptId,
            dept_name deptName
        FROM sys_dept
        WHERE del_flag = '0'
    </select>
</mapper>