package vip.xiaonuo.money.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
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.MoneyOverdue;
import vip.xiaonuo.money.entity.MoneyWriteOverdue;
import vip.xiaonuo.money.entity.vo.MoneyBorrowUserVo;
import vip.xiaonuo.money.mapper.MoneyOverdueMapper;
import vip.xiaonuo.money.mapper.MoneyWriteOverdueMapper;
import vip.xiaonuo.money.param.MoneyOverdueDetailPageParam;
import vip.xiaonuo.money.param.MoneyOverduePageParam;
import vip.xiaonuo.money.param.MoneyOverdueParam;
import vip.xiaonuo.money.service.IMoneyOverdueService;
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-21
*/
@Service
public class MoneyOverdueServiceImpl extends ServiceImpl implements IMoneyOverdueService {
@Autowired
private MoneyOverdueMapper overdueMapper;
@Autowired
private MoneyWriteOverdueMapper writeOverdueMapper;
@Override
public JSONObject getOverdueCount(MoneyOverdueParam overdueParam) {
String orgId = overdueParam.getOrgId();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
queryWrapper.eq("document_type",1);
Date date = new Date();
queryWrapper.le("end_time", DateUtil.offsetMonth(date ,-1));
queryWrapper.select("convert(IFNULL(sum(rmbje),'0') /10000,decimal(10,2)) rmbje");
MoneyWriteOverdue writeOverdue = writeOverdueMapper.selectOne(queryWrapper);
JSONObject jsonObject = new JSONObject();
jsonObject.put("money", writeOverdue.getRmbje());
return jsonObject;
}
@Override
public JSONObject overdueRank(MoneyOverdueParam overdueParam) {
String orgId = overdueParam.getOrgId();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
queryWrapper.select("rmbje /10000 rmbje ,end_time endTime,document_type");
queryWrapper.eq(StringUtils.isNotBlank(overdueParam.getUserName()),"user_name" ,overdueParam.getUserName());
List writeOverdues = writeOverdueMapper.selectList(queryWrapper);
double count = 0.00;
double isOverdue = 0.00;
double disOverdue = 0.00;
JSONObject jsonObject = new JSONObject();
DecimalFormat def = new DecimalFormat("0.00");
if (ObjectUtil.isNotEmpty(writeOverdues)) {
for (MoneyWriteOverdue overdue : writeOverdues) {
if (ObjectUtil.isEmpty(overdue)){
continue;
}
// if (overdue.getEndTime().before(new Date())) {
if ("1".equals(overdue.getDocumentType())) {
isOverdue = isOverdue + Double.valueOf(overdue.getRmbje());
}else {
disOverdue = disOverdue + Double.valueOf(overdue.getRmbje());
}
count = isOverdue + disOverdue;
}
if (count == 0) {
jsonObject.put("isOverdue", "0");
jsonObject.put("disOverdue", "0");
} else {
double v = isOverdue / count;
System.out.println(v);
System.out.println(disOverdue / count);
// jsonObject.put("isOverdue", def.format(isOverdue / count));
// jsonObject.put("disOverdue", def.format(disOverdue / count));
// jsonObject.put("isOverdueMoney", def.format(isOverdue ));
// jsonObject.put("disOverdueMoney", def.format(disOverdue ));
// jsonObject.put("isOverdue", def.format(isOverdue / count));
// jsonObject.put("disOverdue", def.format(disOverdue / count));
jsonObject.put("isOverdue", def.format(isOverdue ));
jsonObject.put("disOverdue", def.format(disOverdue ));
}
} else {
jsonObject.put("isOverdue", "0");
jsonObject.put("disOverdue", "100");
}
return jsonObject;
}
@Override
public List userRank(MoneyOverdueParam overdueParam) {
String orgId = overdueParam.getOrgId();
String time = overdueParam.getTime();
List userRank = overdueMapper.getUserRank(time + "-01 00:00:00", time + "-31 23:59:59",orgId);
// BigDecimal math = new BigDecimal("10000");
// List list = new ArrayList<>();
//
// if (userRank.size() != 0) {
// Double collect = 0.00;
// Double overdue = 0.00;
// for (int i = 0; i < userRank.size(); i++) {
// if (i < 15) {
//
// list.add(userRank.get(i));
// } else {
// collect = collect + Double.valueOf(userRank.get(i).getCollectPrice());
// overdue = overdue + Double.valueOf(userRank.get(i).getOverduePrice());
// }
// }
//
//
// }
return userRank;
}
@Override
public Page overdueDetail(MoneyOverdueDetailPageParam overduePageParam) {
String orgId = overduePageParam.getOrgId();
Integer pageNum = overduePageParam.getPageNum();
Integer pageSize = overduePageParam.getPageSize();
Integer type = overduePageParam.getType();
String userName = overduePageParam.getUserName();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId).orderByDesc("id");
queryWrapper.eq(StringUtils.isNotBlank(userName), "user_name", userName);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 15);
if (ObjectUtil.isNotEmpty(type)){
if (3 == type) {
queryWrapper.eq("document_type",1);
queryWrapper.ge("end_time", calendar.getTime());
} else if (1 == type) {
queryWrapper.eq("document_type", 0);
} else if (2== type) {
queryWrapper.le("end_time", new Date()).eq("document_type",1);
}
}
Page page = new Page<>(pageNum, pageSize);
Page selectPage = writeOverdueMapper.selectPage(page, queryWrapper);
return selectPage;
}
@Override
public List listUserName(Map paramsMap) {
String orgId = paramsMap.get("orgId");
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
queryWrapper.groupBy("user_name");
return overdueMapper.selectList(queryWrapper);
}
@Override
public List keHu(MoneyWriteOverdue moneyOverdue) {
String orgId = moneyOverdue.getOrgId();
List moneyOverdues = writeOverdueMapper.selectList(new QueryWrapper().select("user_name").eq(StringUtils.isNotBlank(orgId), "org_id", orgId).groupBy("user_name"));
return moneyOverdues;
}
/*数组排序*/
public static JSONArray jsonArraySort(JSONArray jsonArr, String sortKey, boolean is_desc) {
//存放排序结果json数组
JSONArray sortedJsonArray = new JSONArray();
//用于排序的list
List jsonValues = new ArrayList();
//将参数json数组每一项取出,放入list
for (int i = 0; i < jsonArr.size(); i++) {
jsonValues.add(jsonArr.getJSONObject(i));
}
//快速排序,重写compare方法,完成按指定字段比较,完成排序
Collections.sort(jsonValues, new Comparator() {
//排序字段
private final String KEY_NAME = sortKey;
//重写compare方法
@Override
public int compare(JSONObject a, JSONObject b) {
//如果用String接会导致一位数和两位数混合比对的时候不能准确比出来,要用int类型接
//String valA = new String();
//String valB = new String();
Float valA = 0.00f;
Float valB = 0.00f;
try {
valA = Float.parseFloat(a.getString(KEY_NAME));
valB = Float.parseFloat(b.getString(KEY_NAME));
} catch (JSONException e) {
e.printStackTrace();
}
//是升序还是降序
if (is_desc) {
return -valA.compareTo(valB);
} else {
return -valB.compareTo(valA);
}
}
});
//将排序后结果放入结果jsonArray
for (int i = 0; i < jsonArr.size(); i++) {
sortedJsonArray.add(jsonValues.get(i));
}
return sortedJsonArray;
}
}