| package com.xzx.order;  | 
|   | 
| import cn.hutool.core.bean.BeanUtil;  | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import cn.hutool.core.io.FileUtil;  | 
| import cn.hutool.core.thread.ThreadUtil;  | 
| import cn.hutool.core.util.NumberUtil;  | 
| import cn.hutool.core.util.StrUtil;  | 
| import cn.hutool.json.JSONUtil;  | 
| import cn.hutool.poi.excel.ExcelReader;  | 
| import cn.hutool.poi.excel.ExcelUtil;  | 
| import com.xzx.gc.GcOrderApplication;  | 
| import com.xzx.gc.common.Result;  | 
| import com.xzx.gc.common.constant.Constants;  | 
| import com.xzx.gc.common.utils.BusinessUtil;  | 
| import com.xzx.gc.common.utils.IdUtils;  | 
| import com.xzx.gc.common.utils.gdmap.GdMapUtil;  | 
| import com.xzx.gc.entity.*;  | 
| import com.xzx.gc.model.dto.GdAreaDto;  | 
| import com.xzx.gc.order.mapper.*;  | 
| import org.apache.tomcat.jni.Address;  | 
| import org.junit.Test;  | 
| import org.junit.runner.RunWith;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.boot.test.context.SpringBootTest;  | 
| import org.springframework.test.context.ActiveProfiles;  | 
| import org.springframework.test.context.junit4.SpringRunner;  | 
| import tk.mybatis.mapper.code.ORDER;  | 
| import tk.mybatis.mapper.entity.Example;  | 
|   | 
| import java.io.File;  | 
| import java.math.BigDecimal;  | 
| import java.math.RoundingMode;  | 
| import java.util.ArrayList;  | 
| import java.util.List;  | 
| import java.util.Map;  | 
| import java.util.concurrent.CountDownLatch;  | 
| import java.util.stream.Collectors;  | 
|   | 
| /**  | 
|  * 专页修复  | 
|  */  | 
| @RunWith(SpringRunner.class)  | 
| @SpringBootTest(classes = {GcOrderApplication.class})  | 
| @ActiveProfiles(profiles = {"temp"})  | 
| public class FixTest {  | 
|   | 
|     @Autowired  | 
|     private AddressLevelInfoMapper addressLevelInfoMapper;  | 
|   | 
|     @Autowired  | 
|     private AddressLevelInfoBatchMapper addressLevelInfoBatchMapper;  | 
|   | 
|     @Autowired  | 
|     private OrderDetailMapper orderDetailMapper;  | 
|   | 
|     @Autowired  | 
|     private OrderStorageInfoMapper orderStorageInfoMapper;  | 
|   | 
|     @Autowired  | 
|     private OrderStorageDetailMapper orderStorageDetailMapper;  | 
|   | 
|     @Autowired  | 
|     private IdUtils idUtils;  | 
|   | 
|     @Autowired  | 
|     private OtherUserMapper otherUserMapper;  | 
|     @Autowired  | 
|     private OrderMapper orderMapper;  | 
|   | 
|     @Autowired  | 
|     private OrderItemInfoMapper orderItemInfoMapper;  | 
|   | 
| //    @Test  | 
| //    public void 修复地址层级表的编码(){  | 
| //        String path="d:/AMap_adcode_citycode.xlsx";  | 
| //        ExcelReader reader = ExcelUtil.getReader(FileUtil.file(path));  | 
| //        List<List<Object>> readAll = reader.read();  | 
| //        List<AddressLevelInfo> addressLevelInfos = addressLevelInfoMapper.selectAll();  | 
| //  | 
| //        List<AddressLevelInfo> list=new ArrayList<>();  | 
| //  | 
| //        for (AddressLevelInfo addressLevelInfo : addressLevelInfos) {  | 
| //            String level3Name = addressLevelInfo.getLevel3Name();  | 
| //            String level2Name = addressLevelInfo.getLevel2Name();  | 
| //            for (List<Object> objects : readAll) {  | 
| //                if(objects.size()==3) {  | 
| //                    String name = (String) objects.get(0);  | 
| //                    String adoce = (String) objects.get(1);  | 
| //                    String citycode = (String) objects.get(2);  | 
| //                    //根据citycode找到名称  | 
| //                    String cityName = getcityName(readAll, citycode);  | 
| //  | 
| //                    if (name.equals(level3Name) && cityName.equals(level2Name)) {  | 
| //  | 
| //                        System.out.println("匹配到"+cityName+","+citycode+","+name+","+adoce);  | 
| //                        addressLevelInfo.setCitycode(citycode);  | 
| //                        addressLevelInfo.setAdcode(adoce);  | 
| //                        addressLevelInfoMapper.updateByPrimaryKeySelective(addressLevelInfo);  | 
| //                        break;  | 
| //                    }  | 
| //                }  | 
| //            }  | 
| //        }  | 
| //  | 
| //    }  | 
|   | 
|     @Test  | 
|     public void 修复地址层级表的编码2() throws InterruptedException {  | 
|         List<AddressLevelInfo> list=new ArrayList<>();  | 
|         Example example=new Example(AddressLevelInfo.class);  | 
| //        example.createCriteria().andIsNull("adcode");  | 
|         List<AddressLevelInfo> addressLevelInfos = addressLevelInfoMapper.selectByExample(example);  | 
|         CountDownLatch countDownLatch = ThreadUtil.newCountDownLatch(addressLevelInfos.size());  | 
|         for (AddressLevelInfo addressLevelInfo : addressLevelInfos) {  | 
|   | 
|             Runnable callable=()->{  | 
|                 AddressLevelInfo addressLevelInfo1 = fixAdd(addressLevelInfo);  | 
|                 if(addressLevelInfo1!=null){  | 
|                     list.add(addressLevelInfo1);  | 
|                 }  | 
|                 countDownLatch.countDown();  | 
|             };  | 
|   | 
|             ThreadUtil.execAsync(callable,true);  | 
|         }  | 
|   | 
|         countDownLatch.await();  | 
|   | 
|         if(CollUtil.isNotEmpty(list)) {  | 
|             addressLevelInfoBatchMapper.updateBatchByPrimaryKeySelective(list);  | 
|         }  | 
|     }  | 
|   | 
|     public AddressLevelInfo fixAdd(AddressLevelInfo addressLevelInfo){  | 
|         String level3Name = addressLevelInfo.getLevel3Name();  | 
|         String level2Name = addressLevelInfo.getLevel2Name();  | 
|   | 
|         Result result = GdMapUtil.findByAreaName(level3Name);  | 
|   | 
|         if(result.getCode()==0) {  | 
|             List<GdAreaDto> list = (List<GdAreaDto>) result.getData();  | 
|             if (list.size() == 1) {  | 
|                 addressLevelInfo.setCitycode(list.get(0).getCitycode());  | 
|                 addressLevelInfo.setAdcode(list.get(0).getAdcode());  | 
|             } else if(list.size()>1) {  | 
|                 Result<List<GdAreaDto>> byAreaName = GdMapUtil.findByAreaName(level2Name);  | 
|                 if(byAreaName.getCode()==0) {  | 
|                     List<GdAreaDto> data = byAreaName.getData();  | 
|                     if(data.size()>0) {  | 
|                         String citycode = data.get(0).getCitycode();  | 
|                         addressLevelInfo.setCitycode(citycode);  | 
|                         List<GdAreaDto> collect = list.stream().filter(x -> x.getCitycode().equals(citycode)).collect(Collectors.toList());  | 
|                         if (CollUtil.isNotEmpty(collect)) {  | 
|                             addressLevelInfo.setAdcode(collect.get(0).getAdcode());  | 
|                         } else {  | 
|                             System.err.println("匹配市对应区失败" + level2Name + "," + citycode + "==" + JSONUtil.toJsonStr(list));  | 
|                         }  | 
|                     }else {  | 
|                         System.err.println("匹配市失败" + level2Name);  | 
|                     }  | 
|   | 
|                 }  | 
|             }else {  | 
|                 System.err.println("匹配区失败"+level3Name);  | 
|             }  | 
|   | 
|             System.out.println("匹配到"+level2Name+","+addressLevelInfo.getCitycode()+","+level3Name+","+addressLevelInfo.getAdcode());  | 
|   | 
|             if(StrUtil.isNotBlank(addressLevelInfo.getCitycode())&&StrUtil.isNotBlank(addressLevelInfo.getAdcode())){  | 
|                return addressLevelInfo;  | 
|             }  | 
|   | 
|         }  | 
|   | 
|         return null;  | 
|   | 
|     }  | 
|   | 
|   | 
|     private String getcityName(List<List<Object>> readAll,String code){  | 
|         for (List<Object> objects : readAll) {  | 
|             if(objects.size()==3) {  | 
|                 String name = (String) objects.get(0);  | 
|                 String adoce = (String) objects.get(1);  | 
|                 String citycode = (String) objects.get(2);  | 
|                 if (citycode.equals(code)) {  | 
|                     return name;  | 
|                 }  | 
|             }  | 
|         }  | 
|         return "";  | 
|     }  | 
|   | 
|     @Test  | 
|     public void 指定回收员哪些订单入库(){  | 
|   | 
|         System.out.println("start");  | 
|         String receiver="472";  | 
|         Example example=new Example(OrderInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("receiver",receiver);  | 
|         criteria.andEqualTo("orderStatus","4");  | 
|         criteria.andLessThanOrEqualTo("createTime","2019-12-03 23:59:59");  | 
|         List<OrderInfo> orderInfos = orderMapper.selectByExample(example);  | 
| //        List<OrderInfo> orderInfos=new ArrayList<>();  | 
| //  | 
| //        String s="DD1196275805278306304,DD1196301593952256000,DD1196632895394021376,DD1196639747204841472,DD1196643257531105280,DD1196644437254602752,DD1197073829600559104,DD1197335739881357312,DD1197346586385055744,DD1197352297819144192,DD1197668095540461568,DD1198047754463608832,DD1198170901275869184,DD1198476178009227264,DD1198492224514555904,DD1198808419436462080,DD1198808823960305664,DD1198839269809061888,DD1198857459725369344,DD1199149116035301376,DD1199162750044078080,DD1199189482717446144,DD1199214392185585664,DD1199220954371325952,DD1199231880965259264,DD1199596796792406016,DD1199859477315190784,DD1199869354041278464,DD1199875477645426688,DD1199888299230101504,DD1199954145944141824,DD1199960183762190336,DD1200240149108228096,DD1200244848930717696,DD1200259857106731008,DD1200334622609776640,DD1200573291039948800,DD1200598016130678784,DD1200650205410754560,DD1200974416486465536,DD1200981872696492032,DD1200982805434204160,DD1201052333946044416,DD1201070321717870592,DD1201291665969643520,DD1201342043901788160,DD1201381950401675264,DD1201393463938121728,DD1201655979343740928,DD1201735933238575104,DD1201738093221249024,DD1201743726033108992,DD1201777301650538496,DD1201778550244507648";  | 
| //        String[] split = s.split(",");  | 
| //        for (String s1 : split) {  | 
| //            OrderInfo  orderInfo=new OrderInfo();  | 
| //            orderInfo.setOrderId(s1);  | 
| //            orderInfos.add(orderInfo);  | 
| //        }  | 
|   | 
|         BigDecimal money=Constants.MONEY_INIT;  | 
|         BigDecimal weight=Constants.WEIGHT_INIT;  | 
|   | 
| //        if(orderInfos.size()!=54){  | 
| //            System.out.println(orderInfos.size());  | 
| //            return;  | 
| //        }  | 
| //        if(orderInfos.size()!=54)return;  | 
|   | 
|         //订单id  | 
|         List<String> ids=new ArrayList<>();  | 
|         for (OrderInfo orderInfo : orderInfos) {  | 
|             String orderId = orderInfo.getOrderId();  | 
|             OrderDetailInfo orderDetailInfo=new OrderDetailInfo();  | 
|             orderDetailInfo.setOrderId(orderId);  | 
|             OrderDetailInfo orderDetailInfo1 = orderDetailMapper.selectOne(orderDetailInfo);  | 
|             money=NumberUtil.add(money,Convert.toBigDecimal(orderDetailInfo1.getMoney()));  | 
|             weight=NumberUtil.add(weight,Convert.toBigDecimal(orderDetailInfo1.getWeight()));  | 
|             ids.add(orderId);  | 
|             orderDetailInfo1.setStorageUserId("USER1190571142298341376");  | 
|             orderDetailInfo1.setStorageUserName("陈松");  | 
|             orderDetailInfo1.setStorageUserPhone("17788919577");  | 
|             orderDetailInfo1.setStorageMoney(orderDetailInfo1.getMoney());  | 
|             orderDetailMapper.updateByPrimaryKeySelective(orderDetailInfo1);  | 
|         }  | 
|   | 
|         //金额总值  | 
|         String moneyStr = NumberUtil.roundStr(money.toString(), 2, RoundingMode.DOWN);  | 
|         //重量总值  | 
|         String weightStr = NumberUtil.roundStr(weight.toString(), 3, RoundingMode.DOWN);  | 
|   | 
|   | 
|   | 
|         //订单总值  | 
|         String orderIds = StrUtil.join(",",ids);  | 
|   | 
|   | 
|         //添加入库记录  | 
|         OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(receiver);  | 
|         OrderStorageInfo orderStorageInfo=new OrderStorageInfo();  | 
|         orderStorageInfo.setStorageUserId("USER1190571142298341376");  | 
|         orderStorageInfo.setStorageStatus(Convert.toShort(0));  | 
|         orderStorageInfo.setStorageUserName("陈松");  | 
|         orderStorageInfo.setStorageUserPhone("17788919577");  | 
|         orderStorageInfo.setSysStorageId(1L);  | 
|   | 
|         orderStorageInfo.setReceiver(receiver);  | 
|         orderStorageInfo.setReceiverAvatar(otherUserInfo.getAvatar());  | 
|         orderStorageInfo.setReceiverPhone(otherUserInfo.getMobilePhone());  | 
|         orderStorageInfo.setReceiverName(otherUserInfo.getNickName());  | 
|   | 
|         orderStorageInfo.setStorageTime(DateUtil.now());  | 
|         orderStorageInfo.setOrderId(orderIds);  | 
|         String storageId=idUtils.generate("RK",2);  | 
|         orderStorageInfo.setStorageId(storageId);  | 
|   | 
|         orderStorageInfo.setRecycleMoney(Convert.toBigDecimal(moneyStr));  | 
|         orderStorageInfo.setStorageMoney(Convert.toBigDecimal(moneyStr));  | 
|         orderStorageInfo.setStorageWeight(weightStr);  | 
|         orderStorageInfo.setRecycleWeight(weightStr);  | 
|         orderStorageInfoMapper.insertSelective(orderStorageInfo);  | 
|   | 
|   | 
|         //添加入库详情  | 
|   | 
|         for (String id : ids) {  | 
|             OrderItemInfo orderItemInfo=new OrderItemInfo();  | 
|             orderItemInfo.setOrderId(id);  | 
|             List<OrderItemInfo> select = orderItemInfoMapper.select(orderItemInfo);  | 
|             for (OrderItemInfo itemInfo : select) {  | 
|                 OrderStorageDetailInfo orderStorageDetailInfo=new OrderStorageDetailInfo();  | 
|                 orderStorageDetailInfo.setStorageId(storageId);  | 
|                 orderStorageDetailInfo.setFlag("1");  | 
|                 orderStorageDetailInfo.setItemType(itemInfo.getItemType());  | 
|                 orderStorageDetailInfo.setWeight(Convert.toBigDecimal(itemInfo.getWeight()));  | 
|                 orderStorageDetailInfo.setMoney(itemInfo.getMoney());  | 
|                 OrderStorageDetailInfo orderStorageDetailInfo2=new OrderStorageDetailInfo();  | 
|                 BeanUtil.copyProperties(orderStorageDetailInfo,orderStorageDetailInfo2);  | 
|                 orderStorageDetailInfo2.setFlag("2");  | 
|                 orderStorageDetailMapper.insertSelective(orderStorageDetailInfo);  | 
|                 orderStorageDetailMapper.insertSelective(orderStorageDetailInfo2);  | 
|             }  | 
|   | 
|             OrderInfo orderInfo=new OrderInfo();  | 
|             orderInfo.setOrderId(id);  | 
|             orderInfo.setOrderStatus("5");  | 
|             orderMapper.updateByPrimaryKeySelective(orderInfo);  | 
|         }  | 
|   | 
|         System.out.println("success");  | 
|   | 
|   | 
|   | 
|     }  | 
| }  |