package vip.xiaonuo.sale.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import vip.xiaonuo.sale.entity.ErpBaseMaterial;
import vip.xiaonuo.sale.entity.SaleProduce;
import vip.xiaonuo.sale.mapper.ErpBaseMaterialMapper;
import vip.xiaonuo.sale.mapper.SaleProduceMapper;
import vip.xiaonuo.sale.param.SaleProduceParam;
import vip.xiaonuo.sale.service.ISaleProduceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
*
* 销售二级指标 服务实现类
*
*
* @author author
* @since 2024-12-13
*/
@Service
public class SaleProduceServiceImpl extends ServiceImpl implements ISaleProduceService {
@Autowired
private SaleProduceMapper produceMapper;
@Autowired
private ErpBaseMaterialMapper materialMapper;
@Override
public JSONObject getProduceOne(SaleProduceParam produceParam) {
Integer parentId = produceParam.getParentId();
String time = produceParam.getDate();
String year = time.substring(0, 4);
QueryWrapper materialQueryWrapper = new QueryWrapper<>();
materialQueryWrapper.eq("parent_id", parentId);
List materials = materialMapper.selectList(materialQueryWrapper);
Double monthSaleMoney = 0.00;
Double yearSaleMoney = 0.00;
Double monthPrice = 0.00;
Double yearPrice = 0.00;
if (materials.size() != 0) {
for (ErpBaseMaterial material : materials) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like("produce_name", material.getMaterialName());
queryWrapper.between("create_time", time + "-01 00:00:00", time + "-31 23:59:59");
queryWrapper.select(" IFNULL(sum(sale_money),'0') saleMoney,convert(IFNULL(avg(price),'0'),decimal(10,2))");
SaleProduce monthProduce = produceMapper.selectOne(queryWrapper);
QueryWrapper queryWrapper1 = new QueryWrapper<>();
queryWrapper1.like("produce_name", material.getMaterialName());
queryWrapper1.between("create_time", year + "-01-01 00:00:00", year + "-12-31 23:59:59");
queryWrapper1.select(" IFNULL(sum(sale_money),'0') saleMoney,convert(IFNULL(avg(price),'0'),decimal(10,2))");
SaleProduce yearProduce = produceMapper.selectOne(queryWrapper1);
monthSaleMoney = monthSaleMoney + Double.valueOf(monthProduce.getSaleMoney());
yearSaleMoney = yearSaleMoney + Double.valueOf(yearProduce.getSaleMoney());
monthPrice = monthPrice + Double.valueOf(monthProduce.getPrice());
yearPrice = yearPrice + Double.valueOf(yearProduce.getPrice());
}
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("monthSaleMoney", monthSaleMoney);
jsonObject.put("yearSaleMoney",yearSaleMoney);
DecimalFormat def = new DecimalFormat("0.00");
if (materials.size() != 0) {
double v = monthPrice / materials.size();
double v1 = yearPrice / materials.size();
jsonObject.put("monthPrice", def.format(v));
jsonObject.put("yearPrice", v1);
} else {
jsonObject.put("monthPrice", "0");
jsonObject.put("yearPrice", "0");
}
return jsonObject;
}
@Override
public JSONArray getPriceList(SaleProduceParam produceParam) {
Integer parentId = produceParam.getParentId();
String time = produceParam.getDate();
String year = time.substring(0, 4);
QueryWrapper materialQueryWrapper = new QueryWrapper<>();
materialQueryWrapper.eq("parent_id", parentId);
List materials = materialMapper.selectList(materialQueryWrapper);
List yearList = new ArrayList<>();
List lastYearList = new ArrayList<>();
if (materials.size() != 0) {
for (ErpBaseMaterial material : materials) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like("produce_name", material.getMaterialName());
queryWrapper.between("create_time", year + "-01 00:00:00", year + "-31 23:59:59");
queryWrapper.select(" sum(sale_money) saleMoney,create_time createTime");
queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')");
SaleProduce lastProduce = produceMapper.selectOne(queryWrapper);
lastYearList.add(lastProduce);
QueryWrapper queryWrapper1 = new QueryWrapper<>();
queryWrapper1.like("produce_name", material.getMaterialName());
queryWrapper1.between("create_time", Integer.parseInt(year)-1 + "-01-01 00:00:00", Integer.parseInt(year)-1 + "-12-31 23:59:59");
queryWrapper1.select(" sum(sale_money) saleMoney,create_time createTime");
queryWrapper1.groupBy("DATE_FORMAT(create_time,'%Y-%m')");
SaleProduce yearProduce = produceMapper.selectOne(queryWrapper1);
yearList.add(yearProduce);
}
}
SimpleDateFormat sdf = new SimpleDateFormat("MM");
JSONArray jsonArray = new JSONArray();
for (int i = 1; i < 13; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("time", i + "月");
jsonObject.put("year", "0");
jsonObject.put("lastYear", "0");
if (yearList.size() != 0) {
for (SaleProduce produce : yearList) {
String format = sdf.format(produce.getCreateTime());
if (i == Integer.parseInt(format)) {
jsonObject.put("year", produce.getSaleMoney());
}
}
} else {
jsonObject.put("year", "0");
}
if (lastYearList.size() != 0) {
for (SaleProduce produce : lastYearList) {
String format = sdf.format(produce.getCreateTime());
if (i == Integer.parseInt(format)) {
jsonObject.put("lastYear", produce.getSaleMoney());
}
}
} else {
jsonObject.put("lastYear", "0");
}
jsonArray.add(jsonObject);
}
return jsonArray;
}
}