xiaoyong931011
2022-08-12 77a12468215a8a8a5b3a22544bdcc239efddf287
20220810
3 files added
16 files modified
318 ■■■■■ changed files
pom.xml 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewMallTeamLeaderController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallLeaderStock.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderStockMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 62 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/IXcxPayService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java 51 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallTeamLeaderMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/leader/leaderGoodsUpdate.html 54 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/leader/leaderList.html 13 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/ProfitTest.java 2 ●●● patch | view | raw | blame | history
pom.xml
@@ -28,6 +28,12 @@
    </properties>
    <dependencies>
        <!--微信小程序三方sdk-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,8 @@
@Getter
public enum DataDictionaryEnum {
    //微信订阅模板ID,微信订单通知
    WX_TEMPLATE_ID_ONE("WX_TEMPLATE", "WX_TEMPLATE_ID_ONE"),
    //配送设置
    HOME_DELIVERY_AMOUNT("DELIVERY_SETTING", "HOME_DELIVERY_AMOUNT"),
    FRIST_COST_LEVEL("HOME_DELIVERY_SETTING", "FRIST_COST_LEVEL"),
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
@@ -5,6 +5,7 @@
import cc.mrbird.febs.common.entity.DeptTree;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.exception.FebsException;
@@ -15,10 +16,7 @@
import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.mapper.MallOrderRefundOperationMapper;
import cc.mrbird.febs.mall.mapper.MallTeamLeaderMapper;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
import cc.mrbird.febs.mall.service.IAdminMallOrderService;
import cc.mrbird.febs.mall.vo.AdminAddAddressTreeVo;
@@ -62,6 +60,7 @@
    private final IXcxPayService iXcxPayService;
    private final MallTeamLeaderMapper mallTeamLeaderMapper;
    private final MallMemberMapper mallMemberMapper;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    /**
     * 订单列表
@@ -324,12 +323,15 @@
            String productNames = getProductNames(mallOrderInfo.getMemberId(), mallOrderInfo.getId());
            orderStateDto.setGoodsName(StrUtil.isEmpty(productNames)?"商品":productNames);
            orderStateDto.setOrderState("已送达自提点");
            orderStateDto.setTakeCode(mallOrderInfo.getTakeCode());
            String takeUniqueCode = mallOrderInfo.getTakeUniqueCode();
            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
            orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
            orderStateDto.setOpenId(mallMemberMapper.selectById(mallOrderInfo.getMemberId()).getOpenId());
            orderStateDto.setTemplateId(WechatConfigure.WX_ORDER_STATEMSG_TEMPLATE_ID);
            iXcxPayService.pushOrderToAddress(orderStateDto);
            DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getCode());
            orderStateDto.setTemplateId(dataDictionaryCustom.getValue());
//            iXcxPayService.pushOrderToAddress(orderStateDto);
            iXcxPayService.uniformMessageSend(orderStateDto);
        }
        return new FebsResponse().success();
    }
src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
@@ -6,6 +6,8 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.entity.MallLeaderStock;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallTeamLeader;
import cc.mrbird.febs.mall.service.IAdminMallTeamLeaderService;
import cc.mrbird.febs.mall.vo.AdminSelectListLeaderVo;
@@ -64,4 +66,17 @@
        return iAdminMallTeamLeaderService.leaderCancel(id);
    }
    /**
     * 团长信息-商品库存编辑
     */
    @GetMapping("/leaderGoodsUpdate")
    public FebsResponse leaderGoodsUpdate(QueryRequest request, MallLeaderStock mallLeaderStock, Integer parentId) {
        if (parentId == null) {
            ViewMallTeamLeaderController.idLeaderGoodsUpdate = 0;
        }
        mallLeaderStock.setTeamLeaderId(ViewMallTeamLeaderController.idLeaderGoodsUpdate);
        Map<String, Object> dataTable = getDataTable(iAdminMallTeamLeaderService.leaderGoodsUpdate(request, mallLeaderStock));
        return new FebsResponse().success().data(dataTable);
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ViewMallTeamLeaderController.java
@@ -41,4 +41,15 @@
        model.addAttribute("leaderInfo", data);
        return FebsUtil.view("modules/leader/leaderUpdate");
    }
    public static long idLeaderGoodsUpdate;
    /**
     * 团长信息-商品库存编辑
     */
    @GetMapping("leaderGoodsUpdate/{id}")
    public String leaderGoodsUpdate(@PathVariable long id, Model model) {
        idLeaderGoodsUpdate = id;
        return FebsUtil.view("modules/leader/leaderGoodsUpdate");
    }
}
src/main/java/cc/mrbird/febs/mall/entity/MallLeaderStock.java
New file
@@ -0,0 +1,29 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
 * 团长商品库存表
 */
