package com.steerinfo.dil.service.impl; import com.steerinfo.dil.mapper.*; import com.steerinfo.dil.model.*; import com.steerinfo.dil.service.IAmsSaleOrderService; import com.steerinfo.dil.util.DataChange; import com.steerinfo.dil.util.MyException; 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.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * AmsSaleOrder服务实现: * @author generator * @version 1.0-SNAPSHORT 2021-10-26 07:26 * 类描述 * 修订历史: * 日期:2021-10-26 * 作者:generator * 参考: * 描述:AmsSaleOrder服务实现 * @see null * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. */ @Service(value = "amsSaleOrderService") public class AmsSaleOrderServiceImpl implements IAmsSaleOrderService { @Autowired private AmsSaleOrderMapper amsSaleOrderMapper; @Autowired AmsSaleMaterialMapper amsSaleMaterialMapper; @Autowired RmsConsigneeMapper rmsConsigneeMapper; @Autowired AmsSaleTrucknoMaterialMapper amsSaleTrucknoMaterialMapper; @Autowired AmsSaleOrderCarrierMapper amsSaleOrderCarrierMapper; @Autowired OmstruckOrderMapper omstruckOrderMapper; /** * 查询销售订单 * @param saleOrderId * @return */ @Override @Transactional(rollbackFor = Exception.class) public Map getSaleOrder(BigDecimal saleOrderId) { List> entries = amsSaleOrderMapper.getMaterialMessages(saleOrderId); Map head = amsSaleOrderMapper.getSaleOrderMessage(saleOrderId); // 单价 BigDecimal taxPrice = (BigDecimal) head.get("unitPrice"); // 税率 String taxRate = (String) head.get("tax"); // 收款客户 String customer = (String) head.get("customer"); for (Map entry : entries) { BigDecimal stEntryId = (BigDecimal) entry.get("stEntryId"); BigDecimal isPoundSale = (BigDecimal) entry.get("isPoundSale"); BigDecimal forChangdu = (BigDecimal) entry.get("forChangdu"); BigDecimal assistQty = (BigDecimal) entry.get("materialNumber"); entry.put("assistQty",assistQty.toString()); entry.remove("materialNumber"); entry.put("taxPrice",taxPrice.toString()); entry.put("taxRate",taxRate); entry.put("customer",customer); entry.replace("stEntryId",stEntryId.toString()); entry.put("isTheory",isPoundSale.toString()); entry.replace("forChangdu", forChangdu == null ? "" : forChangdu.toString()); } Map input = new HashMap<>(); head.remove("unitPrice"); head.remove("tax"); head.remove("customer"); head.put("isFillCarNum","1"); head.put("isCp","0"); input.put("head",head); input.put("entries",entries); return input; } /** * 修改销售订单 * @param mapVal * @return */ @Transactional @Override public int operationSaleOrder(Map mapVal) { int result = 0; // 审批状态 String orderStatus = (String) mapVal.get("orderStatus"); // 得到销售订单号 String saleNumber = (String) mapVal.get("saleNumber"); Map map = new HashMap<>(); map.put("saleNumber",saleNumber); // 判断是删除还是非删除 String closeStatus = (String) mapVal.get("closeStatus"); List amsSaleOrders = amsSaleOrderMapper.selectByParameters(map); // 关闭分录 Object closeEntryId = mapVal.get("closeEntryId"); // 关闭原因 Object reason = mapVal.get("reason"); // 是否整单 Object wholeOrder = mapVal.get("wholeOrder"); // 关闭副产品整个订单 if (closeStatus.equals("-1") && "1".equals(wholeOrder)) { AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0); amsSaleOrder.setDeleted(new BigDecimal(2)); if (reason != null) { amsSaleOrder.setInsertUpdateRemark(reason.toString()); } result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder); List> warehouseList = amsSaleOrderMapper.getWareHouse(amsSaleOrder.getSaleOrderId()); if (warehouseList != null && warehouseList.size() != 0) { Object warehouse = warehouseList.get(0).get("warehouse"); if (warehouse != null && "副产品库".equals(warehouse)) { result += amsSaleOrderMapper.closeOrderNotIn(amsSaleOrder.getSaleOrderId()); } } } // 关闭单个分录订单 if (closeStatus.equals("-1") && wholeOrder.equals("0")) { if (closeEntryId != null) { Map easMap = new HashMap<>(); easMap.put("easPrimaryId", closeEntryId); List amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap); if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) { AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0); amsSaleMaterial.setDeleted(new BigDecimal(0)); result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial); } } } if (closeStatus.equals("0")) { AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0); amsSaleOrder.setDeleted(new BigDecimal(1)); result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder); } if (orderStatus.equals("4") && closeStatus.equals("1")){ AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0); amsSaleOrder.setSaleOrderStatus(new BigDecimal(4)); amsSaleOrder.setDeleted(new BigDecimal(0)); result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder); } if (orderStatus.equals("2") && closeStatus.equals("1")){ // 得到账户余额 String saleAccountBalance = (String) mapVal.get("saleAccountBalance"); // 得到当前订单金额 String saleCurrentOrderAmount = (String) mapVal.get("saleCurrentOrderAmount"); // 得到历史订单金额 String saleHistoricalOrderAmount = (String) mapVal.get("saleHistoricalOrderAmount"); // 得到订单备注 String saleRemark = (String) mapVal.get("saleRemark"); // 得到是否自提 String isSelfMention = (String) mapVal.get("isSelfMention"); // 得到收货单位 String receiveUnit = (String) mapVal.get("receiveUnit"); // 得到收货单位名称 String receiveUnitName = (String) mapVal.get("receiveUnitName"); // 得到订单日期 String saleOrderBizDateStr = (String) mapVal.get("saleOrderBizDate"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); BigDecimal receiveId = amsSaleOrderMapper.getReceiveId(receiveUnit); // 如果不存则自己增收获单位 if (receiveId == null) { RmsConsignee rmsConsignee = new RmsConsignee(); BigDecimal consigneeId = rmsConsigneeMapper.getConsigneeId(); rmsConsignee.setConsigneeId(consigneeId); rmsConsignee.setConsigneeCode(receiveUnit); rmsConsignee.setConsigneeCompanyName(receiveUnitName); rmsConsignee.setDeleted(new BigDecimal(0)); rmsConsignee.setInsertTime(new Date()); rmsConsignee.setInsertUsername("销售订单"); rmsConsignee.setInsertUpdateRemark("通过销售订单自增"); rmsConsigneeMapper.insertSelective(rmsConsignee); } // 得到发货单位 String shipperUnit = (String) mapVal.get("shipperUnit"); BigDecimal shipperId = amsSaleOrderMapper.getShipperId(shipperUnit); // 得到收款客户 String saleOrderReceiveCustomer = (String) mapVal.get("receiveCustomer"); // 得到物资信息 List> mapList = (List>) mapVal.get("mapList"); // 如果不存在则自己新增(使用金蝶销售订单号) if (amsSaleOrders.size() == 0) { AmsSaleOrder amsSaleOrder = new AmsSaleOrder(); BigDecimal saleOrderId = amsSaleOrderMapper.getSaleOrderId(); amsSaleOrder.setSaleOrderId(saleOrderId); amsSaleOrder.setSaleNumber(saleNumber); amsSaleOrder.setDeleted(new BigDecimal(0)); amsSaleOrder.setUpdateTime(new Date()); amsSaleOrder.setInsertUsername("admin"); amsSaleOrder.setInsertUpdateRemark("金蝶采集销售订单"); amsSaleOrder.setUpdateUsername("admin"); amsSaleOrder.setReceiveId(receiveId); amsSaleOrder.setShipperId(shipperId); // 订单日期 try { Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr); amsSaleOrder.setInsertTime(saleOrderBizDate); } catch (ParseException e) { e.printStackTrace(); } if (shipperUnit.equals("四川达兴能源有限责任公司") && receiveUnitName.equals("四川省达州钢铁集团有限责任公司")) { amsSaleOrder.setCloseStatus(new BigDecimal(0)); } if (isSelfMention != null) { if (isSelfMention.equals("CARRY")) { amsSaleOrder.setSaleOrderIsselfMention("是"); } else { amsSaleOrder.setSaleOrderIsselfMention("否"); } } amsSaleOrder.setSaleOrderTax("13%"); amsSaleOrder.setSaleUnitPrice(new BigDecimal(4000)); amsSaleOrder.setSaleRemark(saleRemark); amsSaleOrder.setSaleOrderReceiveCustomer(saleOrderReceiveCustomer); amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance)); amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount)); if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) { amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount)); } amsSaleOrder.setSaleOrderStatus(new BigDecimal(2)); // 遍历物资分录,新增销售订单与物资中间表 for (Map materialMap : mapList) { AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial(); BigDecimal saleMaterialId = amsSaleMaterialMapper.getSaleMaterialId(); amsSaleMaterial.setSaleMaterialId(saleMaterialId); amsSaleMaterial.setSaleOrderId(saleOrderId); // 仓库编码 Object warehouseNum = materialMap.get("warehouseNum"); // 仓库名称 Object warehouseName = materialMap.get("warehouseName"); // 物资理重 Object meterWeight = materialMap.get("meterWeight"); // 得到物资编码 String materialCode = (String) materialMap.get("materialCode"); if (warehouseName != null) { amsSaleMaterial.setSaleWarehouse(warehouseName.toString()); //得到物资名称 String materialName = amsSaleOrderCarrierMapper.getMaterialName(materialCode); // 如果是副产品仓库,则给自提订单自动匹配承运商 if (warehouseName.equals("副产品库") && "是".equals(amsSaleOrder.getSaleOrderIsselfMention()) || "钒渣".equals(materialName) && "是".equals(amsSaleOrder.getSaleOrderIsselfMention()) ) { AmsSaleOrderCarrier amsSaleOrderCarrier = amsSaleOrderCarrierMapper.getAmsSaleOrderCarrier(saleOrderId); BigDecimal carrierId = amsSaleOrderCarrierMapper.findCarrierByConsignee(receiveUnitName); if (amsSaleOrderCarrier == null) { amsSaleOrderCarrier = new AmsSaleOrderCarrier(); amsSaleOrderCarrier.setSaleOrderCarrierId(amsSaleOrderCarrierMapper.selectMaxId()); amsSaleOrderCarrier.setCarrierId(amsSaleOrderCarrierMapper.selectMaxId()); amsSaleOrderCarrier.setSaleOrderId(saleOrderId); amsSaleOrderCarrier.setCarrierId(carrierId); amsSaleOrderCarrier.setDeleted(new BigDecimal(0)); amsSaleOrderCarrier.setInsertTime(new Date()); amsSaleOrderCarrier.setInsertUsername("自动匹配"); amsSaleOrderCarrier.setInsertUpdateRemark("自提订单自动匹配"); result += amsSaleOrderCarrierMapper.insertSelective(amsSaleOrderCarrier); } else { amsSaleOrderCarrier.setCarrierId(carrierId); result += amsSaleOrderCarrierMapper.updateByPrimaryKeySelective(amsSaleOrderCarrier); } } } BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode); // 得到金蝶分录主键 String easPrimaryId = (String) materialMap.get("easPrimaryId"); // 得到物资重量 String materialWeight = (String) materialMap.get("materialNumber"); // 得到物资件数 String materialNumber = (String) materialMap.get("assistQty"); // 得到计量单位 String materialUnit = (String) materialMap.get("materialUnit"); amsSaleMaterial.setEasPrimaryId(easPrimaryId); amsSaleMaterial.setMaterialId(materialId); amsSaleMaterial.setInsertTime(new Date()); amsSaleMaterial.setInsertUsername("金蝶"); amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight)); amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单"); if (materialWeight != null && !"".equals(materialWeight)) { amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight)); } if (materialNumber != null && !"".equals(materialNumber)) { amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber)); } result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial); } result += amsSaleOrderMapper.insertSelective(amsSaleOrder); } else { AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0); amsSaleOrder.setSaleNumber(saleNumber); amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance)); amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount)); amsSaleOrder.setSaleRemark(saleRemark); amsSaleOrder.setDeleted(new BigDecimal(0)); amsSaleOrder.setUpdateTime(new Date()); amsSaleOrder.setShipperId(shipperId); amsSaleOrder.setReceiveId(receiveId); // 如果是财务审批后,将不可作业的运输订单改为已接收状态 if (orderStatus.equals("4")) { result += amsSaleOrderMapper.updateTruckOrderStatus(amsSaleOrder.getSaleOrderId()); } if (isSelfMention != null) { if (isSelfMention.equals("CARRY")) { amsSaleOrder.setSaleOrderIsselfMention("是"); } else { amsSaleOrder.setSaleOrderIsselfMention("否"); } } if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) { amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount)); } amsSaleOrder.setSaleOrderStatus(new BigDecimal(orderStatus)); for (Map materialMap : mapList) { // 得到中间表主键id String saleMaterialId = (String) materialMap.get("saleMaterialId"); // 得到金蝶分录id String easPrimaryId = (String) materialMap.get("easPrimaryId"); Map resultMap = new HashMap<>(); resultMap.put("easPrimaryId",easPrimaryId); AmsSaleMaterial amsSaleMaterial; // 得到物资重量 String materialWeight = (String) materialMap.get("materialNumber"); // 得到物资件数 String materialNumber = (String) materialMap.get("assistQty"); // 如果有物流系统销售订单物资表主键:认定是走物流新增的销售订单(通过物流系统主键进行查询) if (saleMaterialId != null && (!saleMaterialId.equals("null")) && !saleMaterialId.equals("")) { amsSaleMaterial = amsSaleMaterialMapper.selectByPrimaryKey(new BigDecimal(saleMaterialId)); Object meterWeight = materialMap.get("meterWeight"); if (meterWeight != null && !"".equals(meterWeight.toString())) { amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight)); } else { Double weightDouble = new Double(materialNumber); BigDecimal liWeight = new BigDecimal( weightDouble/amsSaleMaterial.getMaterialNumber().doubleValue() * 1000); amsSaleMaterial.setMeterWeight(liWeight); } // 同步修改车序号物资表 resultMap.put("materialId",saleMaterialId); List amsSaleTrucknoMaterials = amsSaleTrucknoMaterialMapper.selectByParameters(resultMap); AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = amsSaleTrucknoMaterials.get(0); amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(new BigDecimal(materialNumber)); amsSaleTrucknoMaterial.setInsertUpdateRemark("在金蝶做修改"); amsSaleTrucknoMaterialMapper.updateByPrimaryKeySelective(amsSaleTrucknoMaterial); } // 否则认定是走金蝶新增的销售订单(通过金蝶分录id进行查询) else { List amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(resultMap); amsSaleMaterial = amsSaleMaterials.get(0); amsSaleMaterial.setInsertUsername("金蝶"); amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单"); } // 得到物资编码 String materialCode = (String) materialMap.get("materialCode"); // 得到计量单位 String materialUnit = (String) materialMap.get("materialUnit"); if (materialWeight != null && !"".equals(materialWeight)) { amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight)); } if (materialNumber != null && ! "".equals(materialNumber)) { amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber)); } BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode); amsSaleMaterial.setEasPrimaryId(easPrimaryId); amsSaleMaterial.setSaleOrderId(amsSaleOrder.getSaleOrderId()); amsSaleMaterial.setMaterialId(materialId); amsSaleMaterial.setInsertTime(new Date()); result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial); } result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder); } } return result; } /** * 通过运单id得到车牌号 * @param saleOrderMaterialId * @return */ @Override public Map findCarNumberByOrderId(BigDecimal saleOrderMaterialId) { Map head = omstruckOrderMapper.findCarNumberByOrderId(saleOrderMaterialId); List> entries = omstruckOrderMapper.findEntriesByOrderId(saleOrderMaterialId); Map input = new HashMap<>(); input.put("entries",entries); input.put("head",head); return input; } }