package vip.xiaonuo.money.service.impl;
import cn.hutool.core.date.DateTime;
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 com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import vip.xiaonuo.common.pojo.CommonResult;
import vip.xiaonuo.money.entity.MoneyProduce;
import vip.xiaonuo.money.entity.MoneyProduce0422;
import vip.xiaonuo.money.entity.MoneyProduceIncome;
import vip.xiaonuo.money.entity.vo.MoneyProduce0422Vo;
import vip.xiaonuo.money.entity.vo.MoneyProduceScreenVo;
import vip.xiaonuo.money.mapper.MoneyProduce0422Mapper;
import vip.xiaonuo.money.mapper.MoneyProduceIncomeMapper;
import vip.xiaonuo.money.mapper.MoneyProduceMapper;
import vip.xiaonuo.money.param.*;
import vip.xiaonuo.money.service.IMoneyProduceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* 财务产品销售收入 服务实现类
*
*
* @author author
* @since 2024-11-19
*/
@Service
public class MoneyProduceServiceImpl extends ServiceImpl implements IMoneyProduceService {
@Autowired
private MoneyProduceMapper produceMapper;
@Autowired
private MoneyProduce0422Mapper produce0422Mapper;
@Override
public List analysisIncome(MoneyAnalysisParam analysisParam) {
String orgId = analysisParam.getOrgId();
Integer type = analysisParam.getType();//是否包含关联交易
String time = analysisParam.getTime();//2024-10
QueryWrapper produce0422QueryWrapper = new QueryWrapper<>();
produce0422QueryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
if ("".equals(time) || null == time) {
DateTime dateTime = DateUtil.beginOfYear(new Date());
produce0422QueryWrapper.ge("create_time", dateTime);
} else {
// String year = time.substring(0, 4);
produce0422QueryWrapper.between("create_time", time + "-01 00:00:00", time + "-31 23:59:59");
}
if (1 == type) {
produce0422QueryWrapper.in("is_write",0, 1);
} else {
produce0422QueryWrapper.eq("is_write", 0);
}
produce0422QueryWrapper.groupBy("g.fname");
List moneyProduce0422Vos = produce0422Mapper.analysisIncome(produce0422QueryWrapper);
List list = new ArrayList<>();
int i = 0;
for (MoneyProduce0422Vo moneyProduce0422Vo : moneyProduce0422Vos) {
if (i < 9){
list.add(moneyProduce0422Vo);
i++;
}else if (i == 9){
MoneyProduce0422Vo moneyProduce0422Vo1 = new MoneyProduce0422Vo();
moneyProduce0422Vo1.setCreateTime(moneyProduce0422Vo.getCreateTime());
moneyProduce0422Vo1.setMaterialAmount(moneyProduce0422Vo.getMaterialAmount());
moneyProduce0422Vo1.setMaterialName("其它");
list.add(moneyProduce0422Vo1);
i++;
}else {
MoneyProduce0422Vo moneyProduce0422Vo2 = list.get(9);
moneyProduce0422Vo2.setMaterialAmount( getSum(moneyProduce0422Vo2.getMaterialAmount() , moneyProduce0422Vo.getMaterialAmount()));
list.set(9,moneyProduce0422Vo2);
}
}
return list;
// double v1 = 0.0000;
// double v2 = 0.0000;
// double v3 = 0.0000;
// double v4 = 0.0000;
// double v5 = 0.0000;
// double v6 = 0.0000;
// if (produce0422s.size() != 0) {
// for (MoneyProduce0422 produce0422 : produce0422s) {
// if (produce0422.getMaterialType() == 0) {
// if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
// v1 = v1;
// } else {
// v1 = v1 + Double.parseDouble(produce0422.getMaterialAmount());
// }
// } else if (produce0422.getMaterialType() == 1) {
// if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
// v2 = v2;
// } else {
// v2 = v2 + Double.parseDouble(produce0422.getMaterialAmount());
// }
//
// }else if (produce0422.getMaterialType() == 2) {
// if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
// v3 = v3;
// } else {
// v3 = v3 + Double.parseDouble(produce0422.getMaterialAmount());
// }
//
// }else if (produce0422.getMaterialType() == 3) {
// if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
// v4 = v4;
// } else {
// v4 = v4 + Double.parseDouble(produce0422.getMaterialAmount());
// }
//
// }else if (produce0422.getMaterialType() == 4) {
// if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
// v5 = v5;
// } else {
// v5 = v5 + Double.parseDouble(produce0422.getMaterialAmount());
// }
//
// }else if (produce0422.getMaterialType() == 5) {
// if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
// v6 = v6;
// } else {
// v6 = v6 + Double.parseDouble(produce0422.getMaterialAmount());
// }
//
// }
// }
//
// }
// MoneyProduce produce = new MoneyProduce();
// BigDecimal math = new BigDecimal("10000");
//
// BigDecimal bd = new BigDecimal(v1);
// bd = bd.divide(math, 2, RoundingMode.HALF_UP);
// BigDecimal bd1 = new BigDecimal(v2);
// bd1 = bd1.divide(math, 2, RoundingMode.HALF_UP);
// BigDecimal bd2 = new BigDecimal(v3);
// bd2 = bd2.divide(math, 2, RoundingMode.HALF_UP);
// BigDecimal bd3 = new BigDecimal(v4);
// bd3 = bd3.divide(math, 2, RoundingMode.HALF_UP);
// BigDecimal bd4 = new BigDecimal(v5);
// bd4 = bd4.divide(math, 2, RoundingMode.HALF_UP);
// BigDecimal bd5 = new BigDecimal(v6);
// bd5 = bd5.divide(math, 2, RoundingMode.HALF_UP);
//
//
// produce.setNfCholesterol(bd.toString());
// produce.setBreedCholesterol(bd1.toString());
// produce.setSheepAlcohol(bd2.toString());
// produce.setSheepSour(bd3.toString());
// produce.setSheepSourBing(bd4.toString());
// produce.setOther(bd5.toString());
// return produce;
}
private String getSum(String materialAmount, String parseDouble) {
return String.format("%.2f",Double.parseDouble(materialAmount),+Double.parseDouble(parseDouble));
}
@Override
public JSONArray produceAnalysis(MoneyProduceParam moneyProduceParam) {
String orgId = moneyProduceParam.getOrgId();
Integer type = moneyProduceParam.getType();//是否包含关联交易
Integer timeType = moneyProduceParam.getTimeType();
Integer number = moneyProduceParam.getNumber();
QueryWrapper produce0422QueryWrapper = new QueryWrapper<>();
produce0422QueryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
if (0 == timeType) {
Calendar calendar = Calendar.getInstance();
if (null == number) {
calendar.add(Calendar.YEAR, -2);
} else {
calendar.add(Calendar.YEAR, -number+1);
}
produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y'),material_type").orderByAsc("create_time");
} else {
Calendar calendar = Calendar.getInstance();
if (null == number) {
calendar.add(Calendar.MONTH, -12);
} else {
calendar.add(Calendar.MONTH, -number+1);
}
produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m'),material_type").orderByAsc("create_time");
}
if (1 == type) {
produce0422QueryWrapper.in("is_write",0, 1);
} else {
produce0422QueryWrapper.eq("is_write", 0);
}
produce0422QueryWrapper.select("IFNUll(sum(material_amount),'0') materialAmount,material_type materialType,create_time createTime");
List list = produce0422Mapper.selectList(produce0422QueryWrapper);
JSONArray jsonArray = new JSONArray();
BigDecimal math = new BigDecimal("10000");
for (MoneyProduce0422 produce : list) {
if (moneyProduceParam.getPType().equals(produce.getMaterialType())) {
JSONObject jsonObject = new JSONObject();
BigDecimal bg=new BigDecimal(produce.getMaterialAmount());
bg = bg.divide(math, 2, RoundingMode.HALF_UP);
jsonObject.put("value", bg.toString());
jsonObject.put("createTime", produce.getCreateTime());
jsonArray.add(jsonObject);
}
}
return jsonArray;
}
@Override
public JSONObject getInOut(MoneyInOutParam inOutParam) {
String orgId = inOutParam.getOrgId();
String time = inOutParam.getTime();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
queryWrapper.select(" IFNULL(sum(in_money),'0') inMoney,IFNULL(sum(out_money),'0') outMoney");
if ("".equals(time) || null == time) {
DateTime dateTime = DateUtil.beginOfYear(new Date());
queryWrapper.ge("create_time", dateTime);
} else {
// String year = time.substring(0, 4);
queryWrapper.between("create_time", time + "-01 00:00:00", time + "-31 23:59:59");
}
MoneyProduce moneyProduce = produceMapper.selectOne(queryWrapper);
JSONObject jsonObject = new JSONObject();
BigDecimal math = new BigDecimal("10000");
BigDecimal bg=new BigDecimal(moneyProduce.getInMoney());
bg = bg.divide(math, 2, RoundingMode.HALF_UP);
BigDecimal bg1=new BigDecimal(moneyProduce.getOutMoney());
bg1 = bg1.divide(math, 2, RoundingMode.HALF_UP);
jsonObject.put("in", bg.toString());
jsonObject.put("out", bg1.toString());
return jsonObject;
}
@Override
public JSONArray produceIncomeAnalysis(MoneyProduceIncomeParam moneyProduceParam) {
String orgId = moneyProduceParam.getOrgId();
Integer timeType = moneyProduceParam.getTimeType();
Integer number = moneyProduceParam.getNumber();
QueryWrapper produce0422QueryWrapper = new QueryWrapper<>();
produce0422QueryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
produce0422QueryWrapper.select("IFNUll(sum(material_qty),'0') materialQty,material_type materialType,create_time createTime");
if (0 == timeType) {
Calendar calendar = Calendar.getInstance();
if (null == number) {
calendar.add(Calendar.YEAR, -2);
} else {
calendar.add(Calendar.YEAR, -number+1);
}
produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y'),material_type").orderByAsc("create_time");
} else {
Calendar calendar = Calendar.getInstance();
if (null == number) {
calendar.add(Calendar.MONTH, -12);
} else {
calendar.add(Calendar.MONTH, -number+1);
}
produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m'),material_type").orderByAsc("create_time");
}
List list = produce0422Mapper.selectList(produce0422QueryWrapper);
JSONArray jsonArray = new JSONArray();
BigDecimal math = new BigDecimal("10000");
for (MoneyProduce0422 produce : list) {
if (moneyProduceParam.getPType().equals(produce.getMaterialType())) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("value", produce.getMaterialQty());
jsonObject.put("createTime", produce.getCreateTime());
jsonArray.add(jsonObject);
}
}
return jsonArray;
}
@Override
public List getList(MoneyInOutParam inOutParam) {
String orgId = inOutParam.getOrgId();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
// queryWrapper.ge("create_time", DateUtil.beginOfYear(new Date()));
queryWrapper.select(" IFNULL(sum(in_money),'0') inMoney,IFNULL(sum(out_money),'0') outMoney,create_time createTime");
queryWrapper.orderByAsc("create_time");
queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')");
List produces = produceMapper.selectList(queryWrapper);
List list = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
if (produces.size() != 0) {
for (MoneyProduce produce : produces) {
BigDecimal math = new BigDecimal("10000");
BigDecimal bg=new BigDecimal(produce.getInMoney());
BigDecimal bg1=new BigDecimal(produce.getOutMoney());
MoneyProduceScreenVo vo = new MoneyProduceScreenVo();
vo.setCreateTime(sdf.format(produce.getCreateTime()));
vo.setInMoney(bg.divide(math, 2, RoundingMode.HALF_UP).toString());
vo.setOutMoney(bg1.divide(math, 2, RoundingMode.HALF_UP).toString());
list.add(vo);
}
}
return list;
}
@Override
public CommonResult add(MoneyProduceAddParam addParam) {
String materialName = addParam.getMaterialName();
String orgId = addParam.getOrgId();
if ("".equals(orgId) || null == orgId) {
return CommonResult.error("公司不能为空");
}
Integer materType = getMaterType(materialName);
MoneyProduce0422 produce0422 = new MoneyProduce0422();
produce0422.setCreateTime(DateUtil.parse(addParam.getCreateTime()));
produce0422.setMaterialName(materialName);
produce0422.setMaterialType(materType);
// produce0422.setMaterialAmount("-"+addParam.getMaterialAmount());
produce0422.setMaterialAmount(String.format("%.2f", Double.parseDouble( addParam.getMaterialAmount()) * -1.0));
produce0422.setWriteMoney(addParam.getMaterialAmount());
produce0422.setOrgName(addParam.getOrgName());
produce0422.setCustomerName(addParam.getCustomerName());
produce0422.setIsWrite(1);
produce0422.setOrgId(orgId);
produce0422Mapper.insert(produce0422);
return CommonResult.ok();
}
@Override
public CommonResult edit(MoneyProduceEditParam editParam) {
String materialName = editParam.getMaterialName();
Integer materType = getMaterType(materialName);
MoneyProduce0422 produce0422 = produce0422Mapper.selectById(editParam.getId());
produce0422.setCreateTime(DateUtil.parse(editParam.getCreateTime()));
produce0422.setMaterialName(materialName);
produce0422.setMaterialType(materType);
// produce0422.setMaterialAmount("-"+editParam.getMaterialAmount());
produce0422.setMaterialAmount(String.format("%.2f", Double.parseDouble( editParam.getMaterialAmount()) * -1.0));
produce0422.setWriteMoney(editParam.getMaterialAmount());
produce0422.setOrgName(editParam.getOrgName());
produce0422.setCustomerName(editParam.getCustomerName());
produce0422.setIsWrite(1);
produce0422.setOrgId(editParam.getOrgId());
produce0422Mapper.updateById(produce0422);
return CommonResult.ok();
}
@Override
public CommonResult delete(Map paramsMap) {
String id = paramsMap.get("id");
produce0422Mapper.deleteById(id);
return CommonResult.ok();
}
@Override
public Page page(MoneyInOutPageParam inOutPageParam) {
String orgId = inOutPageParam.getOrgId();
Integer pageNum = inOutPageParam.getPageNum();
Integer pageSize = inOutPageParam.getPageSize();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId).isNotNull("write_money");
Page page = new Page(pageNum, pageSize);
return produce0422Mapper.selectPage(page, queryWrapper);
}
private Integer getMaterType(String fname) {
if ("NF级胆固醇".equals(fname)){
return 0;
}
if ("羊毛酸异丙酯".equals(fname)){
return 4;
}
if (fname.contains( "饲料级胆固醇")){
return 1;
}
if (fname.contains( "羊毛醇")){
return 2;
}
if (fname.contains( "羊毛酸")){
return 3;
}
return 5;
}
}