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> readAll = reader.read(); // List addressLevelInfos = addressLevelInfoMapper.selectAll(); // // List list=new ArrayList<>(); // // for (AddressLevelInfo addressLevelInfo : addressLevelInfos) { // String level3Name = addressLevelInfo.getLevel3Name(); // String level2Name = addressLevelInfo.getLevel2Name(); // for (List 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 list=new ArrayList<>(); Example example=new Example(AddressLevelInfo.class); // example.createCriteria().andIsNull("adcode"); List 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 list = (List) result.getData(); if (list.size() == 1) { addressLevelInfo.setCitycode(list.get(0).getCitycode()); addressLevelInfo.setAdcode(list.get(0).getAdcode()); } else if(list.size()>1) { Result> byAreaName = GdMapUtil.findByAreaName(level2Name); if(byAreaName.getCode()==0) { List data = byAreaName.getData(); if(data.size()>0) { String citycode = data.get(0).getCitycode(); addressLevelInfo.setCitycode(citycode); List 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> readAll,String code){ for (List 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 orderInfos = orderMapper.selectByExample(example); // List 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 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 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"); } }