package vip.xiaonuo.money.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.math.Money; import cn.hutool.core.util.ObjectUtil; 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.springframework.beans.factory.annotation.Autowired; import vip.xiaonuo.money.entity.MoneyBusiness; import vip.xiaonuo.money.entity.MoneyCost; import vip.xiaonuo.money.entity.MoneyWarning; import vip.xiaonuo.money.mapper.MoneyBusinessMapper; import vip.xiaonuo.money.mapper.MoneyCostMapper; import vip.xiaonuo.money.param.*; import vip.xiaonuo.money.service.IMoneyBusinessService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import vip.xiaonuo.sale.mapper.SaleCostMapper; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** *

* 财务营业情况 服务实现类 *

* * @author author * @since 2024-11-19 */ @Service public class MoneyBusinessServiceImpl extends ServiceImpl implements IMoneyBusinessService { @Autowired private MoneyBusinessMapper businessMapper; @Autowired private MoneyCostMapper moneyCostMapper; @Override public JSONArray listBusiness(MoneyBusinessParam moneyBusinessParam) { String orgId = moneyBusinessParam.getOrgId(); String time = moneyBusinessParam.getTime();//2024-10 QueryWrapper queryWrapper = new QueryWrapper<>(); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(orgId),"org_id", orgId); queryWrapper1.eq(StringUtils.isNotBlank(orgId),"org_id", orgId); JSONArray jsonArray = new JSONArray(); if ("".equals(time) || null == time) { DateTime dateTime = DateUtil.beginOfMonth(new Date()); queryWrapper.ge("create_time", dateTime); DateTime beginOfYear = DateUtil.beginOfYear(new Date()); queryWrapper1.ge("create_time", beginOfYear); } else { String year = time.substring(0, 4); queryWrapper.between("create_time", time + "-01 00:00:00", time + "-31 23:59:59"); queryWrapper1.between("create_time", year + "-01-01 00:00:00", year + "-12-31 23:59:59"); } MoneyBusiness moneyBusiness = new MoneyBusiness(); queryWrapper.select(" IFNULL(sum(business_income),'0') business_income," + "IFNULL(sum(business_cost),'0') businessCost," + "IFNULL(sum(profit),'0') profit," + "IFNULL(sum(taxes),'0') taxes," + "IFNULL(sum(balance),'0') balance"); queryWrapper1.select(" IFNULL(sum(business_income),'0') business_income," + "IFNULL(sum(business_cost),'0') businessCost," + "IFNULL(sum(profit),'0') profit," + "IFNULL(sum(taxes),'0') taxes," + "IFNULL(sum(balance),'0') balance"); MoneyBusiness selectOne = businessMapper.selectOne(queryWrapper); MoneyBusiness selectOne1 = businessMapper.selectOne(queryWrapper1); JSONObject jsonObject = new JSONObject(); BigDecimal math = new BigDecimal("10000"); BigDecimal bd = new BigDecimal(selectOne.getBusinessIncome()); BigDecimal bd1 = new BigDecimal(selectOne.getBusinessCost()); BigDecimal bd2 = new BigDecimal(selectOne.getProfit()); BigDecimal bd3 = new BigDecimal(selectOne.getTaxes()); BigDecimal bd4 = new BigDecimal(selectOne.getBalance()); bd = bd.divide(math, 2, RoundingMode.HALF_UP); bd1 = bd1.divide(math, 2, RoundingMode.HALF_UP); bd2 = bd2.divide(math, 2, RoundingMode.HALF_UP); bd3 = bd3.divide(math, 2, RoundingMode.HALF_UP); bd4 = bd4.divide(math, 2, RoundingMode.HALF_UP); moneyBusiness.setBusinessIncome(bd.toString()); moneyBusiness.setBusinessCost(bd1.toString()); moneyBusiness.setProfit(bd2.toString()); moneyBusiness.setTaxes(bd3.toString()); moneyBusiness.setBalance(bd4.toString()); jsonObject.put("type", "month"); jsonObject.put("object", moneyBusiness); JSONObject jsonObject1 = new JSONObject(); MoneyBusiness moneyBusiness1 = new MoneyBusiness(); BigDecimal bd5 = new BigDecimal(selectOne1.getBusinessIncome()); BigDecimal bd6 = new BigDecimal(selectOne1.getBusinessCost()); BigDecimal bd7 = new BigDecimal(selectOne1.getProfit()); BigDecimal bd8 = new BigDecimal(selectOne1.getTaxes()); BigDecimal bd9 = new BigDecimal(selectOne1.getBalance()); BigDecimal divide = bd5.divide(math); divide = divide.setScale(2, RoundingMode.HALF_UP); // bd5 = bd5.divide(math, 2, RoundingMode.HALF_UP); bd6 = bd6.divide(math, 2, RoundingMode.HALF_UP); bd7 = bd7.divide(math, 2, RoundingMode.HALF_UP); bd8 = bd8.divide(math, 2, RoundingMode.HALF_UP); bd9 = bd9.divide(math, 2, RoundingMode.HALF_UP); moneyBusiness1.setBusinessIncome(divide.toString()); moneyBusiness1.setBusinessCost(bd6.toString()); moneyBusiness1.setProfit(bd7.toString()); moneyBusiness1.setTaxes(bd8.toString()); moneyBusiness1.setBalance(bd9.toString()); jsonObject1.put("type", "year"); jsonObject1.put("object", moneyBusiness1); jsonArray.add(jsonObject); jsonArray.add(jsonObject1); return jsonArray; } @Override public Page getPage(MoneyBusinessPageParam pageParam) { String orgId = pageParam.getOrgId(); Page page = new Page(pageParam.getPageNum(), pageParam.getPageSize()); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId); return businessMapper.selectPage(page, queryWrapper); } @Override public void addBusiness(MoneyBusiness business) { business.setCreateTime(new Date()); businessMapper.insert(business); } @Override public void updateBusiness(MoneyBusiness business) { businessMapper.updateById(business); } @Override public void deleteBusiness(MoneyBusiness business) { businessMapper.deleteById(business); } @Override public DsBusAllParam dsBusAll(MoneyAnalysisParam moneyAnalysisParam) { String orgId = moneyAnalysisParam.getOrgId(); String time = moneyAnalysisParam.getTime(); Date date ; if (StringUtils.isBlank(time)){ date = DateUtil.beginOfMonth(new Date()); }else { date = DateUtil.beginOfMonth( DateUtil.parse(time,"yyyy-MM")); } DateTime lastYear = DateUtil.offsetMonth(date, -12); QueryWrapper wapper = new QueryWrapper(); wapper.eq(StringUtils.isNotBlank(orgId),"org_id", orgId).between("create_time", date, DateUtil.endOfMonth(date)); DsBusAllParam busAllParam = businessMapper.dsBusAll(wapper); wapper.clear(); wapper.eq(StringUtils.isNotBlank(orgId),"org_id", orgId) .between("create_time", lastYear, DateUtil.endOfMonth(lastYear)); DsBusAllParam lastBusAllParam = businessMapper.dsBusAll(wapper); //今年 wapper.clear(); wapper.eq(StringUtils.isNotBlank(orgId),"org_id", orgId) .between("create_time", DateUtil.beginOfYear(date), DateUtil.endOfYear(date)); DsBusAllParam yearBusAllParam = businessMapper.dsBusAll(wapper); //去年 wapper.clear(); wapper.eq(StringUtils.isNotBlank(orgId),"org_id", orgId) .between("create_time", DateUtil.beginOfYear(lastYear), DateUtil.endOfYear(lastYear)); DsBusAllParam lastYearBusAllParam = businessMapper.dsBusAll(wapper); //计算同比 busAllParam.setBalanceIsOn(getDouble(lastBusAllParam.getBalance()) getDsBusYyJlYjDetail(DsBusParam dsBusParam) { String orgId = dsBusParam.getOrgId(); Integer type = dsBusParam.getType(); QueryWrapper wapper = new QueryWrapper(); wapper.eq(StringUtils.isNotBlank(orgId),"org_id", orgId).orderByAsc("create_time").groupBy("ymonth"); List busAllParams; if (ObjectUtil.isEmpty(type) || 0 == type){ busAllParams = businessMapper.getDsBusYyJlYjDetailMonth(wapper); }else { busAllParams = businessMapper.getDsBusYyJlYjDetailYear(wapper); } return busAllParams; } @Override public List getBalanceDetail(DsBusParam dsBusParam) { String orgId = dsBusParam.getOrgId(); Integer type = dsBusParam.getType(); QueryWrapper wapper = new QueryWrapper(); wapper.eq( StringUtils.isNotBlank(orgId),"org_id", orgId).orderByAsc("create_time").groupBy("ymonth"); List busAllParams; if (ObjectUtil.isEmpty(type) || 0 == type){ busAllParams = businessMapper.getBalanceDetailMonth(wapper); }else { busAllParams = businessMapper.getBalanceDetailYear(wapper); } for (int i = 0; i < busAllParams.size() -1 ; i++) { DsBusAllParam lastDsBus = busAllParams.get(i); DsBusAllParam dsBusAllParam = busAllParams.get(i + 1); dsBusAllParam.setBalanceOnYear(calculateYOYZiJinYvE(getDouble(dsBusAllParam.getBalance()),getDouble(lastDsBus.getBalance()) )); dsBusAllParam.setBalanceIsOn(getDouble(lastDsBus.getBalance()) getBorrowDetail(DsBusParam dsBusParam) { String orgId = dsBusParam.getOrgId(); Integer type = dsBusParam.getType(); QueryWrapper wapper = new QueryWrapper(); wapper.eq( StringUtils.isNotBlank(orgId),"org_id", orgId).orderByAsc("borrow_time").groupBy("ymonth"); List busAllParams; if (ObjectUtil.isEmpty(type) || 0 == type){ busAllParams = businessMapper.getBorrowDetailMonth(wapper); }else { busAllParams = businessMapper.getBorrowDetailYear(wapper); } return busAllParams; } @Override public List getMoneyDetail(DsBusParam dsBusParam) { String orgId = dsBusParam.getOrgId(); Integer type = dsBusParam.getType(); QueryWrapper wapper = new QueryWrapper(); wapper.eq( StringUtils.isNotBlank(orgId),"org_id", orgId).orderByAsc("create_time").groupBy("ymonth"); List busAllParams; if (ObjectUtil.isEmpty(type) || 0 == type){ busAllParams = moneyCostMapper.getMoneyDetailMonth(wapper); }else { busAllParams = moneyCostMapper.getMoneyDetailYear(wapper); } return busAllParams; } @Override public Page listBusines(MoneyOverduePageParam pageParam) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(pageParam.getOrgId()), "org_id", pageParam.getOrgId()).ge("taxes" ,0); Page page = new Page(pageParam.getPageNum(), pageParam.getPageSize()); return this.page(page, queryWrapper); } @Override public Page listBalance(MoneyParam pageParam) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(pageParam.getOrgId()), "org_id", pageParam.getOrgId()).ge("balance" ,0); Page page = new Page(pageParam.getPageNum(), pageParam.getPageSize()); return this.page(page, queryWrapper); } public static String calculateYOYChange(double currentValue, double previousValue) { // 处理零值情况 if (previousValue == 0) { return "0%"; } // 计算同比变化率 double percentageChange = (Math.abs((currentValue - previousValue) / previousValue)) * 100; if (percentageChange >500){ return "100%"; } return String.format("%.2f%%", percentageChange); } public static String calculateYOYZiJinYvE(double currentValue, double previousValue) { // 处理零值情况 if (previousValue == 0) { return "0"; } // 计算同比变化率 double percentageChange = ((currentValue - previousValue) /previousValue) * 100; if (percentageChange >200){ return "100"; } return String.format("%.2f", percentageChange); } public static String calculateWanChenLv(double currentValue, double previousValue) { // 处理零值情况 if (previousValue == 0) { return "100"; } // 计算同比变化率 double percentageChange = (currentValue /previousValue) * 100; if (percentageChange >200){ return "100"; } return String.format("%.2f", percentageChange); } }