package com.steerinfo.dil.service.impl; import com.steerinfo.dil.feign.AmsFeign; import com.steerinfo.dil.mapper.RmsOilTypeMapper; import com.steerinfo.dil.model.RmsOilType; import com.steerinfo.dil.util.DataChange; import com.steerinfo.framework.mapper.IBaseMapper; import com.steerinfo.framework.service.impl.BaseServiceImpl; import com.steerinfo.dil.model.RmsOilPrice; import com.steerinfo.dil.mapper.RmsOilPriceMapper; import com.steerinfo.dil.service.IRmsOilPriceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; /** * RmsOilPricea服务实现: * @author generator * @version 1.0-SNAPSHORT 2021-11-23 05:01 * 类描述 * 修订历史: * 日期:2021-11-23 * 作者:generator * 参考: * 描述:RmsOilPricea服务实现 * @see null * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. */ @Service(value = "rmsOilPriceService") public class RmsOilPriceServiceImpl implements IRmsOilPriceService { @Autowired private RmsOilPriceMapper rmsOilPriceMapper; @Autowired private AmsFeign amsFeign; @Autowired private RmsOilTypeMapper rmsOilTypeMapper; @Override //展示油价,该操作还有一些元素未明,框计算报错,但能通过测试,bug排除第二优先级 public List> getOilPriceList(Map mapVal) { List> oilPriceList = rmsOilPriceMapper.getOilPriceList(mapVal); BigDecimal num = new BigDecimal(100); for (Map map : oilPriceList) { BigDecimal floatingScale = DataChange.dataToBigDecimal(map.get("floatingScale")); map.put("floatingScale", floatingScale.multiply(num).setScale(2, BigDecimal.ROUND_HALF_UP) + "%"); } return oilPriceList; } /** * 启用油价 * @Author TXF * @Date 2022/1/21 9:08 * @param id * @return **/ @Transactional @Override public int updateOilPrice(Integer id) { RmsOilPrice rmsOilPrice = new RmsOilPrice(); //查询该启用油价的信息 Map mesMap = rmsOilPriceMapper.getOilPriceById(new BigDecimal(id)); if(DataChange.dataToBigDecimal(mesMap.get("priceStatus")).intValue() == 0){ return 0; }else{ //通过油品信息关闭该油品所有正在启用的油价 rmsOilPriceMapper.closeLastOilPrice(mesMap); } rmsOilPrice.setId(new BigDecimal(id)); rmsOilPrice.setUpdateTime(new Date()); rmsOilPrice.setPriceStatus(new BigDecimal(0)); //加入正数条件 mesMap.put("flag","1"); //油价联动 amsFeign.batchUpdateTransportPriceByOilPrice1(mesMap); return rmsOilPriceMapper.updateByPrimaryKeySelective(rmsOilPrice); } //根据Id删除油价,该操作通过测试,排查第三优先级 @Override public int deleteOilPrice(BigDecimal id) { //如果是已经启用的则不能删除 Map mesMap = rmsOilPriceMapper.getOilPriceById(id); BigDecimal priceStatus = DataChange.dataToBigDecimal(mesMap.get("priceStatus")); if(priceStatus.intValue() != 1) return 0; RmsOilPrice rmsOilPrice = new RmsOilPrice(); rmsOilPrice.setPriceId(id); rmsOilPrice.setDeleted(new BigDecimal(1)); return rmsOilPriceMapper.updateByPrimaryKeySelective(rmsOilPrice) ; } //根据Id查询油价 @Override public Map getOilPriceById(BigDecimal id) { return this.rmsOilPriceMapper.getOilPriceById(id); } /** * 新增油价 * @Author TXF * @Date 2022/1/19 17:09 * @param map * @return **/ @Transactional @Override public int insertOilPrice(Map map) { RmsOilPrice rmsOilPrice = new RmsOilPrice(); rmsOilPrice.setPriceId(rmsOilPriceMapper.selectOilPriceId()); //获取油品ID、油价日期、油价 BigDecimal oilTypeId = DataChange.dataToBigDecimal(map.get("oilNameId")); rmsOilPrice.setPriceOilTypeId(oilTypeId); rmsOilPrice.setPriceDate(new Date((long) map.get("priceDate"))); BigDecimal priceValue = DataChange.dataToBigDecimal(map.get("priceValue")); rmsOilPrice.setPriceValue(priceValue); //根据油品ID获取上一次油价价格计算油价浮动 Map mesMap = rmsOilPriceMapper.getLastOilPrice(oilTypeId); BigDecimal n = null; //浮动比例 if(mesMap != null){ BigDecimal lastPrice = DataChange.dataToBigDecimal(mesMap.get("priceValue")); BigDecimal subtract = priceValue.subtract(lastPrice); //当前油价减去上一次油价 n = subtract.divide(lastPrice, 4,BigDecimal.ROUND_HALF_UP); rmsOilPrice.setFloatingScale(n); //四舍五入 } //如果新增的油价是启用的则关闭该油品之前的已启用的 Boolean priceStatus = (Boolean) map.get("priceStatus"); if(priceStatus && n.compareTo(BigDecimal.ZERO)==-1){ if(mesMap != null){ map.put("oilTypeId", oilTypeId); rmsOilPriceMapper.closeLastOilPrice(map); } //设置启用状态 rmsOilPrice.setPriceStatus(new BigDecimal(0)); //批量修改油价 Map updateMesMap = new HashMap<>(); updateMesMap.put("oilTypeId",oilTypeId); updateMesMap.put("newOilPrice", priceValue); amsFeign.batchUpdateTransportPriceByOilPrice1(updateMesMap); }else { //否则设置停用状态 rmsOilPrice.setPriceStatus(new BigDecimal(1)); } rmsOilPrice.setInsertUsername("admin"); rmsOilPrice.setInsertTime(new Date()); rmsOilPrice.setDeleted(new BigDecimal(0)); return rmsOilPriceMapper.insertSelective(rmsOilPrice); } /** * 添加油品名称 * @Author TXF * @Date 2022/1/19 17:11 * @param oilTypeName * @return **/ public int addOilType(String oilTypeName){ RmsOilType rmsOilType = new RmsOilType(); Integer maxId = rmsOilTypeMapper.selectMaxId(); rmsOilType.setOilTypeId(new BigDecimal(maxId==null?1:maxId)); rmsOilType.setOilTypeName(oilTypeName); rmsOilType.setDeleted(new BigDecimal(0)); rmsOilType.setInsertTime(new Date()); rmsOilType.setInsertUsername("admin"); return rmsOilTypeMapper.insertSelective(rmsOilType); } }