@Data
@TableName("mall_leader_stock")
public class MallLeaderStock extends BaseEntity {
    //团长ID
    private Long teamLeaderId;
    //商品ID
    private Long goodsId;
    //商品名称
    private String goodsName;
    //库存
    private Integer goodsStock;
    //销售数量
    private Integer goodsVolume;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderStockMapper.java
New file
@@ -0,0 +1,7 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallLeaderStock;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MallLeaderStockMapper extends BaseMapper<MallLeaderStock> {
}
src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.mall.dto.ApiLeaderListDto;
import cc.mrbird.febs.mall.dto.ApiLeaderOrderListDto;
import cc.mrbird.febs.mall.entity.MallLeaderStock;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.entity.MallTeamLeader;
import cc.mrbird.febs.mall.vo.AdminMallTeamLeaderVo;
@@ -27,4 +28,6 @@
    MallTeamLeader selectLeaderByUniqueCode(@Param("uniqueCode")String uniqueCode);
    MallTeamLeader selectLeaderByLonAndLat(@Param("longitude")Double longitude, @Param("latitude")Double latitude);
    IPage<MallLeaderStock> selectleaderGoodsStockListInPage(Page<MallLeaderStock> page, @Param("record")MallLeaderStock mallLeaderStock);
}
src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto;
import cc.mrbird.febs.mall.entity.MallLeaderStock;
import cc.mrbird.febs.mall.entity.MallTeamLeader;
import cc.mrbird.febs.mall.vo.AdminMallTeamLeaderVo;
import cc.mrbird.febs.mall.vo.AdminSelectListLeaderVo;
@@ -22,4 +23,6 @@
    List<AdminSelectListLeaderVo> selectList(MallTeamLeader mallTeamLeader);
    FebsResponse leaderCancel(Long id);
    IPage<MallLeaderStock> leaderGoodsUpdate(QueryRequest request, MallLeaderStock mallLeaderStock);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
