package com.steerinfo.dil.service.impl; import com.steerinfo.dil.feign.JoinApiFeign; import com.steerinfo.dil.mapper.BmstruckCheckMapper; import com.steerinfo.dil.mapper.BmstruckDetailsOrderMapper; import com.steerinfo.dil.mapper.BmstruckDetailsStatementMapper; import com.steerinfo.dil.model.BmstruckCheck; import com.steerinfo.dil.model.BmstruckDetailsOrder; import com.steerinfo.dil.model.BmstruckDetailsStatement; import com.steerinfo.dil.util.DataChange; import com.steerinfo.dil.util.EASUtil; import com.steerinfo.dil.util.NoUtil; import com.steerinfo.dil.model.BmstruckStatement; import com.steerinfo.dil.mapper.BmstruckStatementMapper; import com.steerinfo.dil.service.IBmstruckStatementService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; import java.util.*; import java.math.BigDecimal; /** * BmstruckStatement服务实现: * * @author generator * @version 1.0-SNAPSHORT 2021-10-15 06:20 * 类描述 * 修订历史: * 日期:2021-10-15 * 作者:generator * 参考: * 描述:BmstruckStatement服务实现 * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. * @see null */ @Service(value = "bmstruckStatementService") public class BmstruckStatementServiceImpl implements IBmstruckStatementService { @Autowired BmstruckStatementMapper bmstruckStatementMapper; @Autowired BmstruckDetailsStatementMapper bmstruckDetailsStatementMapper; @Autowired BmstruckDetailsOrderMapper bmstruckDetailsOrderMapper; @Autowired BmstruckCheckMapper bmstruckCheckMapper; @Autowired NoUtil noUtil; @Autowired JoinApiFeign joinApiFeign; @Autowired EASUtil easUtil; /** * 展示计费账单 * * @param mapValue * @return */ @Override public List> getTruckStatementList(Map mapValue) { List> mapList = bmstruckStatementMapper.getTruckStatementList(mapValue); return mapList; } /** * 生成汽运账单 * * @param map * @return */ @Transactional @Override public int addTruckStatement(Map map) throws Exception { BigDecimal excludeTax = DataChange.dataToBigDecimal( map.get("excludeTax")); String url = map.get("url").toString(); //查询统计信息 Map count = bmstruckStatementMapper.getDetails(map); //查询单位 List> companys = bmstruckStatementMapper.getDetailIds(map); if(companys.size()>1){ throw new Exception("存在多个承运商和收货客户!请检查所勾选的订单!"); }else if(companys.size() == 0){ throw new Exception("没有查询到承运商和收货客户!"); } //校验是否已经绑定账单 List oldStatementIds= bmstruckStatementMapper.getStatementIds(map); if(oldStatementIds.size()>0){ //删除所有订单 bmstruckStatementMapper.batchDelete(oldStatementIds); //取消所有绑定 bmstruckStatementMapper.updateAllBind(oldStatementIds); } BmstruckStatement bmstruckStatement = new BmstruckStatement(); bmstruckStatement.setCarNum(DataChange.dataToBigDecimal(count.get("carNum")).setScale(2,BigDecimal.ROUND_HALF_UP)); bmstruckStatement.setSumAmount(DataChange.dataToBigDecimal(count.get("sumAmount")).setScale(2,BigDecimal.ROUND_HALF_UP)); bmstruckStatement.setConsigneeId(DataChange.dataToBigDecimal(companys.get(0).get("consigneeId"))); bmstruckStatement.setCarrierId(DataChange.dataToBigDecimal(companys.get(0).get("carrierId"))); bmstruckStatement.setStatementExcludTax(excludeTax.setScale(2,BigDecimal.ROUND_HALF_UP)); bmstruckStatement.setPhoto(url); // 汽运账单主键 BigDecimal statementId = bmstruckStatementMapper.selectStatementId(); bmstruckStatement.setStatementId(statementId); // 汽运账单编号 String statementNumber = noUtil.setResultNo("QYZD", statementId); bmstruckStatement.setStatementNumber(statementNumber); // 支付单位 bmstruckStatement.setStatementPaymentUnit("四川达州钢铁集团有限责任公司"); // 备注 bmstruckStatement.setStatementRemark("汽运费账单"); // 常规字段 bmstruckStatement.setInsertTime(new Date()); bmstruckStatement.setInsertUsername(map.get("userId").toString()); bmstruckStatement.setUpdateTime(new Date()); bmstruckStatement.setUpdateUsername("admin"); bmstruckStatement.setInsertUpdateRemark("无"); int code = bmstruckStatementMapper.insertSelective(bmstruckStatement); //详单绑定账单ID map.put("statementId",statementId); bmstruckStatementMapper.batchUpdateDetails(map); // // 调用金蝶接口 // List> entries = joinApiFeign.getSaleDetailsOrder(statementId.intValue()); // Map head = joinApiFeign.getStatement(statementId.intValue()); // Map input = new HashMap<>(); // input.put("entries",entries); // input.put("head",head); // Map totalMap = easUtil.getTotalMap(); // totalMap.put("input",input); // joinApiFeign.WSFaceWay(totalMap); return code; } /** * 展示账单下的详单 * * @param mapVal * @return */ @Override public List> getSaleTruckStatementDetailsOrderList(Map mapVal) { return bmstruckStatementMapper.getSaleTruckStatementDetailsOrderList(mapVal); } /** * 新增内转汽运账单 * * @param mapList * @param orderType * @return */ @Override public int addConvertedTruckStatement(List> mapList, Integer orderType) { //orderType:1:计时,2:计数,3:计重,4:包月 // 生成汽运账单主键 BigDecimal statementId = bmstruckStatementMapper.selectStatementId(); // 创建账单实体 BmstruckStatement bmstruckStatement = new BmstruckStatement(); // 常规字段 bmstruckStatement.setInsertTime(new Date()); bmstruckStatement.setInsertUsername("admin"); bmstruckStatement.setInsertUpdateRemark("无"); // 计算账单总金额 Double doubleTotalAmount = new Double(0); //将详单id与账单id绑定至中间表 for (Map map : mapList) { // 中间表主键 BigDecimal detailsStatementId = bmstruckDetailsStatementMapper.selectDetailsStatementId(); // 详单id BigDecimal detailsId = new BigDecimal((Integer) map.get("detailsId")); // 获取详单信息 BmstruckDetailsOrder bmstruckDetailsOrder = bmstruckDetailsOrderMapper.selectByPrimaryKey(detailsId); // 将该详单状态变为已生成账单 bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(1)); bmstruckDetailsOrder.setUpdateTime(new Date()); bmstruckDetailsOrder.setUpdateUsername("admin"); // 修改详单信息 bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder); // 新增中间表实体 BmstruckDetailsStatement bmstruckDetailsStatement = new BmstruckDetailsStatement(); //设置主键 bmstruckDetailsStatement.setDetailsStatementId(detailsStatementId); bmstruckDetailsStatement.setStatementId(statementId); bmstruckDetailsStatement.setDetailsId(detailsId); // 设置常规字段 bmstruckDetailsStatement.setInsertTime(new Date()); bmstruckDetailsStatement.setInsertUsername("admin"); bmstruckDetailsStatement.setInsertUpdateRemark("无"); BigDecimal detailsAmount = new BigDecimal((Double) map.get("detailsAmount")); Double detailsAmountDouble = Double.valueOf(detailsAmount.toString()); doubleTotalAmount += detailsAmountDouble; bmstruckDetailsStatementMapper.insertSelective(bmstruckDetailsStatement); } if (orderType == 1) { // 备注 bmstruckStatement.setStatementRemark("计时汽运费账单"); } else if (orderType == 2) { // 备注 bmstruckStatement.setStatementRemark("计数汽运费账单"); } else if (orderType == 3) { // 备注 bmstruckStatement.setStatementRemark("计重汽运费账单"); } else if (orderType == 4) { // 备注 bmstruckStatement.setStatementRemark("包月汽运费账单"); } bmstruckStatement.setStatementExcludTax(new BigDecimal(doubleTotalAmount)); return bmstruckStatementMapper.insertSelective(bmstruckStatement); } @Override public int delete(BigDecimal statementId) { //取消所有绑定 List oldStatementIds=new ArrayList<>(); oldStatementIds.add(statementId); bmstruckStatementMapper.updateAllBind(oldStatementIds); //删除账单 return bmstruckStatementMapper.deleteByPrimaryKey(statementId); } @Override public int update(BigDecimal statementId) { BmstruckStatement bmstruckStatement = new BmstruckStatement(); bmstruckStatement.setStatementType(new BigDecimal(1)); bmstruckStatement.setUpdateTime(new Date()); bmstruckStatement.setUpdateUsername("admin"); return bmstruckStatementMapper.updateByPrimaryKeySelective(bmstruckStatement); } @Override public List> findDetailsForStatement(Map map) { return bmstruckStatementMapper.findDetailsForStatement(map); } @Override public String getStatementPhoto(BigDecimal statementId) { return bmstruckStatementMapper.selectByPrimaryKey(statementId).getPhoto(); } }