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; } }