// 匹配保存 @ModuleName(value = "提货成本管理匹配保存", logType = LogType.fi) public void saveMat(List<FiDeliverycost> aa) throws Exception { List<FiDeliverycost> arrayFide = new ArrayList<FiDeliverycost>(); double totalFdWeight = 0.0; for (FiDeliverycost fiDeliver : aa) { FiDeliverycost fiDeliverycost = get(fiDeliver.getId()); fiDeliverycost.setTs(fiDeliver.getTs()); if (fiDeliverycost == null) { throw new ServiceException("这黄单号记录可能已经删除,无法手工匹配"); } else if (fiDeliverycost.getMatStatus() == 1l || fiDeliverycost.getMatStatus() == 2l || fiDeliverycost.getMatStatus() == 3l) { throw new ServiceException("这黄单号记录已经系统匹配,不能匹配多次"); } fiDeliverycost.setFaxId(fiDeliver.getFaxId()); String longFaxId = fiDeliver.getFaxId(); List<Long> list = getPksByIds(longFaxId); if (aa.size() > 1 || list.size() > 1) { fiDeliverycost.setMatStatus(3l); } else { fiDeliverycost.setMatStatus(2l); } if (list.size() == 0) { throw new ServiceException("匹配时出错了"); } double totalWeight = 0.0; long totalPiece = 0l; StringBuffer sb = new StringBuffer(""); for (int i = 0; i < list.size(); i++) { OprFaxMain fiMain = oprFaxMainService.get(list.get(i)); fiMain.setMatchStatus(1l); totalWeight += fiMain.getTotalWeight(); totalPiece += fiMain.getTotalPiece(); if (i != (list.size() - 1)) { sb.append(fiMain.getFlightMainNo()).append(","); } else { sb.append(fiMain.getFlightMainNo()); } oprFaxMainService.save(fiMain); } fiDeliverycost.setFaxMainNo(sb.toString()); fiDeliverycost.setFaxPiece(totalPiece); fiDeliverycost.setFaxWeight(totalWeight); if (aa.size() == 1) { // 正常匹配写入重量差异 多票黄单匹配在后面处理 fiDeliverycost.setDiffWeight( DoubleUtil.sub(fiDeliverycost.getFlightWeight(), fiDeliverycost.getFaxWeight())); fiDeliverycost.setDiffAmount( Math.ceil(DoubleUtil.mul(fiDeliverycost.getDiffWeight(), fiDeliverycost.getPrice()))); } save(fiDeliverycost); totalFdWeight = DoubleUtil.add(fiDeliverycost.getFlightWeight(), totalFdWeight); arrayFide.add(fiDeliverycost); } if (aa.size() == 1) { oneFlightToManyFax(arrayFide); } else { manyFlightToOneFax(arrayFide, totalFdWeight); } }
// 取消匹配 @ModuleName(value = "提货成本管理取消匹配", logType = LogType.fi) public String qxAudit(List<FiDeliverycost> aa) throws Exception { List<Long> fiDelivAll = new ArrayList<Long>(); // 取消匹配的ID集合 for (FiDeliverycost fd : aa) { fiDelivAll.add(fd.getId()); } for (FiDeliverycost fiDeliv : aa) { FiDeliverycost fiDeliverycost = fiDeliverycostDao.get(fiDeliv.getId()); fiDeliverycost.setTs(fiDeliv.getTs()); if (fiDeliverycost.getStatus() == 1l) { throw new ServiceException("已审核数据不能进行取消匹配操作"); } if (fiDeliverycost.getMatStatus() == null || fiDeliverycost.getMatStatus() == 0l) { throw new ServiceException("未匹配的数据不能进行取消匹配操作"); } List<Long> list = getPksByIds(fiDeliverycost.getFaxId()); for (Long faxIdLong : list) { OprFaxMain fiMain = oprFaxMainService.get(faxIdLong); fiMain.setMatchStatus(0l); oprFaxMainService.save(fiMain); // 超重删除 List<OprOverweight> list2 = cusOverWeightService.find( "from OprOverweight oo where oo.departId=? and oo.flightMainNo=? and oo.status=1 ", fiDeliverycost.getDepartId(), fiMain.getFlightMainNo()); for (OprOverweight oprOverweight : list2) { oprOverweight.setStatus(0l); cusOverWeightService.save(oprOverweight); } } if (list.size() == 1) { // 保存黄单多对一的ID集合,用来判断是否一次全部取消匹配 List<FiDeliverycost> lisd = find( "from FiDeliverycost fd where fd.departId=? and fd.faxId=? and fd.id<> ? ", fiDeliverycost.getDepartId(), fiDeliverycost.getFaxId(), fiDeliverycost.getId()); List<Long> idsLongList = new ArrayList<Long>(); for (FiDeliverycost fiDt2 : lisd) { idsLongList.add(fiDt2.getId()); } if (!fiDelivAll.containsAll(idsLongList)) { throw new ServiceException("存在多条黄单记录匹配一条主单号的记录,请全部取消匹配"); } } if (fiDeliverycost.getStatus() != null && fiDeliverycost.getStatus() == 1l) { throw new ServiceException("数据已审核,不能撤销手工匹配"); } fiDeliverycost.setMatStatus(0l); fiDeliverycost.setFaxMainNo(null); fiDeliverycost.setFaxPiece(0l); fiDeliverycost.setFaxWeight(0.0); fiDeliverycost.setDiffAmount(0.0); fiDeliverycost.setDiffWeight(0.0); fiDeliverycost.setFaxId(null); fiDeliverycostDao.save(fiDeliverycost); // 撤销手工匹配 } return null; }