|
@@ -3,6 +3,9 @@ package vip.xiaonuo.purchase.service.impl;
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
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.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -15,14 +18,13 @@ import vip.xiaonuo.purchase.service.IPurchaseOrderService;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.Calendar;
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -48,7 +50,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
if ("".equals(time) || null == time) {
|
|
if ("".equals(time) || null == time) {
|
|
queryWrapper.ge("create_time", dateTime);
|
|
queryWrapper.ge("create_time", dateTime);
|
|
} else {
|
|
} else {
|
|
- queryWrapper.between("create_time", dateTime, time);
|
|
|
|
|
|
+ queryWrapper.between("create_time", time+"-01 00:00:00", time+"-31 23:59:59");
|
|
}
|
|
}
|
|
List<PurchaseOrder> purchaseOrders = purchaseOrderMapper.selectList(queryWrapper);
|
|
List<PurchaseOrder> purchaseOrders = purchaseOrderMapper.selectList(queryWrapper);
|
|
PurchaseOrderVo vo = new PurchaseOrderVo();
|
|
PurchaseOrderVo vo = new PurchaseOrderVo();
|
|
@@ -62,29 +64,56 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
DecimalFormat def = new DecimalFormat("0.00");
|
|
DecimalFormat def = new DecimalFormat("0.00");
|
|
if (purchaseOrders.size() != 0) {
|
|
if (purchaseOrders.size() != 0) {
|
|
for (PurchaseOrder purchaseOrder : purchaseOrders) {
|
|
for (PurchaseOrder purchaseOrder : purchaseOrders) {
|
|
- money = money + Double.valueOf(purchaseOrder.getPurchaseMoney());
|
|
|
|
- acceptMoney = acceptMoney + Double.valueOf(purchaseOrder.getMaterialAcceptPrice());
|
|
|
|
- acceptNumber = acceptNumber + Double.valueOf(purchaseOrder.getMaterialAcceptNumber());
|
|
|
|
- enterNumber = enterNumber + Double.valueOf(purchaseOrder.getEnterNumber());
|
|
|
|
- enterMoney = enterMoney + Double.valueOf(purchaseOrder.getEnterPrice());
|
|
|
|
- invoiceMoney = invoiceMoney + Double.valueOf(purchaseOrder.getInvoicePrice());
|
|
|
|
- invoiceNumber = invoiceNumber + purchaseOrder.getInvoiceNumber();
|
|
|
|
|
|
+ if (purchaseOrder.getPurchaseMoney() != null) {
|
|
|
|
+ money = money + Double.valueOf(purchaseOrder.getPurchaseMoney());
|
|
|
|
+ }
|
|
|
|
+ if (purchaseOrder.getMaterialAcceptPrice() != null) {
|
|
|
|
+ acceptMoney = acceptMoney + Double.valueOf(purchaseOrder.getMaterialAcceptPrice());
|
|
|
|
+ }
|
|
|
|
+ if (purchaseOrder.getMaterialAcceptNumber() != null) {
|
|
|
|
+ acceptNumber = acceptNumber + Double.valueOf(purchaseOrder.getMaterialAcceptNumber());
|
|
|
|
+ }
|
|
|
|
+ if (purchaseOrder.getEnterNumber() != null) {
|
|
|
|
+ enterNumber = enterNumber + Double.valueOf(purchaseOrder.getEnterNumber());
|
|
|
|
+ }
|
|
|
|
+ if (purchaseOrder.getEnterPrice() != null) {
|
|
|
|
+ enterMoney = enterMoney + Double.valueOf(purchaseOrder.getEnterPrice());
|
|
|
|
+ }
|
|
|
|
+ if (purchaseOrder.getInvoicePrice() != null) {
|
|
|
|
+ invoiceMoney = invoiceMoney + Double.valueOf(purchaseOrder.getInvoicePrice());
|
|
|
|
+ }
|
|
|
|
+ if (purchaseOrder.getInvoiceNumber() != null) {
|
|
|
|
+ invoiceNumber = invoiceNumber + purchaseOrder.getInvoiceNumber();
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
- vo.setMonthRank(purchaseOrders.get(purchaseOrders.size() - 1).getMonthRank());
|
|
|
|
- vo.setRank(purchaseOrders.get(purchaseOrders.size() - 1).getRank());
|
|
|
|
- vo.setOrderNumber(String.valueOf(purchaseOrders.size()));
|
|
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
vo.setMonthRank("0");
|
|
vo.setMonthRank("0");
|
|
vo.setRank("0");
|
|
vo.setRank("0");
|
|
vo.setOrderNumber("0");
|
|
vo.setOrderNumber("0");
|
|
}
|
|
}
|
|
- vo.setPurchaseMoney(def.format(money));
|
|
|
|
- vo.setMaterialAcceptPrice(def.format(acceptMoney));
|
|
|
|
|
|
+ QueryWrapper<PurchaseOrder> queryWrapper2 = new QueryWrapper<>();
|
|
|
|
+ queryWrapper2.eq(StringUtils.isNotBlank(orgId), "org_id", orgId).orderByAsc("create_time");
|
|
|
|
+ if ("".equals(time) || null == time) {
|
|
|
|
+ queryWrapper2.ge("create_time", dateTime);
|
|
|
|
+ } else {
|
|
|
|
+ queryWrapper2.between("create_time", time+"-01 00:00:00", time+"-31 23:59:59");
|
|
|
|
+ }
|
|
|
|
+ queryWrapper2.select(" CONVERT(IFNULL(avg(rank),'0'),decimal(10,2)) 'rank',CONVERT(IFNULL(avg(month_rank),'0'),decimal(10,2)) 'monthRank'");
|
|
|
|
+ PurchaseOrder order = purchaseOrderMapper.selectOne(queryWrapper2);
|
|
|
|
+
|
|
|
|
+ vo.setRank(order.getRank());
|
|
|
|
+ vo.setMonthRank(order.getMonthRank());
|
|
|
|
+ vo.setOrderNumber(String.valueOf(purchaseOrders.size()));
|
|
|
|
+
|
|
|
|
+ vo.setPurchaseMoney(def.format(money/10000));
|
|
|
|
+ vo.setMaterialAcceptPrice(def.format(acceptMoney/10000));
|
|
vo.setMaterialAcceptNumber(def.format(acceptNumber));
|
|
vo.setMaterialAcceptNumber(def.format(acceptNumber));
|
|
vo.setEnterNumber(def.format(enterNumber));
|
|
vo.setEnterNumber(def.format(enterNumber));
|
|
- vo.setEnterPrice(def.format(enterMoney));
|
|
|
|
- vo.setInvoiceNumber(invoiceNumber);
|
|
|
|
- vo.setInvoicePrice(def.format(invoiceMoney));
|
|
|
|
|
|
+ vo.setEnterPrice(def.format(enterMoney/10000));
|
|
|
|
+ vo.setInvoiceNumber(purchaseOrders.size());
|
|
|
|
+ vo.setInvoicePrice(def.format(invoiceMoney/10000));
|
|
|
|
|
|
LocalDate currentDate = LocalDate.now();
|
|
LocalDate currentDate = LocalDate.now();
|
|
int lastYear = currentDate.getYear() - 1;
|
|
int lastYear = currentDate.getYear() - 1;
|
|
@@ -94,7 +123,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
queryWrapper1.select(" CONVERT(IFNULL(avg(purchase_money),'0'),decimal(10,2)) 'purchaseMoney'");
|
|
queryWrapper1.select(" CONVERT(IFNULL(avg(purchase_money),'0'),decimal(10,2)) 'purchaseMoney'");
|
|
PurchaseOrder purchaseOrder = purchaseOrderMapper.selectOne(queryWrapper1);
|
|
PurchaseOrder purchaseOrder = purchaseOrderMapper.selectOne(queryWrapper1);
|
|
if (ObjectUtil.isNotEmpty(purchaseOrder)) {
|
|
if (ObjectUtil.isNotEmpty(purchaseOrder)) {
|
|
- vo.setLastAvgPrice(purchaseOrder.getPurchaseMoney());
|
|
|
|
|
|
+ vo.setLastAvgPrice(def.format(Double.valueOf(purchaseOrder.getPurchaseMoney())/10000));
|
|
} else {
|
|
} else {
|
|
vo.setLastAvgPrice("0.00");
|
|
vo.setLastAvgPrice("0.00");
|
|
}
|
|
}
|
|
@@ -133,7 +162,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
if ("".equals(orderParam.getOrderType()) || null == orderParam.getOrderType()) {
|
|
if ("".equals(orderParam.getOrderType()) || null == orderParam.getOrderType()) {
|
|
queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')");
|
|
queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')");
|
|
} else {
|
|
} else {
|
|
- queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')" + "," + orderParam.getOrderType());
|
|
|
|
|
|
+ queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')"/* + "," + orderParam.getOrderType()*/);
|
|
}
|
|
}
|
|
List<PurchaseOrder> orders = purchaseOrderMapper.selectList(queryWrapper);
|
|
List<PurchaseOrder> orders = purchaseOrderMapper.selectList(queryWrapper);
|
|
if (orders.size() != 0) {
|
|
if (orders.size() != 0) {
|
|
@@ -189,6 +218,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
List<PurchaseOrder> orders1 = purchaseOrderMapper.selectList(queryWrapper);
|
|
List<PurchaseOrder> orders1 = purchaseOrderMapper.selectList(queryWrapper);
|
|
List<PurchaseMoneyVo> list = new ArrayList<>();
|
|
List<PurchaseMoneyVo> list = new ArrayList<>();
|
|
|
|
|
|
|
|
+ BigDecimal math = new BigDecimal("10000");
|
|
for (int i = 1; i < 13; i++) {
|
|
for (int i = 1; i < 13; i++) {
|
|
PurchaseMoneyVo vo = new PurchaseMoneyVo();
|
|
PurchaseMoneyVo vo = new PurchaseMoneyVo();
|
|
vo.setTime(i + "月");
|
|
vo.setTime(i + "月");
|
|
@@ -197,7 +227,9 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
cal.setTime(order.getCreateTime());
|
|
cal.setTime(order.getCreateTime());
|
|
int month = cal.get(Calendar.MONTH) + 1; // 注意月份是从0开始计数的,所以需要加1
|
|
int month = cal.get(Calendar.MONTH) + 1; // 注意月份是从0开始计数的,所以需要加1
|
|
if (i == month) {
|
|
if (i == month) {
|
|
- vo.setMoney(order.getPurchaseMoney());
|
|
|
|
|
|
+ BigDecimal bg = new BigDecimal(order.getPurchaseMoney());
|
|
|
|
+ bg = bg.divide(math, 2, RoundingMode.HALF_UP);
|
|
|
|
+ vo.setMoney(bg.toString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (PurchaseOrder order : orders1) {
|
|
for (PurchaseOrder order : orders1) {
|
|
@@ -205,7 +237,9 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
cal.setTime(order.getCreateTime());
|
|
cal.setTime(order.getCreateTime());
|
|
int month = cal.get(Calendar.MONTH) + 1; // 注意月份是从0开始计数的,所以需要加1
|
|
int month = cal.get(Calendar.MONTH) + 1; // 注意月份是从0开始计数的,所以需要加1
|
|
if (i == month) {
|
|
if (i == month) {
|
|
- vo.setLastMoney(order.getPurchaseMoney());
|
|
|
|
|
|
+ BigDecimal bg = new BigDecimal(order.getPurchaseMoney());
|
|
|
|
+ bg = bg.divide(math, 2, RoundingMode.HALF_UP);
|
|
|
|
+ vo.setLastMoney(bg.toString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
list.add(vo);
|
|
list.add(vo);
|
|
@@ -214,7 +248,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public List<PurchaseMaterialVo> materialType(PurchaseParam param) {
|
|
|
|
|
|
+ public JSONArray materialType(PurchaseParam param) {
|
|
QueryWrapper<PurchaseOrder> queryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<PurchaseOrder> queryWrapper = new QueryWrapper<>();
|
|
String time = param.getTime();
|
|
String time = param.getTime();
|
|
DateTime dateTime = DateUtil.beginOfYear(new Date());
|
|
DateTime dateTime = DateUtil.beginOfYear(new Date());
|
|
@@ -224,8 +258,104 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
|
|
queryWrapper.between("create_time", time+"-01 00:00:00", time+"-31 23:59:59");
|
|
queryWrapper.between("create_time", time+"-01 00:00:00", time+"-31 23:59:59");
|
|
}
|
|
}
|
|
queryWrapper.eq(StringUtils.isNotBlank(param.getOrgId()), "org_id", param.getOrgId());
|
|
queryWrapper.eq(StringUtils.isNotBlank(param.getOrgId()), "org_id", param.getOrgId());
|
|
|
|
+ BigDecimal math = new BigDecimal("10000");
|
|
List<PurchaseMaterialVo> list = purchaseOrderMapper.getSupplier(queryWrapper);
|
|
List<PurchaseMaterialVo> list = purchaseOrderMapper.getSupplier(queryWrapper);
|
|
- return list;
|
|
|
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
|
+ BigDecimal bg = new BigDecimal(list.get(i).getValue());
|
|
|
|
+// bg = bg.divide(math, 2, RoundingMode.HALF_UP);
|
|
|
|
+// list.get(i).setValue(bg.toString());
|
|
|
|
+ if (list.get(i).getName() == null) {
|
|
|
|
+ list.remove(i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ JSONArray jsonArray = new JSONArray(list);
|
|
|
|
+ System.out.println("数组的大小"+jsonArray.size());
|
|
|
|
+ JSONArray array = jsonArraySort(jsonArray, "value", true);
|
|
|
|
+ return array;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*数组排序*/
|
|
|
|
+ public static JSONArray jsonArraySort(JSONArray jsonArr, String sortKey, boolean is_desc) {
|
|
|
|
+ //存放排序结果json数组
|
|
|
|
+ JSONArray sortedJsonArray = new JSONArray();
|
|
|
|
+ //用于排序的list
|
|
|
|
+ List<JSONObject> jsonValues = new ArrayList<JSONObject>();
|
|
|
|
+ //将参数json数组每一项取出,放入list
|
|
|
|
+ if (jsonArr.size() < 6) {
|
|
|
|
+ for (int i = 0; i < jsonArr.size(); i++) {
|
|
|
|
+ jsonValues.add(jsonArr.getJSONObject(i));
|
|
|
|
+ }
|
|
|
|
+ //快速排序,重写compare方法,完成按指定字段比较,完成排序
|
|
|
|
+ Collections.sort(jsonValues, new Comparator<JSONObject>() {
|
|
|
|
+ //排序字段
|
|
|
|
+ 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));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ for (int i = 0; i < 5; i++) {
|
|
|
|
+ jsonValues.add(jsonArr.getJSONObject(i));
|
|
|
|
+ }
|
|
|
|
+ //快速排序,重写compare方法,完成按指定字段比较,完成排序
|
|
|
|
+ Collections.sort(jsonValues, new Comparator<JSONObject>() {
|
|
|
|
+ //排序字段
|
|
|
|
+ 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 < 5; i++) {
|
|
|
|
+ sortedJsonArray.add(jsonValues.get(i));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return sortedJsonArray;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|