@@ -5,7 +5,11 @@
import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion;
import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.entity.MallLeaderStock;
import cc.mrbird.febs.mall.entity.MallTeamLeader;
import cc.mrbird.febs.mall.mapper.MallGoodsMapper;
import cc.mrbird.febs.mall.mapper.MallLeaderStockMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallTeamLeaderMapper;
import cc.mrbird.febs.mall.service.IAdminMallTeamLeaderService;
import cc.mrbird.febs.mall.vo.AdminMallActSetVo;
@@ -13,6 +17,7 @@
import cc.mrbird.febs.mall.vo.AdminSelectListLeaderVo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -29,6 +34,10 @@
@RequiredArgsConstructor
@Transactional
public class AdminMallTeamLeaderServiceImpl extends ServiceImpl<MallTeamLeaderMapper, MallTeamLeader> implements IAdminMallTeamLeaderService {
    private final MallLeaderStockMapper mallLeaderStockMapper;
    private final MallGoodsMapper mallGoodsMapper;
    @Override
    public IPage<AdminMallTeamLeaderVo> getLeaderListInPage(MallTeamLeader mallTeamLeader, QueryRequest request) {
        Page<AdminMallTeamLeaderVo> page = new Page<>(request.getPageNum(), request.getPageSize());
@@ -93,4 +102,12 @@
        return new FebsResponse().success().message("已取消");
    }
    @Override
    public IPage<MallLeaderStock> leaderGoodsUpdate(QueryRequest request, MallLeaderStock mallLeaderStock) {
        Integer goodsNumber = mallGoodsMapper.selectCount(new QueryWrapper<>());
        Page<MallLeaderStock> page = new Page<>(request.getPageNum(), goodsNumber);
        IPage<MallLeaderStock> mallTeamLeaders = this.baseMapper.selectleaderGoodsStockListInPage(page, mallLeaderStock);
        return mallTeamLeaders;
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -16,6 +16,7 @@
import cc.mrbird.febs.mall.vo.OrderListVo;
import cc.mrbird.febs.mall.vo.OrderRefundVo;
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
import cc.mrbird.febs.pay.model.OrderStateDto;
import cc.mrbird.febs.pay.service.IPayService;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.WeixinServiceUtil;
@@ -33,6 +34,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -69,6 +71,9 @@
    private final IXcxPayService iXcxPayService;
    private final IMallAchieveService mallAchieveService;
    private final MallRefundMapper mallRefundMapper;
    private final MallTeamLeaderMapper mallTeamLeaderMapper;
    private final MallMemberMapper mallMemberMapper;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -184,7 +189,7 @@
        orderInfo.setPhone(address.getPhone());
        orderInfo.setIsHome(addOrderDto.getIsHome());
        //订单金额大于50,且选择送货上门,订单需要选择地址信息
        if(total.compareTo(new BigDecimal(50)) > 0 && 1 == addOrderDto.getIsHome()){
        if(1 == addOrderDto.getIsHome()){
            if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
                throw new FebsException("请添加地址");
            }
@@ -215,6 +220,44 @@
        orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
        orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
        this.baseMapper.updateById(orderInfo);
    }
    /**
     * 根据用户ID和订单ID获取所购买商品名称
     * @return 所含商品名称(多个以","隔开)
     */
    public String getProductNames(Long memberId, Long orderId) {
        MallOrderInfo mallOrderInfo = this.baseMapper.selectOrderByMemberIdAndId(memberId, orderId);
        List<MallOrderItem> details = mallOrderInfo.getItems();
        if (CollectionUtils.isEmpty(details)) {
            return "";
        }
        StringBuffer productNameBuffer = new StringBuffer();
        Integer maxLength = 30;
        for (int i = 0; i< details.size(); i++) {
            MallOrderItem mallOrderItem = details.get(i);
            String goodsName = mallOrderItem.getGoodsName();
            if (goodsName == null) {
                continue;
            }
            if (i == 0 && goodsName.length() > maxLength) {
                productNameBuffer.append(goodsName.substring(0, maxLength) + "...");
                break;
            }
            if ((productNameBuffer.length() + goodsName.length()) > maxLength) {
                productNameBuffer.append("等");
                break;
            }
            productNameBuffer.append(goodsName + ",");
        }
        String productNames = productNameBuffer.toString();
        if (productNames.endsWith(",")) {
            productNames = productNames.substring(0, productNames.length() - 1);
        }
        if (productNames.endsWith(",等")) {
            productNames = productNames.substring(0, productNames.length() - 2) + "等";
        }
        return productNames;
    }
    @Override
@@ -327,6 +370,23 @@
        orderInfo.setTakeCode(takeCode);
        this.baseMapper.updateById(orderInfo);
        OrderStateDto orderStateDto = new OrderStateDto();
        orderStateDto.setOrderNo(orderInfo.getOrderNo());
        String productNames = getProductNames(orderInfo.getMemberId(), orderInfo.getId());
        orderStateDto.setGoodsName(StrUtil.isEmpty(productNames)?"商品":productNames);
        orderStateDto.setOrderState("已送达自提点");
        orderStateDto.setTakeCode(orderInfo.getTakeCode());
        String takeUniqueCode = orderInfo.getTakeUniqueCode();
        MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
        orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
        orderStateDto.setOpenId(mallMemberMapper.selectById(orderInfo.getMemberId()).getOpenId());
        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getCode());
        orderStateDto.setTemplateId(dataDictionaryCustom.getValue());
//            iXcxPayService.pushOrderToAddress(orderStateDto);
        iXcxPayService.uniformMessageSend(orderStateDto);
        Map<String, Object> map = new HashMap<>();
        map.put("orderInfo", payResultStr);
        map.put("orderNo", orderInfo.getOrderNo());
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -155,6 +155,7 @@
            String productNames = getProductNames(mallOrderInfo.getMemberId(), mallOrderInfo.getId());
            orderStateDto.setGoodsName(StrUtil.isEmpty(productNames)?"商品":productNames);
            orderStateDto.setOrderState("已送达自提点");
            orderStateDto.setTakeCode(mallOrderInfo.getTakeCode());
            String takeUniqueCode = mallOrderInfo.getTakeUniqueCode();
            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
            orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
@@ -12,15 +12,19 @@
import cc.mrbird.febs.pay.model.OrderStateDto;
import cc.mrbird.febs.pay.model.OrderStateMsgVo;
import cc.mrbird.febs.pay.model.WxTemplateData;
import cc.mrbird.febs.pay.service.IPayService;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.PayThreadPool;
import cc.mrbird.febs.pay.util.Signature;
import cc.mrbird.febs.pay.util.Util;
import cc.mrbird.febs.pay.util.WechatConfigure;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@@ -45,6 +49,9 @@
    MallOrderInfoMapper mallOrderInfoMapper;
    @Autowired
    RedisUtils redisUtils;
    @Autowired
    private IXcxPayService iXcxPayService;
    private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class);
    /**
@@ -75,7 +82,6 @@
            NotifyData data = new NotifyData();
            BeanUtils.copyProperties(bb,data);
            log.info("----return_code = {}", data.getReturn_code());
            // 返回状态码 SUCCESS/FAIL
            if (WechatConfigure.CODE_SUCCESS.equals(data.getReturn_code())) {
@@ -150,4 +156,10 @@
        out.close();
    }
    @ApiOperation(value = "获取微信订阅TemplateId")
    @GetMapping(value = "/getTemplateId")
    public FebsResponse getTemplateId() {
        return new FebsResponse().success().data(iXcxPayService.getTemplateId());
    }
}
src/main/java/cc/mrbird/febs/pay/service/IXcxPayService.java
@@ -4,6 +4,8 @@
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
import cc.mrbird.febs.pay.model.OrderStateDto;
import java.util.List;
public interface IXcxPayService {
    /**
@@ -15,4 +17,11 @@
     * 发送订单送达消息
     */
    void pushOrderToAddress(OrderStateDto info);
    /**
     * 发送订单送达消息
     */
    void uniformMessageSend(OrderStateDto info);
    List<String> getTemplateId();
}
src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java
@@ -1,11 +1,14 @@
package cc.mrbird.febs.pay.service.impl;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.properties.XcxProperties;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.SpringContextHolder;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.entity.MallOrderItem;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
@@ -15,7 +18,12 @@
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.WechatConfigure;
import cc.mrbird.febs.pay.util.WeixinServiceUtil;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +32,9 @@
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -39,6 +49,8 @@
    MallMemberMapper mallMemberMapper;
    @Autowired
    WeixinServiceUtil weixinServiceUtil;
    @Autowired
    DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Autowired
    RedisUtils redisUtils;
    @Autowired
