package com.xzx.gc.order.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.Result; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.OrderEnum; import com.xzx.gc.common.utils.*; import com.xzx.gc.entity.*; import com.xzx.gc.model.order.ScanDto; import com.xzx.gc.model.system.ConfigInfoReq; import com.xzx.gc.model.system.ConfigInfoVo; import com.xzx.gc.order.mapper.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tk.mybatis.mapper.entity.Example; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * 打卡入库 */ @Service @Transactional @Slf4j public class OrderBatchInfoService { @Autowired private OrderBatchInfoMapper orderBatchInfoMapper; @Autowired private OrderMapper orderMapper; @Autowired private OrderService orderService; @Autowired private PackageGoodsInfoService packageGoodsInfoService; @Autowired private RedisUtil redisUtil; @Autowired private OrderClockInMapper orderClockInMapper; @Autowired private OrderStorageInfoMapper orderStorageInfoMapper; @Autowired private OrderItemInfoMapper orderItemInfoMapper; @Autowired private OtherUserMapper otherUserMapper; @Autowired private OrderStorageDetailMapper orderStorageDetailMapper; @Autowired private JGUtil jgUtil; @Autowired private IdUtils idUtils; @Autowired private ConfigService configService; @Autowired private UserVehicleRelMapper userVehicleRelMapper; @Autowired private VehicleInfoMapper vehicleInfoMapper; @Autowired private BusinessUtil businessUtil; @Autowired private SysStorageService sysStorageService; @Autowired private SysEnvironmentalInfoService sysEnvironmentalInfoService; @Autowired private JGPushUtil jgPushUtil; /** * 极光推送入库相关信息 * * @param scanDto */ private void sendToAnroid(ScanDto scanDto) { //如果是主动发起的请求 或者 定时请求但是结果是成功的则需要推送一条数据 if(OrderEnum.主动请求.getValue().equals(Convert.toStr(scanDto.getTimeFlag(),OrderEnum.定时请求.getValue()))||Constants.RESULT_SUCCESS==scanDto.getCode()){ jgPushUtil.pushClock(scanDto); } } /** * 扫码打卡 * @param orderBatchInfo * @return */ public Result add(OrderBatchInfo orderBatchInfo) { ScanDto scanDto = new ScanDto(); scanDto.setTimeFlag(orderBatchInfo.getTimeFlag()); scanDto.setUserId(orderBatchInfo.getUserId()); Result result = new Result(); //空车误差百分比 BigDecimal between= BigDecimal.ZERO; ConfigInfoReq configInfoReq=new ConfigInfoReq(); configInfoReq.setConfigTypeCode("BETWEEN_WEIGHT"); List configInfoVos = configService.configInfoQuery(configInfoReq); if(CollUtil.isNotEmpty(configInfoVos)){ between=Convert.toBigDecimal(configInfoVos.get(0).getConfigValue()); } BigDecimal minWeight = BigDecimal.ZERO; UserVehicleRel userVehicleRel=new UserVehicleRel(); userVehicleRel.setUserId(orderBatchInfo.getUserId()); userVehicleRel.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG)); List select1 = userVehicleRelMapper.select(userVehicleRel); Long vehicleId=null; if(CollUtil.isNotEmpty(select1)){ vehicleId = select1.get(0).getVehicleId(); VehicleInfo vehicleInfo=new VehicleInfo(); vehicleInfo.setId(vehicleId); vehicleInfo.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG)); VehicleInfo vehicleInfo1 = vehicleInfoMapper.selectOne(vehicleInfo); minWeight=Convert.toBigDecimal(vehicleInfo1.getWeight()); log.info("当前用户:{},空车重量:{}",orderBatchInfo.getUserId(),minWeight); }else{ scanDto.setReason("没有绑定车辆"); scanDto.setCode(Constants.RESULT_ERROR); scanDto.setReasonDesc("没有与当前用户:{"+orderBatchInfo.getUserId()+"}绑定的车辆"); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "没有与当前用户绑定的车辆"); } //设置车辆 orderBatchInfo.setVehicleId(vehicleId); //打卡时间 String createTime = orderBatchInfo.getCreateTime(); DateTime parse = DateUtil.parse(createTime, DateUtils.DATE_FORMAT_YMD); DateTime parse2= DateUtil.parse(DateUtil.now(),DateUtils.DATE_FORMAT_YMD); if(!DateUtil.isSameDay(parse,parse2)){ log.warn("地磅时间不准确,请校准"); scanDto.setReason("地磅时间不准确,请校准"); scanDto.setCode(Constants.RESULT_ERROR); scanDto.setReasonDesc("地磅时间不对:错误时间为"+createTime); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "地磅时间不准确"); } OrderClockIn today = orderClockInMapper.findToday(orderBatchInfo.getUserId(), StrUtil.split(createTime, " ")[0]); if (today == null) { boolean lock=false; //空车打卡 try { List select= orderService.findDetailByReceiverAndStatus(orderBatchInfo.getUserId(),OrderEnum.待入库.getValue()); //判断是否还存在待入库的订单 if (CollUtil.isNotEmpty(select)) { //入库打卡 打卡时间更改为最近订单完成时间的当天空车打卡时间 String completeTime = select.get(0).getCompleteTime(); //当天可能属于不用打卡的配置里 取不到打卡重量则取车重为打卡重量 today = orderClockInMapper.findToday(orderBatchInfo.getUserId(), StrUtil.split(completeTime, " ")[0]); if(today==null){ today=new OrderClockIn(); today.setWeight(Convert.toStr(minWeight)); } Result rk = rk(today, scanDto, orderBatchInfo); if(rk!=null){ return rk; } }else { scanDto.setDesc("空车打卡失败"); scanDto.setType(OrderEnum.空车.getValue()); //防重复打卡 if (redisUtil.setnx(Constants.REDIS_ORDER_KEY + "clock:" + orderBatchInfo.getUserId(), orderBatchInfo.getUserId())) { lock = true; OrderClockIn today1 = orderClockInMapper.findToday(orderBatchInfo.getUserId(), StrUtil.split(createTime, "")[0]); if (today1 != null) { scanDto.setReason("您今天已打过卡了"); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "您今天已打过卡了"); } String weight = orderBatchInfo.getWeight(); if (Convert.toBigDecimal(weight).compareTo(minWeight) < 0) { scanDto.setReason("当前重量异常,请确保货车已在地秤上"); scanDto.setReasonDesc("空车当前重量为:" + weight + ",最小重量为:" + minWeight); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "当前重量异常,请确保货车已在地秤上:" + weight); } //空车最大范围 BigDecimal maxWeight = NumberUtil.add(minWeight, NumberUtil.mul(minWeight, between)); if (Convert.toBigDecimal(weight).compareTo(maxWeight) > 0) { scanDto.setReason("当前重量异常,已超过最大重量"); scanDto.setReasonDesc("空车当前重量为:" + weight + ",最大重量为:" + maxWeight); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "当前重量异常,已超过最大重量:" + weight); } OrderClockIn orderClockIn = new OrderClockIn(); BeanUtils.copyProperties(orderBatchInfo, orderClockIn); orderClockInMapper.insertSelective(orderClockIn); scanDto.setCreateTime(DateUtil.parse(createTime).toString(DateUtils.DATE_FORMAT_YMDHM)); scanDto.setEmptyWeight(Convert.toBigDecimal(orderBatchInfo.getWeight())); scanDto.setDesc("空车打卡成功"); sendToAnroid(scanDto); } } } catch (Exception e) { scanDto.setReason("程序异常"); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); ExceptionUtils.err(Constants.RESULT_ERROR, "空车打卡失败", e); } finally { if(lock) { redisUtil.del(Constants.REDIS_ORDER_KEY + "clock:" + orderBatchInfo.getUserId()); } } } else { /*********入库*****************/ Result rk = rk(today, scanDto, orderBatchInfo); if(rk!=null){ return rk; } } result.setData(scanDto); return result; } /** * 载货打卡 * @param today * @param scanDto * @param orderBatchInfo * @return */ public Result rk( OrderClockIn today,ScanDto scanDto,OrderBatchInfo orderBatchInfo){ String orderIds = ""; boolean lock=false; try { BigDecimal bigDecimal = Convert.toBigDecimal(today.getWeight()); if (Convert.toBigDecimal(orderBatchInfo.getWeight()).compareTo(bigDecimal) <= 0) { scanDto.setReason("当前重量异常,请确保货车已在地秤上"); scanDto.setReasonDesc("空车当前重量为:" + today.getWeight() + ",载货重量为:" + orderBatchInfo.getWeight()); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "重量异常,请确保货车已在地秤上:" + orderBatchInfo.getWeight()); } scanDto.setDesc("载货打卡失败"); scanDto.setType(OrderEnum.载货.getValue()); String userId = orderBatchInfo.getUserId(); String timeOrder=""; //获取用户所有待入库订单 List select= orderService.findDetailByReceiverAndStatus(orderBatchInfo.getUserId(),OrderEnum.待入库.getValue()); if (CollUtil.isEmpty(select)) { scanDto.setReason("没有待入库的订单"); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "没有待入库的订单"); }else { //筛选比打卡时间晚的订单 地磅自动修复的BUG for (Iterator iterator = select.iterator(); iterator.hasNext(); ) { OrderInfo orderInfo = iterator.next(); String completeTime = orderInfo.getCompleteTime(); DateTime parse3 = DateUtil.parse(orderBatchInfo.getCreateTime(), DateUtils.DATE_FORMAT_YMDHMS); DateTime parse4= DateUtil.parse(completeTime,DateUtils.DATE_FORMAT_YMDHMS); //订单完成时间比打卡时间晚 则过滤掉 if(DateUtil.compare(parse4,parse3)>=0){ timeOrder=orderInfo.getOrderId()+","; iterator.remove(); } } } if (CollUtil.isEmpty(select)) { scanDto.setReason("没有待入库的订单"); scanDto.setCode(Constants.RESULT_ERROR); scanDto.setReasonDesc("没有待入库的订单,存在订单:【"+timeOrder+"】已超出打卡时间"+orderBatchInfo.getCreateTime()+"的情况"); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "没有待入库的订单"); } List collect = select.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()); String join = CollUtil.join(collect, ","); orderIds = join; //防止重复扫码 if (redisUtil.setnx(Constants.REDIS_ORDER_KEY + "batch:" + join, join)) { lock=true; //二次验证 Example example1 = new Example(OrderBatchInfo.class); example1.createCriteria().andEqualTo("orderId", join); OrderBatchInfo orderBatchInfo1 = orderBatchInfoMapper.selectOneByExample(example1); if (orderBatchInfo1 != null) { scanDto.setReason("当前订单已被扫码"); scanDto.setReasonDesc("订单号:" + join); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); return Result.error(Constants.RESULT_ERROR, "当前订单已被扫码"); } orderBatchInfo.setStatus(Convert.toShort(1)); orderBatchInfo.setOrderId(join); orderBatchInfoMapper.insertSelective(orderBatchInfo); //入库相关数据库操作 List collect1 = select.stream().filter(x -> x.getStoreId() != null).map(OrderInfo::getOrderId).collect(Collectors.toList()); List collect2 = select.stream().filter(x -> x.getStoreId() == null).map(OrderInfo::getOrderId).collect(Collectors.toList()); //门店下单的数据 BigDecimal weight=BigDecimal.ZERO; if(CollUtil.isNotEmpty(collect1)){ String storageId = idUtils.generate("RK", 0); Dict dict = addDB(userId, collect1,storageId,1,null); if (dict.get("recycleWeight") != null) { weight=NumberUtil.add(weight,Convert.toBigDecimal(dict.getStr("recycleWeight"))); } } //正常下单的数据 if(CollUtil.isNotEmpty(collect2)){ String storageId = idUtils.generate("RK", 2); Dict dict = addDB(userId, collect2,storageId,1,null); if (dict.get("recycleWeight") != null) { weight=NumberUtil.add(weight,Convert.toBigDecimal(dict.getStr("recycleWeight"))); } } scanDto.setOrderWeight(Convert.toBigDecimal(businessUtil.changeWeight(Convert.toStr(weight)))); scanDto.setCreateTime(DateUtil.parse(orderBatchInfo.getCreateTime()).toString(DateUtils.DATE_FORMAT_YMDHM)); scanDto.setWeight(Convert.toBigDecimal(orderBatchInfo.getWeight())); scanDto.setDesc("载货打卡成功"); scanDto.setEmptyWeight(Convert.toBigDecimal(today.getWeight())); sendToAnroid(scanDto); } } catch (Exception e) { redisUtil.hincrBy(Constants.REDIS_ORDER_KEY+"storage:errcount",orderBatchInfo.getUserId(),1); scanDto.setReason("程序异常"); scanDto.setCode(Constants.RESULT_ERROR); sendToAnroid(scanDto); ExceptionUtils.err(Constants.RESULT_ERROR, "载货打卡失败", e); } finally { if(lock) { redisUtil.del(Constants.REDIS_ORDER_KEY + "batch:" + orderIds); } } return null; } /** * 入库信息操作 * @param userId * @param collect * @return */ public Dict addDB(String userId, List collect,String storageId,int usertype,String packageId) { Dict res = Dict.create(); /*******入库新增*******/ String join = CollUtil.join(collect, ","); OrderStorageInfo orderStorageInfo = new OrderStorageInfo(); orderStorageInfo.setStorageId(storageId); orderStorageInfo.setOrderId(join); orderStorageInfo.setStorageStatus(Convert.toShort(OrderEnum.入库检验中.getValue())); //回收价格 BigDecimal recycleMmoney = BigDecimal.ZERO; BigDecimal recycleWeight = BigDecimal.ZERO; Map map = new HashMap<>(); for (String orderId : collect) { OrderItemInfo orderItemInfo = new OrderItemInfo(); orderItemInfo.setOrderId(orderId); List select1 = orderItemInfoMapper.select(orderItemInfo); if (CollUtil.isNotEmpty(select1)) { for (OrderItemInfo itemInfo : select1) { if (StringUtils.isNotBlank(itemInfo.getMoney()) && Convert.toBigDecimal(itemInfo.getMoney()).compareTo(BigDecimal.ZERO)!=0) { recycleMmoney = NumberUtil.add(recycleMmoney, new BigDecimal(itemInfo.getMoney())); } if (StringUtils.isNotBlank(itemInfo.getWeight()) &&Convert.toBigDecimal(itemInfo.getWeight()).compareTo(BigDecimal.ZERO)!=0) { recycleWeight = NumberUtil.add(recycleWeight, new BigDecimal(itemInfo.getWeight())); } String itemType = itemInfo.getItemType(); String weight = StrUtil.isBlank(itemInfo.getWeight())?Constants.WEIGHT_INIT.toString():itemInfo.getWeight(); String amount = StrUtil.isBlank(itemInfo.getAmount())?"0":itemInfo.getAmount(); String money = StrUtil.isBlank(itemInfo.getMoney())?Constants.MONEY_INIT.toString():itemInfo.getMoney(); String price=StrUtil.isBlank(itemInfo.getPrice())?Constants.MONEY_INIT.toString():itemInfo.getPrice(); String rkPrice=StrUtil.isBlank(itemInfo.getPrice())?Constants.MONEY_INIT.toString():itemInfo.getPrice(); if(usertype==1&&StrUtil.isNotBlank(packageId)) { //入库员要根据仓库id查找对应的入库价格 String area = sysStorageService.findById(Convert.toInt(packageId)).getArea(); BigDecimal putStoragePrice = sysEnvironmentalInfoService.findByItemTypeAndArea(itemType, Convert.toInt(area)).getPutStoragePrice(); rkPrice=businessUtil.changeMoney(putStoragePrice); } if (map.containsKey(itemType)) { Dict dict = map.get(itemType); if (dict.getBigDecimal("weight") != null) { dict.set("weight", NumberUtil.add(dict.getBigDecimal("weight"), new BigDecimal(weight))); } if (dict.getBigDecimal("amount") != null) { dict.set("amount", NumberUtil.add(dict.getBigDecimal("amount"), new BigDecimal(amount))); } if (dict.getBigDecimal("money") != null) { dict.set("money", NumberUtil.add(dict.getBigDecimal("money"), new BigDecimal(money))); } } else { Dict dict = Dict.create().set("weight", weight).set("amount", amount).set("money", money).set("price",price).set("rkPrice",rkPrice); map.put(itemType, dict); } } } //更改订单状态 OrderInfo orderInfo1 = new OrderInfo(); orderInfo1.setOrderId(orderId); //更新订单状态 orderInfo1.setOrderStatus(OrderEnum.入库中.getValue()); orderMapper.updateByPrimaryKeySelective(orderInfo1); } orderStorageInfo.setRecycleMoney(recycleMmoney); orderStorageInfo.setRecycleWeight(Convert.toStr(recycleWeight)); res.set("recycleWeight", orderStorageInfo.getRecycleWeight()); res.set("recycleMoney", Convert.toStr(orderStorageInfo.getRecycleMoney())); orderStorageInfo.setReceiver(userId); OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(userId); if (otherUserInfo != null) { orderStorageInfo.setReceiverName(otherUserInfo.getName()); orderStorageInfo.setReceiverPhone(otherUserInfo.getMobilePhone()); orderStorageInfo.setReceiverAvatar(otherUserInfo.getAvatar()); } //添加入库记录 if(usertype==1){ orderStorageInfo.setSysStorageType(Convert.toShort(OrderEnum.仓库.getValue())); }else if(usertype==2){ orderStorageInfo.setSysStorageType(Convert.toShort(OrderEnum.打包站.getValue())); } if(packageId!=null) { orderStorageInfo.setSysStorageId(Convert.toLong(packageId)); } orderStorageInfoMapper.insertSelective(orderStorageInfo); res.set("storageId", storageId); /*************添加入库明细********************/ List list = new ArrayList<>(); if(usertype==1) { for (String s : map.keySet()) { OrderStorageDetailInfo orderStorageDetailInfo = new OrderStorageDetailInfo(); orderStorageDetailInfo.setStorageId(storageId); //回收 orderStorageDetailInfo.setFlag(OrderEnum.回收型.getValue()); orderStorageDetailInfo.setItemType(s); orderStorageDetailInfo.setMoney(map.get(s).getStr("money")); orderStorageDetailInfo.setWeight(new BigDecimal(map.get(s).getStr("weight"))); orderStorageDetailInfo.setAmount(map.get(s).getStr("amount")); orderStorageDetailInfo.setPrice(map.get(s).getStr("price")); orderStorageDetailMapper.insertSelective(orderStorageDetailInfo); list.add(orderStorageDetailInfo); OrderStorageDetailInfo orderStorageDetailInfo2 = new OrderStorageDetailInfo(); BeanUtils.copyProperties(orderStorageDetailInfo, orderStorageDetailInfo2); orderStorageDetailInfo2.setPrice(map.get(s).getStr("rkPrice")); orderStorageDetailInfo2.setFlag(OrderEnum.入库型.getValue()); orderStorageDetailMapper.insertSelective(orderStorageDetailInfo2); } }else if(usertype==2){ List byPackageId = packageGoodsInfoService.findByPackageId(packageId); if(CollUtil.isNotEmpty(byPackageId)){ for (PackageGoodsInfo packageGoodsInfo : byPackageId) { OrderStorageDetailInfo orderStorageDetailInfo = new OrderStorageDetailInfo(); orderStorageDetailInfo.setStorageId(storageId); //回收 orderStorageDetailInfo.setFlag(OrderEnum.回收型.getValue()); orderStorageDetailInfo.setItemType(packageGoodsInfo.getItemType()); orderStorageDetailInfo.setMoney(Constants.MONEY_INIT.toString()); orderStorageDetailInfo.setWeight(Constants.WEIGHT_INIT); orderStorageDetailInfo.setAmount("0"); orderStorageDetailMapper.insertSelective(orderStorageDetailInfo); list.add(orderStorageDetailInfo); OrderStorageDetailInfo orderStorageDetailInfo2 = new OrderStorageDetailInfo(); BeanUtils.copyProperties(orderStorageDetailInfo, orderStorageDetailInfo2); orderStorageDetailInfo2.setFlag(OrderEnum.入库型.getValue()); orderStorageDetailMapper.insertSelective(orderStorageDetailInfo2); } } } res.set("detail", list); return res; } public Map queryBatchInfoDetailList(String weightError, String startTime,String endTime,String userId,String vehicleId,String page, String limit){ PageHelper.startPage(Convert.toInt(page),Convert.toInt(limit)); List> data = orderBatchInfoMapper.queryBatchInfoDetailList(weightError, startTime,endTime,userId,vehicleId); PageInfo> pageInfo=new PageInfo<>(data); List> dataTimeWeightList = new ArrayList<>(); for (Map obj:data) { //同一天的空车重量相同,对应打卡空车重量也相同。 String orderId = obj.get("orderId").toString(); if(orderId.equals("0")){ Map map = new HashMap<>(); String time = obj.get("createtime").toString(); String[] dayStr = time.split(" "); String cweight = obj.get("cweight").toString(); map.put("day",dayStr[0]); map.put("clockWeight",cweight); dataTimeWeightList.add(map); obj.put("clockWeight","-"); } obj.put("orderid",orderId); } //赋值给载重车的空车重量 for (Map obj:data) { String orderId = obj.get("orderId").toString(); BigDecimal we = new BigDecimal("0"); if(!"0".equals(orderId)){ String time = obj.get("createtime").toString(); String timeStr = time.split(" ")[0]; Map clockObj =orderBatchInfoMapper.queryEmptyWeight(weightError, timeStr+" 00:00:00",timeStr+" 23:59:59",userId,vehicleId); if(null!=clockObj){ obj.put("clockWeight",clockObj.get("cweight").toString()); we = new BigDecimal(obj.get("cweight").toString()).subtract(new BigDecimal(clockObj.get("cweight").toString())); } }else{ we = new BigDecimal(obj.get("cweight").toString()).subtract(new BigDecimal(obj.get("vweight").toString())); } obj.put("weightError",we.toString()); } Map map = new HashMap<>(); map.put("data", data); map.put("count", pageInfo.getTotal()); map.put("code", 0); return map; } public Map queryClockDetailList(String weightError, String startTime,String endTime,String userId,String vehicleId,String page, String limit){ PageHelper.startPage(Convert.toInt(page),Convert.toInt(limit)); List> data = orderBatchInfoMapper.queryClockDetailList(weightError, startTime,endTime,userId,vehicleId); PageInfo> pageInfo=new PageInfo<>(data); for (Map obj:data) { obj.put("clockWeight","-"); BigDecimal we = new BigDecimal("0"); we = new BigDecimal(obj.get("cweight").toString()).subtract(new BigDecimal(obj.get("vweight").toString())); obj.put("weightError",we.toString()); obj.put("orderid",obj.get("orderId").toString()); } Map map = new HashMap<>(); map.put("data", data); map.put("count",pageInfo.getTotal()); map.put("code", 0); return map; } public Map queryBatchDetailList(String weightError, String startTime,String endTime,String userId,String vehicleId,String page, String limit){ PageHelper.startPage(Convert.toInt(page),Convert.toInt(limit)); List> data = orderBatchInfoMapper.queryBatchDetailList(weightError, startTime,endTime,userId,vehicleId); PageInfo> pageInfo=new PageInfo<>(data); for (Map obj:data) { //计算当天打卡空车重量 String time = obj.get("createtime").toString(); if(null!=obj.get("orderId")){ obj.put("orderid",obj.get("orderId").toString()); } String timeStr = time.split(" ")[0]; Map clockObj =orderBatchInfoMapper.queryEmptyWeight(weightError, timeStr+" 00:00:00",timeStr+" 23:59:59",userId,vehicleId); if(null!=clockObj){ obj.put("clockWeight",clockObj.get("cweight").toString()); BigDecimal we = new BigDecimal("0"); we = new BigDecimal(obj.get("bweight").toString()).subtract(new BigDecimal(clockObj.get("cweight").toString())); obj.put("weightError",we.toString()); } } Map map = new HashMap<>(); map.put("data", data); map.put("count", pageInfo.getTotal()); map.put("code", 0); return map; } }