package com.xzx.gc.system.service;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.xzx.gc.entity.SysStorage;
|
import com.xzx.gc.model.admin.StorageModel;
|
import com.xzx.gc.model.admin.SysStorageApiModel;
|
import com.xzx.gc.system.mapper.OrderMapper;
|
import com.xzx.gc.system.mapper.OrderStorageInfoMapper;
|
import com.xzx.gc.system.mapper.PartnerGaodeMapper;
|
import com.xzx.gc.system.mapper.SysStorageMapper;
|
import com.xzx.gc.util.DoubleUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
@Transactional
|
public class SysStorageService {
|
|
@Autowired
|
private SysStorageMapper sysStorageMapper;
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private PartnerGaodeMapper partnerGaodeMapper;
|
|
@Autowired
|
private OrderStorageInfoMapper orderStorageInfoMapper;
|
|
@Autowired
|
private OrderMapper orderMapper;
|
|
public SysStorage findById(Integer id){
|
return sysStorageMapper.selectByPrimaryKey(id);
|
}
|
|
|
/**
|
* 添加仓库
|
*
|
* @param storageModel
|
* @return
|
*/
|
public int addSysStorageApi(SysStorageApiModel storageModel) {
|
|
if(StrUtil.isBlank(storageModel.getPartnerId())){
|
List<String> list = cityPartnerService.queryPartnerByCurrent();
|
if(CollUtil.isNotEmpty(list)){
|
storageModel.setPartnerId(CollUtil.getFirst(list));
|
}
|
}
|
|
storageModel.setCreateTime(DateUtil.now());
|
return sysStorageMapper.addSysStorageApi(storageModel);
|
}
|
|
/**
|
* 修改仓库
|
*
|
* @param storageModel
|
* @return
|
*/
|
public int updateSysStorageApi(SysStorageApiModel storageModel) {
|
SysStorage sysStorage=new SysStorage();
|
BeanUtil.copyProperties(storageModel,sysStorage);
|
return sysStorageMapper.updateByPrimaryKeySelective(sysStorage);
|
// return sysStorageMapper.updateSysStorageApi(storageModel);
|
}
|
|
/**
|
* 删除仓库
|
*
|
* @param storageModel
|
* @return
|
*/
|
public int delSysStorageApi(SysStorageApiModel storageModel) {
|
return sysStorageMapper.delSysStorageApi(storageModel);
|
}
|
|
|
public Map<String, Object> querySysStorageList(SysStorageApiModel storageModel) {
|
// List<String> partnerIds = new ArrayList<>();
|
|
if(StrUtil.isBlank(storageModel.getPartnerId())){
|
List<String> list = cityPartnerService.queryPartnerByCurrent();
|
if(CollUtil.isNotEmpty(list)){
|
storageModel.setPartnerId(CollUtil.getFirst(list));
|
}
|
}
|
|
|
|
Map<String, Object> m = new HashMap<>();
|
PageHelper.startPage(storageModel.getPage(),storageModel.getLimit());
|
List<SysStorageApiModel> list = sysStorageMapper.querySysStorageApiList(storageModel);
|
PageInfo<SysStorageApiModel> pageInfo=new PageInfo<>(list);
|
|
m.put("data", list);
|
m.put("count", pageInfo.getTotal());
|
m.put("code", 0);
|
return m;
|
}
|
|
|
public List<Map<String, Object>> querySysStrangeList(){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
List<Map<String, Object>> list;
|
if(null!=partnerIds&&partnerIds.size()>0){
|
List<String> townIds = partnerGaodeMapper.queryTownIdsByPartnerIdList(partnerIds);
|
list = sysStorageMapper.querySysStrangeList(townIds);
|
|
}else{
|
list = sysStorageMapper.querySysStrangeList(null);
|
}
|
|
return list;
|
}
|
|
public Map<String,Object> querySysStorageListData(StorageModel storageModel) {
|
List<String> partnerIds = new ArrayList<>();
|
if(null!=storageModel.getPartnerId()&&!"".equals(storageModel.getPartnerId())){
|
partnerIds.add(storageModel.getPartnerId());
|
}else{
|
partnerIds = cityPartnerService.queryPartnerByCurrent();
|
}
|
if(null!=partnerIds&&partnerIds.size()>0){
|
String partnerId = partnerIds.get(0);
|
List<String> townIds = cityPartnerService.queryTownIdsByPartnerId(partnerId);
|
storageModel.setTownIds(townIds);
|
}
|
Map<String,Object> result = new HashMap<>();
|
PageHelper.startPage(storageModel.getPage(),storageModel.getLimit());
|
List<Map<String,Object>> list = sysStorageMapper.querySysStorageList(storageModel);
|
PageInfo<Map<String,Object>> pageInfo = new PageInfo<>(list);
|
BigDecimal allWeight = new BigDecimal("0");
|
BigDecimal allMoney = new BigDecimal("0");
|
//相隔的天数 ,查询日均
|
int dayNum = orderStorageInfoMapper.queryDayDiff(storageModel);
|
for (Map<String,Object> map:list) {
|
StorageModel pModel = new StorageModel();
|
String id = map.get("id").toString();
|
map.put("areaname",map.get("areaName"));
|
map.put("storagename",map.get("storageName"));
|
pModel.setSysStorageId(id);
|
pModel.setStartTime(storageModel.getStartTime());
|
pModel.setEndTime(storageModel.getEndTime());
|
pModel.setPartnerIds(partnerIds);
|
Map<String,Object> rMap = orderStorageInfoMapper.querySysStorageAll(pModel);
|
List<String> allOrderNumBySsId= orderStorageInfoMapper.sysStorageOrderNum(pModel);
|
BigDecimal allOrderNum = new BigDecimal("0") ;
|
for (String orderIds:allOrderNumBySsId) {
|
String[] ossid = orderIds.split(",");
|
allOrderNum = allOrderNum.add(new BigDecimal(ossid.length));
|
}
|
map.put("orderNum",allOrderNum);
|
if(null!=rMap){
|
allWeight = allWeight.add(new BigDecimal(rMap.get("storageWeight").toString()));
|
allMoney =allMoney.add(new BigDecimal(rMap.get("storageMoney").toString()));
|
BigDecimal storageWeight = new BigDecimal(rMap.get("storageWeight").toString());
|
storageWeight = storageWeight.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP);
|
BigDecimal storageMoney = new BigDecimal(rMap.get("storageMoney").toString());
|
storageMoney = storageMoney.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP);
|
BigDecimal recycleweight = new BigDecimal(rMap.get("recycleWeight").toString());
|
recycleweight = recycleweight.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP);
|
BigDecimal recyclemoney = new BigDecimal(rMap.get("recycleMoney").toString());
|
recyclemoney = recyclemoney.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP);
|
map.put("storageWeight",DoubleUtil.roundSix(storageWeight.toString()));
|
map.put("storageMoney",DoubleUtil.roundFive(storageMoney.toString()));
|
map.put("recycleWeight",DoubleUtil.roundSix(recycleweight.toString()));
|
map.put("recycleMoney",DoubleUtil.roundFive(recyclemoney.toString()));
|
//日均重量
|
BigDecimal sw = new BigDecimal(rMap.get("storageWeight").toString());
|
if(dayNum>0){
|
BigDecimal dayw = sw.divide(new BigDecimal(dayNum),6, RoundingMode.HALF_UP);
|
map.put("dayStorageWeight",dayw.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP));
|
}else{
|
sw =sw.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP);
|
map.put("dayStorageWeight",DoubleUtil.roundThree(sw.toString()));
|
}
|
//日均金额
|
BigDecimal sm = new BigDecimal(rMap.get("storageMoney").toString());
|
if(dayNum>0){
|
BigDecimal daym = sm.divide(new BigDecimal(dayNum),5,RoundingMode.HALF_UP);
|
map.put("dayStorageMoney",daym.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP));
|
}else{
|
map.put("dayStorageMoney",sm.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP));
|
}
|
|
}
|
}
|
if(dayNum==0){
|
dayNum=1;
|
}
|
BigDecimal alldayw = allWeight.divide(new BigDecimal(dayNum),6,RoundingMode.HALF_UP);
|
BigDecimal alldaym = allMoney.divide(new BigDecimal(dayNum),5,RoundingMode.HALF_UP);
|
allWeight = allWeight.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP);
|
alldayw = alldayw.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP);
|
alldaym = alldaym.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP);
|
allMoney = allMoney.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP);
|
//int count = dao.querySysStorageCount(storageModel);
|
result.put("count",pageInfo.getTotal());
|
result.put("code",0);
|
result.put("data",list);
|
result.put("allWeight",DoubleUtil.roundSix(allWeight.toString()));
|
result.put("allMoney",DoubleUtil.roundFive(allMoney.toString()));
|
result.put("allDayWeight",DoubleUtil.roundSix(alldayw.toString()));
|
result.put("allDayMoney",DoubleUtil.roundFive(alldaym.toString()));
|
return result;
|
}
|
|
|
public Map<String,Object> querySysStorageDetail(StorageModel storageModel) {
|
Map<String,Object> result = new HashMap<>();
|
List<Map<String,String>> weekOrMonthList = new ArrayList<>();
|
List<Map<String,String>> weekOrMonthImgList = new ArrayList<>();
|
//相隔天数
|
int dayNum = orderStorageInfoMapper.queryDayDiff(storageModel);
|
Map<String,Object> allRMap = sysStorageMapper.querySysStorageAll(storageModel);
|
|
BigDecimal allWeight = new BigDecimal(allRMap.get("storageWeight").toString());
|
BigDecimal allMoney = new BigDecimal(allRMap.get("storageMoney").toString());
|
BigDecimal alldayw = new BigDecimal("0");
|
BigDecimal alldaym = new BigDecimal("0");
|
|
if(dayNum>0){
|
alldayw = allWeight.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP);
|
alldaym = allMoney.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP);
|
}
|
String am = allMoney.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP).toString();
|
String aw = allWeight.divide(new BigDecimal("1000"),3, RoundingMode.HALF_UP).toString();
|
String adm = alldaym.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP).toString();
|
String adw = alldayw.divide(new BigDecimal("1000"),3, RoundingMode.HALF_UP).toString();
|
|
result.put("allWeight",DoubleUtil.roundThree(aw));
|
result.put("allMoney",DoubleUtil.roundTwo(am));
|
result.put("alldayw",DoubleUtil.roundThree(adw));
|
result.put("alldaym",DoubleUtil.roundTwo(adm));
|
|
List<Map<String,Object>> weekOrderList = new ArrayList<>();
|
List<Map<String,Object>> weekMoneyAndWeightList = new ArrayList<>();
|
List<Map<String,Object>> detailImage = new ArrayList<>();
|
if(null!=storageModel.getTimeType()&&!"".equals(storageModel.getTimeType())){
|
if(storageModel.getTimeType().equals("week")){
|
weekOrMonthList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime();
|
}else{
|
weekOrMonthList = com.xzx.gc.util.DateUtil.query12MonthStartTimeAndEndTime();
|
}
|
for (Map<String,String> map:weekOrMonthList) {
|
String startTime = map.get("startTime");
|
String endTime = map.get("endTime");
|
if(map.get("storageWeight")!=null){
|
String storageweight = DoubleUtil.roundThree(map.get("storageWeight"));
|
map.put("storageWeight",storageweight);
|
}
|
if(map.get("recycleWeight")!=null){
|
String recycleweight = DoubleUtil.roundThree(map.get("recycleWeight"));
|
map.put("recycleWeight",recycleweight);
|
}
|
|
|
|
//周订单数
|
weekOrderList = getWeekOrderList(startTime,endTime,storageModel.getSysStorageId(),weekOrderList);
|
//周金额(入库金额,订单金额,入库重量,订单重量)
|
weekMoneyAndWeightList = getWeekMoneyAndWeightList(startTime,endTime,storageModel.getSysStorageId(),weekMoneyAndWeightList);
|
}
|
}else{
|
weekOrMonthList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime();
|
for (Map<String,String> map:weekOrMonthList) {
|
String startTime = map.get("startTime");
|
String endTime = map.get("endTime");
|
if(map.get("storageWeight")!=null){
|
String storageweight = DoubleUtil.roundThree(map.get("storageWeight"));
|
map.put("storageweight",storageweight);
|
}
|
if(map.get("recycleWeight")!=null){
|
String recycleweight = DoubleUtil.roundThree(map.get("recycleWeight"));
|
map.put("recycleweight",recycleweight);
|
}
|
//周订单数
|
weekOrderList = getWeekOrderList(startTime,endTime,storageModel.getSysStorageId(),weekOrderList);
|
//周金额(入库金额,订单金额,入库重量,订单重量)
|
weekMoneyAndWeightList = getWeekMoneyAndWeightList(startTime,endTime,storageModel.getSysStorageId(),weekMoneyAndWeightList);
|
}
|
}
|
Map<String,String> lastMap = new HashMap<>();
|
if(null!=storageModel.getImageType()&&!"".equals(storageModel.getImageType())) {
|
if (storageModel.getImageType().equals("week")) {
|
weekOrMonthImgList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime();
|
lastMap = weekOrMonthImgList.get(0);
|
} else {
|
weekOrMonthImgList = com.xzx.gc.util.DateUtil.query12MonthStartTimeAndEndTime();
|
lastMap = weekOrMonthImgList.get(0);
|
}
|
}else{
|
weekOrMonthImgList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime();
|
lastMap = weekOrMonthImgList.get(0);
|
}
|
detailImage = getSysStorageTypeName(storageModel.getSysStorageId(), lastMap.get("startTime"),lastMap.get("endTime"),null);
|
for (Map<String,Object> obj:weekMoneyAndWeightList) {
|
if(obj.get("storageWeight")!=null){
|
String storageweight = DoubleUtil.roundThree(obj.get("storageWeight").toString());
|
obj.put("storageweight",storageweight);
|
}
|
if(obj.get("storageMoney")!=null){
|
String storageMoney = DoubleUtil.roundThree(obj.get("storageMoney").toString());
|
obj.put("storagemoney",storageMoney);
|
}
|
if(obj.get("recycleMoney")!=null){
|
String recycleMoney = DoubleUtil.roundThree(obj.get("recycleMoney").toString());
|
obj.put("recyclemoney",recycleMoney);
|
}
|
if(obj.get("recycleWeight")!=null){
|
String recycleWeight = DoubleUtil.roundThree(obj.get("recycleWeight").toString());
|
obj.put("recycleweight",recycleWeight);
|
}
|
}
|
result.put("weekOrMonthOrderList",weekOrderList);
|
result.put("weekOrMonthMoneyAndWeightList",weekMoneyAndWeightList);
|
result.put("detailImage",detailImage);
|
|
return result;
|
}
|
|
/**
|
* 按照仓库图表统计周订单数
|
* @param startTime
|
* @param endTime
|
* @param sysStorageId
|
* @param weekOrderList
|
* @return
|
*/
|
private List<Map<String,Object>> getWeekOrderList(String startTime,String endTime,String sysStorageId,List<Map<String,Object>> weekOrderList){
|
Map<String,Object> paramMap = new HashMap<>();
|
//订单量 入库、订单重量 入库、订单金额
|
StorageModel storageModel1 = new StorageModel();
|
storageModel1.setStartTime(startTime);
|
storageModel1.setEndTime(endTime);
|
storageModel1.setSysStorageId(sysStorageId);
|
List<String> orderIdBySysStorageId = orderStorageInfoMapper.sysStorageOrderNum(storageModel1);
|
int orderNum = 0 ;
|
for (String orderIds:orderIdBySysStorageId) {
|
orderNum = orderIds.split(",").length;
|
}
|
String[] startStr = startTime.split(" ");
|
String[] endStr = endTime.split(" ");
|
paramMap.put("startTime",startStr[0]);
|
paramMap.put("endTime",endStr[0]);
|
paramMap.put("orderNum",orderNum);
|
weekOrderList.add(paramMap);
|
return weekOrderList;
|
}
|
|
private List<Map<String,Object>> getWeekMoneyAndWeightList(String startTime,String endTime,String sysStorageId,List<Map<String,Object>> weekOrderList) {
|
//入库、订单重量 入库、订单金额
|
StorageModel storageModel2 = new StorageModel();
|
storageModel2.setStartTime(startTime);
|
storageModel2.setEndTime(endTime);
|
storageModel2.setSysStorageId(sysStorageId);
|
Map<String,Object> rMap = sysStorageMapper.querySysStorageAll(storageModel2);
|
|
String[] startStr = startTime.split(" ");
|
String[] endStr = endTime.split(" ");
|
rMap.put("startTime",startStr[0]);
|
rMap.put("endTime",endStr[0]);
|
weekOrderList.add(rMap);
|
return weekOrderList;
|
}
|
|
private List<Map<String,Object>> getSysStorageTypeName(String sysStorageId,String startTime,String endTime,String typeName){
|
List<Map<String,Object>> resultMap = new ArrayList<>();
|
StorageModel storageModel1 = new StorageModel();
|
storageModel1.setStartTime(startTime);
|
storageModel1.setEndTime(endTime);
|
storageModel1.setSysStorageId(sysStorageId);
|
List<String> orderIdBySysStorageId = orderStorageInfoMapper.sysStorageOrderNum(storageModel1);
|
List<String> orderIds = new ArrayList<>();
|
for (String ids:orderIdBySysStorageId) {
|
String[] orderIdsTemp = ids.split(",");
|
for (String orderId:orderIdsTemp) {
|
orderIds.add(orderId);
|
}
|
}
|
List<Map<String,Object>> list = new ArrayList<>();
|
if(orderIds!=null&&orderIds.size()>0){
|
list = orderMapper.getSysStorageTypeName(orderIds,null,null,typeName);
|
}
|
//总金额
|
BigDecimal totalMoney = new BigDecimal("0");
|
for (Map<String,Object> map:list) {
|
totalMoney = totalMoney.add(new BigDecimal(map.get("money").toString()));
|
}
|
//查询占比
|
for (Map<String,Object> map:list) {
|
BigDecimal rate = new BigDecimal(map.get("money").toString()).divide(totalMoney,2,RoundingMode.HALF_UP);
|
map.put("rate",rate.multiply(new BigDecimal("100")).toString()+"%");
|
BigDecimal money = new BigDecimal(map.get("money").toString());
|
BigDecimal weight = new BigDecimal(map.get("weight").toString());
|
money = money.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP);
|
weight = weight.divide(new BigDecimal("1000"),3, RoundingMode.HALF_UP);
|
map.put("weight",DoubleUtil.roundThree(weight.toString()));
|
map.put("money",DoubleUtil.roundTwo(money.toString()));
|
}
|
Map<String,Object> imageData = new HashMap<>();
|
if(null!=totalMoney){
|
totalMoney = totalMoney.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP);
|
}
|
|
imageData.put("totalMoney",DoubleUtil.roundTwo(totalMoney.toString()));
|
imageData.put("data",list);
|
resultMap.add(imageData);
|
return resultMap;
|
}
|
}
|