@@ -74,8 +86,6 @@
        OrderStateMsgVo orderStateMsgVo = new OrderStateMsgVo();
        orderStateMsgVo.setToUser(info.getOpenId());//用户的openId
        orderStateMsgVo.setTemplateId(info.getTemplateId());//订阅消息模板id
//        wxMssVo.setPage("pages/appointment/line_up?"+"shopId="+info.getShopId());
        Map<String, WxTemplateData> m = new HashMap<>(5);
        m.put("character_string1", new WxTemplateData(info.getOrderNo()));
        m.put("thing9", new WxTemplateData(info.getGoodsName()));
@@ -83,10 +93,47 @@
        m.put("thing13", new WxTemplateData(info.getAddressArea()));
        m.put("thing16", new WxTemplateData(info.getTakeCode()));
        orderStateMsgVo.setData(m);
        String s = JSONUtil.toJsonStr(orderStateMsgVo);
        log.info(s);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, orderStateMsgVo, String.class);
        log.info(responseEntity.getBody());
    }
    private static final String WXAPPLETURl="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=";
    @Override
    public void uniformMessageSend(OrderStateDto info) {
        RestTemplate restTemplate = new RestTemplate();
        String url =  WXAPPLETURl + redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY);
        //拼接推送的模版
        OrderStateMsgVo orderStateMsgVo = new OrderStateMsgVo();
        orderStateMsgVo.setToUser(info.getOpenId());//用户的openId
        orderStateMsgVo.setTemplateId(info.getTemplateId());//订阅消息模板id
        Map<String, WxTemplateData> m = new HashMap<>(5);
        m.put("character_string1", new WxTemplateData(info.getOrderNo()));
        m.put("thing9", new WxTemplateData(info.getGoodsName()));
        m.put("phrase2", new WxTemplateData(info.getOrderState()));
        m.put("thing13", new WxTemplateData(info.getAddressArea()));
        m.put("thing16", new WxTemplateData(info.getTakeCode()));
        orderStateMsgVo.setData(m);
        String s = JSONUtil.toJsonStr(orderStateMsgVo);
        log.info(s);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, orderStateMsgVo, String.class);
        log.info(responseEntity.getBody());
    }
    @Override
    public List<String> getTemplateId() {
        List<String> wxTemplates = new ArrayList<>();
        List<DataDictionaryCustom> wxTemplateList = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getType());
        if(CollUtil.isNotEmpty(wxTemplateList)){
            for(DataDictionaryCustom dic : wxTemplateList){
                wxTemplates.add(dic.getValue());
            }
        }
        return wxTemplates;
    }
    /**
     * 根据用户ID和订单ID获取所购买商品名称
     * @return 所含商品名称(多个以","隔开)
src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
@@ -167,4 +167,9 @@
        order by distance ASC limit 1
    </select>
    <select id="selectleaderGoodsStockListInPage" resultType="cc.mrbird.febs.mall.entity.MallLeaderStock">
        select a.* from mall_leader_stock a
        where a.team_leader_id = #{record.teamLeaderId}
    </select>
</mapper>
src/main/resources/templates/febs/views/modules/leader/leaderGoodsUpdate.html
New file
@@ -0,0 +1,54 @@
<div class="layui-fluid layui-anim febs-anim" id="febs-leaderGoods-update" lay-title="用户资金流水">
    <div class="layui-row febs-container">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-body febs-table-full">
                    <table lay-filter="leaderGoodsChild" lay-data="{id: 'leaderGoodsChild'}"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<script data-th-inline="none" type="text/javascript">
    layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect' ,'eleTree'], function () {
        var $ = layui.jquery,
            laydate = layui.laydate,
            febs = layui.febs,
            form = layui.form,
            table = layui.table,
            treeSelect = layui.treeSelect,
            dropdown = layui.dropdown,
            $view = $('#febs-leaderGoods-update'),
            $query = $view.find('#queryChild'),
            $searchForm = $view.find('formChild'),
            sortObject = {field: 'createTime', type: null},
            tableIns,
            createTimeFrom,
            createTimeTo;
        form.render();
        initTable();
        laydate.render({
            elem: '#user-createTime',
            range: true,
            trigger: 'click'
        });
        function initTable() {
            tableIns = febs.table.init({
                elem: $view.find('table'),
                id: 'leaderGoodsChild',
                url: ctx + 'admin/leader/leaderGoodsUpdate?parentId=1',
                cols: [[
                    {field: 'goodsName', title: '商品名称', minWidth: 80,align:'center'},
                    {field: 'goodsStock', title: '库存', minWidth: 150,align:'center'},
                    {field: 'goodsVolume', title: '销售数量', minWidth: 150,align:'center'},
                ]]
            });
        }
    })
</script>
src/main/resources/templates/febs/views/modules/leader/leaderList.html
@@ -86,6 +86,18 @@
        table.on('tool(leaderTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            if (layEvent === 'leaderGoodsUpdate') {
                febs.modal.open('编辑', 'modules/leader/leaderGoodsUpdate/' + data.id, {
                    btn: ['提交', '取消'],
                    area:['100%','100%'],
                    yes: function (index, layero) {
                        $('#febs-leaderGoods-update').find('#submit').trigger('click');
                    },
                    btn2: function () {
                        layer.closeAll();
                    }
                });
            }
            if (layEvent === 'leaderUpdate') {
                febs.modal.open('编辑', 'modules/leader/leaderUpdate/' + data.id, {
                    btn: ['提交', '取消'],
@@ -175,6 +187,7 @@
                            }else if(d.state === 1) {
                                return ''
                                    + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="leaderCancel" shiro:hasPermission="user:update">取消</button>'
                                    // + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="leaderGoodsUpdate" shiro:hasPermission="user:update">团长商品设置</button>'
                            }else{
                                return '';
                            }
src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -127,7 +127,7 @@
    @Test
    public void confirm(){
        ApiLeaderOrderConfirmDto apiLeaderOrderConfirmDto = new ApiLeaderOrderConfirmDto();
        apiLeaderOrderConfirmDto.setIds("85");
        apiLeaderOrderConfirmDto.setIds("90");
        iApiMallTeamLeaderService.leaderOrderConfirm(apiLeaderOrderConfirmDto);
    }
}