xiaoyong931011
2022-09-07 11edfa154a6f6c48d06de201315b25978601229c
src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -4,30 +4,49 @@
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.mall.dto.ApiLeaderOrderConfirmDto;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.dto.ApiLeaderRefundOrderDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.pay.model.WxGenerateQrCodeDto;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.WechatConfigure;
import cc.mrbird.febs.rabbit.consumer.AgentConsumer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
import java.util.Date;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.*;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -181,9 +200,9 @@
    private IXcxPayService iXcxPayService;
    @Test
    public void qrcode(){
    public void qrcodeBase64(){
        WxGenerateQrCodeDto wxGenerateQrCodeDto = new WxGenerateQrCodeDto();
        wxGenerateQrCodeDto.setPage("wxGenerateQrCodeDto");
        wxGenerateQrCodeDto.setPage("pages/index/index");
        wxGenerateQrCodeDto.setScene("15");
        FebsResponse febsResponse = iXcxPayService.generateQrCode(wxGenerateQrCodeDto);
        String data = febsResponse.get("data").toString();
@@ -262,13 +281,301 @@
        }
    }
    @Autowired
    private MallMoneyFlowMapper mallMoneyFlowMapper;
    @Test
    public void testAddress(){
        MallOrderInfo orderInfo = mallOrderInfoMapper.selectOrderDetailsById(266L);
        System.out.println(orderInfo.getLeaderLatitude());
        MallMember loginUser = mallMemberMapper.selectById(47L);
        BigDecimal totalProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(loginUser.getId(),FlowTypeEnum.BALANCE.getValue(),MoneyFlowTypeEnum.LEADERACHIEVE.getValue(),null,null,null);
        BigDecimal todayProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(loginUser.getId(),FlowTypeEnum.BALANCE.getValue(),
                MoneyFlowTypeEnum.LEADERACHIEVE.getValue(),
                null,DateUtil.date(),
                null);
        BigDecimal monthProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(loginUser.getId(),FlowTypeEnum.BALANCE.getValue(),
                MoneyFlowTypeEnum.LEADERACHIEVE.getValue(),
                null,null,
                DateUtil.date());
        BigDecimal waitProfit = mallLeaderAchieveMapper.selectProfitByStateAndDateTimeAndUniqueCode(1,null,loginUser.getInviteId()).setScale(2,BigDecimal.ROUND_DOWN);
        System.out.println(todayProfit +";");
        System.out.println(waitProfit +";");
        System.out.println(totalProfit +";");
        System.out.println(monthProfit +";");
    }
    @Autowired
    RedisUtils redisUtils;
    @Autowired
    MallRefundMapper mallRefundMapper;
    @Test
    public void qrcode(){
        MallMember member = mallMemberMapper.selectById(58L);
        Long id = 320L;
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallOrderInfo)){
        }
        Integer status = mallOrderInfo.getStatus();
        if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){
        }
        Integer deliveryState = mallOrderInfo.getDeliveryState();
        if(1 != deliveryState){
        }
        //根据子订单生成退款记录
        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
        if(CollUtil.isEmpty(mallOrderItemList)){
        }
        for(MallOrderItem mallOrderItem : mallOrderItemList){
            QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>();
            objectQueryWrapper.eq("member_id",member.getId());
            objectQueryWrapper.eq("order_id",mallOrderInfo.getId());
            objectQueryWrapper.eq("item_id",mallOrderItem.getId());
            MallRefundEntity mallRefund = mallRefundMapper.selectOne(objectQueryWrapper);
            MallRefundEntity mallRefundEntity = new MallRefundEntity();
            if(ObjectUtil.isEmpty(mallRefund)){
                mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_RITEM"+mallOrderItem.getId());
                mallRefundEntity.setMemberId(member.getId());
                mallRefundEntity.setOrderId(mallOrderInfo.getId());
                mallRefundEntity.setItemId(mallOrderItem.getId());
                if("余额支付".equals(mallOrderInfo.getPayMethod())){
                    mallRefundEntity.setType(3);
                }else if("微信支付".equals(mallOrderInfo.getPayMethod())){
                    mallRefundEntity.setType(1);
                }else{
                    mallRefundEntity.setType(3);
                }
                mallRefundEntity.setState(3);
                mallRefundEntity.setAmount(mallOrderItem.getAmount());
                mallRefundMapper.insert(mallRefundEntity);
            }else{
                if(mallRefund.getState() == 2){
                    mallRefundEntity.setId(mallRefund.getId());
                    mallRefundEntity.setRefundNo(mallRefund.getRefundNo());
                    mallRefundEntity.setMemberId(mallRefund.getMemberId());
                    mallRefundEntity.setOrderId(mallRefund.getOrderId());
                    mallRefundEntity.setItemId(mallRefund.getItemId());
                    mallRefundEntity.setType(mallRefund.getType());
                    mallRefundEntity.setState(3);
                    mallRefundEntity.setAmount(mallRefund.getAmount());
                    mallRefundMapper.updateById(mallRefundEntity);
                }
            }
            ApiLeaderRefundOrderDto apiLeaderRefundOrderDto = new ApiLeaderRefundOrderDto();
            apiLeaderRefundOrderDto.setOrderId(mallOrderInfo.getId());
            apiLeaderRefundOrderDto.setItemId(mallOrderItem.getId());
            apiLeaderRefundOrderDto.setAgreeState(1);
            iApiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto);
        }
    }
    /**
     * 获取小程序菊花码
     * @Description //TODO
     * @Author zhaowx
     * @Date 2020/3/25 15:23
     **/
    @Test
    public void getWXCode() {
        try {
            //这里调用的是上面的获取access_token方法
            String access_token = redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString();
            String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token;
            String scene = "15";
            Map<String, String> param = new HashMap<>();
            param.put("scene",scene);
            //这里的page如果没有的话可以不写,默认是跳主页,如果写了没有的页面的话,会返回错误信息
            param.put("page","pages/product/details");
            String json = JSON.toJSONString(param);
            ByteArrayInputStream inputStream = sendPost(url, json);
            //这里判断的是返回的图片还是错误信息,一般错误信息不会大于200
            if (inputStream.available() <= 200){
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                int i;
                byte[] buffer = new byte[200];
                while ((i = inputStream.read(buffer)) != -1){
                    byteArrayOutputStream.write(buffer,0,i);
                }
                String str = new String(byteArrayOutputStream.toByteArray());
                //错误信息的格式在官方文档里有
                JSONObject jsonObject = JSONObject.parseObject(str);
                if ("41030".equals(jsonObject.getString("errcode"))){
                    System.out.println("所传page页面不存在,或者小程序没有发布");
                }else if ("45009".equals(jsonObject.getString("errcode"))){
                    System.out.println("调用分钟频率受限");
                }
                byteArrayOutputStream.close();
            }
            //输出到本地的代码
            FileOutputStream fileOutputStream = new FileOutputStream("D:/123.png");
            int i;
            byte[] buffer = new byte[10240000];
            while ((i = inputStream.read(buffer)) != -1){
                fileOutputStream.write(buffer,0,i);
            }
            fileOutputStream.flush();
            fileOutputStream.close();
            inputStream.close();
        }catch (Exception e){
        }
    }
    public static ByteArrayInputStream sendPost(String URL, String json) {
        InputStream inputStream = null;
        ByteArrayInputStream byteArrayInputStream = null;
        // 创建默认的httpClient实例.
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // 创建httppost
        HttpPost httppost = new HttpPost(URL);
        httppost.addHeader("Content-type", "application/json; charset=utf-8");
        httppost.setHeader("Accept", "application/json");
        try {
            StringEntity s = new StringEntity(json, Charset.forName("UTF-8"));
            s.setContentEncoding("UTF-8");
            httppost.setEntity(s);
            HttpResponse response = httpclient.execute(httppost);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                // 获取相应实体
                HttpEntity entity = response.getEntity();
                inputStream = entity.getContent();
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                // 创建一个Buffer字符串
                byte[] buffer = new byte[1024];
                // 每次读取的字符串长度,如果为-1,代表全部读取完毕
                int len = 0;
                // 使用一个输入流从buffer里把数据读取出来
                while ((len = inputStream.read(buffer)) != -1) {
                    // 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
                    outStream.write(buffer, 0, len);
                }
                // 关闭输入流
                inputStream.close();
                // 把outStream里的数据写入内存
                byteArrayInputStream = new ByteArrayInputStream(outStream.toByteArray());
                byte[] data = outStream.toByteArray();
                String result = new String(Base64.getEncoder().encode(data));
                result = "data:image/jpeg;base64," + result;
                System.out.println(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return byteArrayInputStream;
    }
    /**
     * 传递自定义参数获取二维码保存后并生成url给前端访问
     * @Author yeafel
     * @param scene
     * @param page
     * @param is_hyaline
     * @param auto_color
     * @return
     */
    @Test
    public void getQrCodeImgUrl() {
            String scene = "pages/product/details";
            String page = "15";
            Boolean is_hyaline = true;
            Boolean auto_color = true;
            RestTemplate restTemplate = new RestTemplate();
            //首先获取ACCESS_TOKEN
            String accessToken = redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString();
            //然后调用微信官方api生成二维码
            String createQrCodeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
            //此处我是使用的阿里巴巴的fastJson
            JSONObject createQrParam = new JSONObject();
            createQrParam.put("scene", scene);
            createQrParam.put("page", page);
            createQrParam.put("is_hyaline", is_hyaline);
            createQrParam.put("auto_color", auto_color);
            PrintWriter out = null;
            InputStream in = null;
            try {
                URL realUrl = new URL(createQrCodeUrl);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数,利用connection的输出流,去写数据到connection中,我的参数数据流出我的电脑内存到connection中,让connection把参数帮我传到URL中去请求。
                out.print(createQrParam);
                // flush输出流的缓冲
                out.flush();
                //获取URL的connection中的输入流,这个输入流就是我请求的url返回的数据,返回的数据在这个输入流中,流入我内存,我将从此流中读取数据。
                in = conn.getInputStream();
                //定义个空字节数组
                byte[] data = null;
                // 读取图片字节数组
                try {
                    //创建字节数组输出流作为中转仓库,等待被写入数据
                    ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
                    byte[] buff = new byte[100];
                    int rc = 0;
                    while ((rc = in.read(buff, 0, 100)) > 0) {
                        //向中转的输出流循环写出输入流中的数据
                        swapStream.write(buff, 0, rc);
                    }
                    //此时connection的输入流返回给我们的请求结果数据已经被完全地写入了我们定义的中转输出流swapStream中
                    data = swapStream.toByteArray();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (in != null) {
                        try {
                            in.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                String base64Code = new String(Objects.requireNonNull(Base64.getEncoder().encode(data)));
                //Base64转byte[]数组
                System.out.println(base64Code);
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
    }
    public static void main(String[] args) {
        BigDecimal amount = new BigDecimal("0.15").setScale(2,BigDecimal.ROUND_DOWN);
        System.out.println(amount);