package com.steerinfo.dil.service.impl; import com.steerinfo.dil.feign.JoinApiFeign; import com.steerinfo.dil.mapper.BmsshipStatementMapper; import com.steerinfo.dil.model.BmsshipDetailsOrder; import com.steerinfo.dil.model.BmsshipDetailsStatement; import com.steerinfo.dil.model.BmsshipStatement; import com.steerinfo.dil.service.IBmsshipStatementService; import com.steerinfo.dil.util.EASUtil; import com.steerinfo.dil.util.NoUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.*; /** * @Description: * @Author:HuJianGuo * @GreateTime:2021/9/8 19:26 * @Version:V2.0 */ @Service public class BmsshipStatementServiceImpl implements IBmsshipStatementService { @Autowired BmsshipStatementMapper bmsshipStatementMapper; @Autowired BmsshipDetailsStatementServiceImpl bmsshipDetailsStatementService; @Autowired BmsshipDetailsOrderSerivceImpl bmsshipDetailsOrderSerivce; @Autowired BmstruckFormulaServiceImpl bmstruckFormulaService; @Autowired NoUtil noUtil; @Autowired JoinApiFeign joinApiFeign; @Autowired EASUtil easUtil; /** * 生成水运费账单 * @param listMap * @return */ @Transactional @Override public int insertSelective(List> listMap) throws Exception { // 生成水运费账单 BmsshipStatement bmsshipStatement = new BmsshipStatement(); BigDecimal statementId = selectMaxId(); bmsshipStatement.setStatementId(statementId); String statementNo = noUtil.setResultNo("CYZD",statementId); bmsshipStatement.setStatementNo(statementNo); BigDecimal statementShipperId = new BigDecimal((Integer) listMap.get(0).get("statementShipperId")); bmsshipStatement.setStatementShipperId(statementShipperId); bmsshipStatement.setStatementDate(new Date()); // 设置常规字段 bmsshipStatement.setInsertTime(new Date()); bmsshipStatement.setInsertUsername("admin"); bmsshipStatement.setUpdateTime(new Date()); bmsshipStatement.setUpdateUsername("admin"); bmsshipStatement.setInsertUpdateRemark("无"); Double doubleTotalAmount = new Double(0); // 详单-账单 List list = new LinkedList<>(); for (int i = 0;i < listMap.size(); i++) { BigDecimal detailsStatementId = bmsshipDetailsStatementService.selectMaxId(); BigDecimal detailsId = new BigDecimal((Integer) listMap.get(i).get("detailsId")); BmsshipDetailsOrder bmsshipDetailsOrder = bmsshipDetailsOrderSerivce.selectByPrimaryKey(detailsId); bmsshipDetailsOrder.setWetherToStatement(new BigDecimal(1)); bmsshipDetailsOrderSerivce.updateByPrimaryKeySelective(bmsshipDetailsOrder); BmsshipDetailsStatement bmsshipDetailsStatement = new BmsshipDetailsStatement(); bmsshipDetailsStatement.setDetailsStatementId(detailsStatementId); bmsshipDetailsStatement.setStatementId(statementId); bmsshipDetailsStatement.setDetailsId(detailsId); // 设置常规字段 bmsshipDetailsStatement.setInsertTime(new Date()); bmsshipDetailsStatement.setInsertUsername("admin"); bmsshipDetailsStatement.setUpdateTime(new Date()); bmsshipDetailsStatement.setUpdateUsername("admin"); bmsshipDetailsStatement.setInsertUpdateRemark("无"); list.add(bmsshipDetailsStatement); Object detailsAmount = listMap.get(i).get("detailsAmount"); Double detailsAmountDouble = Double.valueOf(detailsAmount.toString()); doubleTotalAmount += detailsAmountDouble; bmsshipDetailsStatementService.insertSelective(bmsshipDetailsStatement); } DecimalFormat df = new DecimalFormat("0.00"); String statementTotalAmount = df.format(doubleTotalAmount); bmsshipStatement.setStatementTotalAmount(new BigDecimal(statementTotalAmount)); bmsshipStatement.setStatementType("水运费"); int code = bmsshipStatementMapper.insertSelective(bmsshipStatement); // 调用金蝶接口 List> entries = joinApiFeign.getPurchaseShipDetails(statementId.intValue()); Map head = joinApiFeign.getShipStatement(statementId.intValue()); Map input = new HashMap<>(); input.put("head",head); input.put("entries",entries); Map totalMap = easUtil.getTotalMap(); totalMap.put("input",input); joinApiFeign.WSFaceWay(totalMap); return code; } /** * 生成质检费账单 * @param mapList * @return */ public int insertWaterFeesStatement(List> mapList) throws Exception { // 生成水运费账单 BmsshipStatement bmsshipStatement = new BmsshipStatement(); Map map = mapList.get(0); BigDecimal batchId = new BigDecimal((Integer) map.get("batchId")); BigDecimal statementId = selectMaxId(); bmsshipStatement.setStatementId(statementId); bmsshipStatement.setBatchId(batchId); String statementNo = noUtil.setResultNo("ZD",statementId); bmsshipStatement.setStatementNo(statementNo); bmsshipStatement.setStatementDate(new Date()); BigDecimal doubleTotalAmount = bmstruckFormulaService.generateWaterFees(mapList); // 详单-账单 DecimalFormat df = new DecimalFormat("0.00"); String statementTotalAmount = df.format(doubleTotalAmount.doubleValue()); bmsshipStatement.setStatementTotalAmount(new BigDecimal(statementTotalAmount)); bmsshipStatement.setStatementType("水分检测费"); // 设置常规字段 bmsshipStatement.setInsertTime(new Date()); bmsshipStatement.setInsertUsername("admin"); bmsshipStatement.setUpdateTime(new Date()); bmsshipStatement.setUpdateUsername("admin"); bmsshipStatement.setInsertUpdateRemark("无"); bmsshipStatement.setStatementShipperId(new BigDecimal(1)); int code = bmsshipStatementMapper.insertSelective(bmsshipStatement); // 调用金蝶接口 Map totalMap = easUtil.getTotalMap(); Map input = joinApiFeign.getShipStatement(statementId.intValue()); totalMap.put("input",input); joinApiFeign.WSFaceWay(totalMap); return code; } /** * 生成物流途损超标扣款账单 * @param batchId * @return */ public int insertLossStatement(BigDecimal batchId) throws Exception { // 生成水运费账单 BmsshipStatement bmsshipStatement = new BmsshipStatement(); BigDecimal statementId = selectMaxId(); bmsshipStatement.setStatementId(statementId); String statementNo = noUtil.setResultNo("ZD",statementId); bmsshipStatement.setStatementNo(statementNo); bmsshipStatement.setStatementDate(new Date()); BigDecimal statementShipperId = bmsshipStatementMapper.getCarrierId(batchId); bmsshipStatement.setStatementShipperId(statementShipperId); BigDecimal doubleTotalAmount = bmstruckFormulaService.generateLossCost(batchId); // 详单-账单 DecimalFormat df = new DecimalFormat("0.00"); String statementTotalAmount = df.format(doubleTotalAmount.doubleValue()); bmsshipStatement.setStatementTotalAmount(new BigDecimal(statementTotalAmount)); bmsshipStatement.setStatementType("物流途损超标扣款"); bmsshipStatement.setBatchId(batchId); // 设置常规字段 bmsshipStatement.setInsertTime(new Date()); bmsshipStatement.setInsertUsername("admin"); bmsshipStatement.setUpdateTime(new Date()); bmsshipStatement.setUpdateUsername("admin"); bmsshipStatement.setInsertUpdateRemark("无"); int code = bmsshipStatementMapper.insertSelective(bmsshipStatement); // 调用金蝶接口 Map totalMap = easUtil.getTotalMap(); Map input = joinApiFeign.getShipStatement(statementId.intValue()); totalMap.put("input",input); joinApiFeign.WSFaceWay(totalMap); return code; } /** * 得到最大id * @return */ @Override public BigDecimal selectMaxId() { return bmsshipStatementMapper.selectStatementId(); } /** * 展示账单信息 * @param mapValue * @return */ @Override public List> getStatementList(Map mapValue) { return bmsshipStatementMapper.getStatementList(mapValue); } /** * 展示账单中的详单 * @param mapValue * @return */ @Override public List> getDetailsOrder(Map mapValue) { return bmsshipStatementMapper.getDetailsOrder(mapValue); } /** * 得到总金额和支付单位 * @param batchId * @return */ @Override public List> getShipperAndAmount(BigDecimal batchId) { return bmsshipStatementMapper.getShipperAndAmount(batchId); } /** * 得到汽运实绩 * @param batchId * @return */ @Override public List> getTruckResult(BigDecimal batchId) { return bmsshipStatementMapper.getTruckResult(batchId); } /** * 得到船运实绩 * @param mapVal * @return */ @Override public List> getShipResult(Map mapVal) { return bmsshipStatementMapper.getShipResult(mapVal); } /** * 展示途损费账单列表 * @param mapValue * @return */ @Override public List> getLossStatementList(Map mapValue) { return bmsshipStatementMapper.getLossStatementList(mapValue); } /** * 展示水分检测实绩 * @param mapValue * @return */ @Override public List> getWaterResult(Map mapValue) { return bmsshipStatementMapper.getWaterResult(mapValue); } /** * 得到批次信息 * @param mapVal * @return */ @Override public List> getBatch(Map mapVal) { return bmsshipStatementMapper.getBatch(mapVal); } }