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<ScanDto> 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<ConfigInfoVo> 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<UserVehicleRel> 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<OrderInfo> 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<ScanDto> 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<ScanDto> rk = rk(today, scanDto, orderBatchInfo);
|
if(rk!=null){
|
return rk;
|
}
|
}
|
result.setData(scanDto);
|
return result;
|
}
|
|
|
/**
|
* 载货打卡
|
* @param today
|
* @param scanDto
|
* @param orderBatchInfo
|
* @return
|
*/
|
public Result<ScanDto> 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<OrderInfo> 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<OrderInfo> 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<String> 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<String> collect1 = select.stream().filter(x -> x.getStoreId() != null).map(OrderInfo::getOrderId).collect(Collectors.toList());
|
|
List<String> 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<String> 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<String, Dict> map = new HashMap<>();
|
for (String orderId : collect) {
|
OrderItemInfo orderItemInfo = new OrderItemInfo();
|
orderItemInfo.setOrderId(orderId);
|
List<OrderItemInfo> 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<OrderStorageDetailInfo> 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<PackageGoodsInfo> 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<String,Object> queryBatchInfoDetailList(String weightError, String startTime,String endTime,String userId,String vehicleId,String page, String limit){
|
PageHelper.startPage(Convert.toInt(page),Convert.toInt(limit));
|
List<Map<String,Object>> data = orderBatchInfoMapper.queryBatchInfoDetailList(weightError, startTime,endTime,userId,vehicleId);
|
PageInfo<Map<String,Object>> pageInfo=new PageInfo<>(data);
|
List<Map<String,String>> dataTimeWeightList = new ArrayList<>();
|
for (Map<String,Object> obj:data) {
|
//同一天的空车重量相同,对应打卡空车重量也相同。
|
String orderId = obj.get("orderId").toString();
|
if(orderId.equals("0")){
|
Map<String,String> 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<String,Object> 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<String,Object> 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<String, Object> map = new HashMap<>();
|
map.put("data", data);
|
map.put("count", pageInfo.getTotal());
|
map.put("code", 0);
|
return map;
|
}
|
|
public Map<String,Object> queryClockDetailList(String weightError, String startTime,String endTime,String userId,String vehicleId,String page, String limit){
|
PageHelper.startPage(Convert.toInt(page),Convert.toInt(limit));
|
List<Map<String,Object>> data = orderBatchInfoMapper.queryClockDetailList(weightError, startTime,endTime,userId,vehicleId);
|
PageInfo<Map<String,Object>> pageInfo=new PageInfo<>(data);
|
for (Map<String,Object> 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<String, Object> map = new HashMap<>();
|
map.put("data", data);
|
map.put("count",pageInfo.getTotal());
|
map.put("code", 0);
|
return map;
|
}
|
|
public Map<String,Object> queryBatchDetailList(String weightError, String startTime,String endTime,String userId,String vehicleId,String page, String limit){
|
PageHelper.startPage(Convert.toInt(page),Convert.toInt(limit));
|
List<Map<String,Object>> data = orderBatchInfoMapper.queryBatchDetailList(weightError, startTime,endTime,userId,vehicleId);
|
PageInfo<Map<String,Object>> pageInfo=new PageInfo<>(data);
|
for (Map<String,Object> 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<String,Object> 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<String, Object> map = new HashMap<>();
|
map.put("data", data);
|
map.put("count", pageInfo.getTotal());
|
map.put("code", 0);
|
return map;
|
}
|
|
}
|