Files
quote_price/src/main/java/lingtao/net/service/QuoteDataService.java
T
2025-02-20 15:14:38 +08:00

536 lines
19 KiB
Java

package lingtao.net.service;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lingtao.net.bean.Msg;
import lingtao.net.bean.QuoteData;
import lingtao.net.bean.SysRole;
import lingtao.net.bean.SysUser;
import lingtao.net.controller.CustomerDataControlle;
import lingtao.net.dao.QuoteDataMapper;
import lingtao.net.dao.SysRoleMapper;
import lingtao.net.util.DateFormatUtils;
@Service
public class QuoteDataService {
@Autowired
private QuoteDataMapper quoteDataMapper;
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private SysRoleMapper sysRolemapper;
/**
* 根据角色身份查询数据列表
*/
public List<QuoteData> quoteDatas(QuoteData quoteData) {
quoteData.setQuoteTimeEnd(new DateFormatUtils().formatEndTime(quoteData.getQuoteTimeBegin()));
quoteData.setQuoteTimeBegin(new DateFormatUtils().formatBeginTime(quoteData.getQuoteTimeBegin()));
// 用户所拥有的角色
SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal();
String[] roleArr = user.getRole().split(",");
// 转成list,拿掉‘组长’身份
List<String> list = new ArrayList<String>(Arrays.asList(roleArr));
// 判断是否拥有超管身份标识
boolean isSuper = false;
boolean isAllShop = false;
for (int i = 0; i < roleArr.length; i++) {
// 有【超级管理员】身份,状态改为true
if ("1".equals(roleArr[i])) {
isSuper = true;
break;
}
// 有【全部店铺】身份,状态改为true
if ("777".equals(roleArr[i])) {
isAllShop = true;
break;
}
// 如果有【店长/考试审核员/客服/组长/IP管理员/操作日志/不填旺旺】身份,去掉。不带去查询
if ("666".equals(roleArr[i]) || "888".equals(roleArr[i]) || "999".equals(roleArr[i])
|| "1011".equals(roleArr[i]) || "1015".equals(roleArr[i]) || "1042".equals(roleArr[i])
|| "1049".equals(roleArr[i])) {
list.remove(roleArr[i]);
}
}
// 将list转为String[] 数组
roleArr = list.toArray(new String[list.size()]);
// 如果没有【超级管理员/全部店铺】身份
if (!isSuper && !isAllShop) {
// 再判断有没有查询条件且没有选择查找条件
// 全部属性为空 true:没有查询条件 false:有查询条件
boolean isNullFlag = true;
try {
// 前台会带用户的角色回来,上面已经获取,这里设置null不影响
quoteData.setRole(null);
// 判断quoteData对象是否有属性(查询条件)
for (Field f : quoteData.getClass().getDeclaredFields()) {
f.setAccessible(true);
if (f.get(quoteData) != null && StringUtils.isNotBlank(f.get(quoteData).toString())) {
// 有属性
isNullFlag = false;
break;
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
// 如果有多个店铺角色
if (roleArr.length > 1) {
// 全部属性为空 即没有条件查询,默认查出所有的店铺数据
if (isNullFlag) {
quoteData.setRoleArr(roleArr);
} else {// 不为空,根据店铺和条件查询数据
quoteData.setRoleSearchArr(roleArr);
}
} else {// 只有一个角色
quoteData.setRoleSearch(roleArr[0]);
}
}
// 如果有【超管】,但是没有【所有店铺】,隐藏非本部店铺
if (isSuper && !isAllShop) {
quoteData.setIsSelfShop("0");
}
// 有【超管、全部店铺】直接走这
return quoteDataMapper.quoteDatas(quoteData);
}
public Msg updateById(int id, String field, String value, String username) {
QuoteData quoteData = new QuoteData();
SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal();
boolean flag = new CustomerDataControlle().isSuperOrManager();
// 如果修改的是店长评语,判断有没有【组长】身份
if ("commentManager".equals(field)) {
// 超管、组长身份才允许修改comment
if (!flag) {
return Msg.fail("只允许店长修改!");
}
quoteData.setCommentManager(value);
} else if ("price".equals(field) || "buyPrice".equals(field)) {// 如果是价格/成交价格,组长和自己都能改
if (!flag && !username.equals(user.getUsername())) {
return Msg.fail("除店长外,不允许修改他人的数据!");
}
if ("price".equals(field)) {
quoteData.setPrice(Double.valueOf(value));
} else if ("buyPrice".equals(field)) {
quoteData.setBuyPrice(Double.valueOf(value));
}
} else {
// 只有自己的数据才能更改【客户旺旺】
if (!username.equals(user.getUsername())) {
return Msg.fail("只允许修改自己的数据!");
}
if ("wangwang".equals(field)) {
quoteData.setWangwang(value);
// 填写客户旺旺的时候,更改填写状态
quoteData.setIsFillIn("1");
} else if ("commentSelf".equals(field)) {
quoteData.setCommentSelf(value);
}
}
quoteData.setId(id);
quoteDataMapper.updateById(quoteData);
return Msg.success();
}
/**
* 获取报价过的产品种类
*
* @return
*/
public List<String> getProType() {
return quoteDataMapper.getProType();
}
/**
* 修改【是否当天成交】状态
*
* @param id
* @return
*/
public Msg changeIsBuyToDay(Integer id) {
try {
quoteDataMapper.changeIsBuyToDay(id);
return Msg.success();
} catch (Exception e) {
return Msg.fail();
}
}
/**
* 修改【是否成交】状态
*
* @param id
* @return
*/
public Msg changeIsBuy(Integer id) {
try {
quoteDataMapper.changeIsBuy(id);
return Msg.success();
} catch (Exception e) {
return Msg.fail();
}
}
/**
* 修改所属店铺以及选择状态
*
* @param id
* @return
*/
public Msg updateShopnameSelect(String shopname, Integer id) {
try {
quoteDataMapper.updateShopnameSelect(shopname, id);
return Msg.success();
} catch (Exception e) {
return Msg.fail();
}
}
/**
* 填写成交订单号
*
* @param orderNumber
* @return
*/
public Msg addOrderNumber(Integer id, String orderNumber) {
try {
quoteDataMapper.addOrderNumber(id, orderNumber);
return Msg.success();
} catch (Exception e) {
return Msg.fail();
}
}
/**
* 柱状图
*
* @param quoteData
* @return
*/
public Map<String, Object> echartZhuList(QuoteData quoteData,int isKefu) {
Map<String, Object> map = new HashMap<String, Object>();
List<String> sname = new ArrayList<String>();// 获取数据中有的店铺名称
List<Double> allData = new ArrayList<Double>();// 所有数据条数
List<Double> allNotBuy = new ArrayList<Double>();// 合计未成交
List<Double> allBuy = new ArrayList<Double>();// 合计已成交
List<Double> todayBuy = new ArrayList<Double>();// 合计当天已成交
List<Double> notTodaybuy = new ArrayList<Double>();// 合计跟单后已成交
List<Double> allBuyPrice = new ArrayList<Double>();// 所有成交金额
List<Double> todayBuyPrice = new ArrayList<Double>();// 当天成交金额
List<Double> notTodayBuyPrice = new ArrayList<Double>();// 跟单成交金额
List<Double> allBuyPercentage = new ArrayList<Double>();// 成交百分比
List<QuoteData> allDataList = new ArrayList<QuoteData>();// 所有数据
// 判断是否拥有超管身份标识
boolean isNoSuper = true;
boolean isNoAllShop = true;
long startTime, endTime = 0;
startTime = System.currentTimeMillis();
quoteData.setQuoteTimeEnd(new DateFormatUtils().formatEndTime(quoteData.getQuoteTimeBegin()));
quoteData.setQuoteTimeBegin(new DateFormatUtils().formatBeginTime(quoteData.getQuoteTimeBegin()));
// 如果是通过‘所属店铺’查询
// 只根据店铺查===>查出该店铺人员该店铺的报价数据
if(isKefu != 0) {//判断是否统计客服大单信息
List<String> realnameList = new ArrayList<String>();
// 根据店铺搜索该店铺有的人员
String roleSearch = "999";
if(quoteData.getRoleSearch() != "") {
roleSearch = roleSearch.concat(",").concat(quoteData.getRoleSearch());
}
realnameList = quoteDataMapper.getRealnames(roleSearch);
// 根据人员查询数据
for (String realname : realnameList) {
quoteData.setShopname(quoteData.getRoleSearch());
quoteData.setRealname(realname);
QuoteData echartList = quoteDataMapper.getKefuEchartList(quoteData);
// X坐标展示客服名字
sname.add(realname);
allDataList.add(echartList);
}
}else if (StringUtils.isNotEmpty(quoteData.getRoleSearch()) && StringUtils.isEmpty(quoteData.getRealname())
&& !"1".equals(quoteData.getByProTypeLabel())) {
// 店铺人员集合
List<String> realnameList = new ArrayList<String>();
// 根据店铺搜索该店铺有的人员
realnameList = quoteDataMapper.getRealnames(quoteData.getRoleSearch());
// 根据人员查询数据
for (String realname : realnameList) {
quoteData.setShopname(quoteData.getRoleSearch());
quoteData.setRealname(realname);
QuoteData echartList = quoteDataMapper.getEchartList(quoteData);
// X坐标展示客服名字
sname.add(realname);
allDataList.add(echartList);
}
} else if ("1".equals(quoteData.getByProTypeLabel()) && StringUtils.isEmpty(quoteData.getRoleSearch())
&& StringUtils.isEmpty(quoteData.getRealname())) { // 只根据产品查==>查出报价的所有产品
// 产品
List<String> productList = new ArrayList<String>();
// 报价中有的产品
productList = this.getProType();
// 根据人员查询数据
for (String product : productList) {
quoteData.setProTypeLabel(product);
QuoteData echartList = quoteDataMapper.getEchartList(quoteData);
// X坐标展示产品
sname.add(product);
allDataList.add(echartList);
}
} else if (StringUtils.isNotEmpty(quoteData.getRoleSearch())
&& StringUtils.isNotEmpty(quoteData.getRealname())) { // 根据店铺及人员查==>查询人员该店铺的产品报价
// 产品
List<String> productList = new ArrayList<String>();
// 报价中有的产品
productList = this.getProType();
// 根据人员查询数据
for (String product : productList) {
quoteData.setProTypeLabel(product);
quoteData.setShopname(quoteData.getRoleSearch());
quoteData.setRealname(quoteData.getRealname());
QuoteData echartList = quoteDataMapper.getEchartList(quoteData);
// X坐标展示产品
sname.add(product);
allDataList.add(echartList);
}
} else if (StringUtils.isNotEmpty(quoteData.getRoleSearch()) && "1".equals(quoteData.getByProTypeLabel())
&& StringUtils.isEmpty(quoteData.getRealname())) { // 查询店铺的产品
// 产品
List<String> productList = new ArrayList<String>();
// 报价中有的产品
productList = this.getProType();
// 根据人员查询数据
for (String product : productList) {
quoteData.setShopname(quoteData.getRoleSearch());
quoteData.setProTypeLabel(product);
QuoteData echartList = quoteDataMapper.getEchartList(quoteData);
// X坐标展示产品
sname.add(product);
allDataList.add(echartList);
}
} else if (StringUtils.isNotEmpty(quoteData.getRealname()) && StringUtils.isEmpty(quoteData.getRoleSearch())
&& !"1".equals(quoteData.getByProTypeLabel())) { // 只根据名字查==>查该人员所有店铺的产品报价
// 产品
List<String> productList = new ArrayList<String>();
// 报价中有的产品
productList = this.getProType();
// 根据人员查询数据
for (String product : productList) {
quoteData.setProTypeLabel(product);
quoteData.setRealname(quoteData.getRealname());
QuoteData echartList = quoteDataMapper.getEchartList(quoteData);
sname.add(product);
allDataList.add(echartList);
}
} else {
// 用户所拥有的角色
SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal();
String[] roleArr = user.getRole().split(",");
for (int i = 0; i < roleArr.length; i++) {
// 有【超级管理员、全部店铺】身份,状态改为false
if ("1".equals(roleArr[i])) {
isNoSuper = false;
break;
}
if ("777".equals(roleArr[i])) {
isNoAllShop = false;
break;
}
}
// 报价数据中拥有的店铺
// List<String> shopName = quoteDataMapper.getShopName(quoteData);
List<String> shopName = new ArrayList<String>();
// 如果没有【超管、所有店铺】,直接把自己的拥有的店铺拿去查询数据,同时排除特殊角色
if (isNoSuper && isNoAllShop) {
// 获取【不允许被创建】的特殊角色id
List<Integer> specialRoleIdList = roleMapper.getRoleIdsWhenIsNotRegist();
// shopName.clear();
for (String shopname : roleArr) {
// 是否拥有特殊角色标识
boolean specialFlag = false;
for (int j = 0; j < specialRoleIdList.size(); j++) {
// 如果用户拥有的角色属于不可被创建的特殊角色,就排除,不加到图形中统计
if (specialRoleIdList.get(j).toString().equals(shopname)) {
specialFlag = true;
break;
}
}
// 不是特殊角色,就加到列表中
if (!specialFlag) {
shopName.add(shopname);
}
}
} else {// 有【超管】或者有【所有店铺】
// 报价数据中拥有的店铺
shopName = quoteDataMapper.getShopName(quoteData);
// 如果有【超管】,但是没有【所有店铺】,把非公司店铺去除掉
if (!isNoSuper && isNoAllShop) {
// 别的公司的店铺ID
List<Integer> otherRoleIdList = roleMapper.getRoleIdsWhenIsNotLingTao();
for (int i = 0; i < shopName.size(); i++) {
// 其他公司店铺标识
boolean otherFlag = false;
for (int j = 0; j < otherRoleIdList.size(); j++) {
// 如果报价中的店铺是别的公司的店铺,就排除,不加到图形中统计
if (otherRoleIdList.get(j).toString().equals(shopName.get(i).toString())) {
otherFlag = true;
break;
}
}
// 是别的公司的店铺,就移除
if (otherFlag) {
shopName.remove(i);
i--;
}
}
}
}
// 根据店铺查询数据
for (String shopname : shopName) {
quoteData.setShopname(shopname);
QuoteData echartList = quoteDataMapper.getEchartList(quoteData);
sname.add(shopname);
allDataList.add(echartList);
}
}
// 排序
Collections.sort(allDataList, new Comparator<QuoteData>() {
@Override
public int compare(QuoteData o1, QuoteData o2) {
return (int) (o2.getAllData() - o1.getAllData());
}
});
for (QuoteData data : allDataList) {
allData.add(data.getAllData());
allBuy.add(data.getAllBuy());
allNotBuy.add(data.getAllNotBuy());
todayBuy.add(data.getTodayBuy());
notTodaybuy.add(data.getNotTodayBuy());
allBuyPrice.add(data.getAllBuyPrice());
todayBuyPrice.add(data.getTodayBuyPrice());
notTodayBuyPrice.add(data.getNotTodayBuyPrice());
allBuyPercentage.add(data.getAllBuyPercentage());
}
map.put("sname", sname);
map.put("one", allData);
map.put("two", allBuy);
map.put("three", allNotBuy);
map.put("four", todayBuy);
map.put("five", notTodaybuy);
map.put("six", allBuyPrice);
map.put("seven", todayBuyPrice);
map.put("eight", notTodayBuyPrice);
map.put("nine", allBuyPercentage);
endTime = System.currentTimeMillis();
System.out.println("getShopName使用的时间:" + (endTime - startTime));
return map;
}
@SuppressWarnings("resource")
public void excel(HttpServletResponse response, QuoteData quoteData) throws Exception {
response.setCharacterEncoding("UTF-8");
List<QuoteData> quoteDatasList = new ArrayList<QuoteData>();
List<SysRole> allRoleNameList = sysRolemapper.getAllRoleName(null);
// 需要导出的数据
quoteDatasList = quoteDatas(quoteData);
// 创建excel文件
XSSFWorkbook wb = new XSSFWorkbook();
// 创建sheet页
XSSFSheet sheet = wb.createSheet("总表");
// 创建excel文件
// HSSFWorkbook wb = new HSSFWorkbook();
// 创建sheet页
// HSSFSheet sheet = wb.createSheet("总表");
String filename = "客服操作数据";
String shopname = "";
String isToDayBuy = "未成交";
String isBuy = "未成交";
// 创建标题行
XSSFRow titleRow = sheet.createRow(0);
// 创建标题行
// HSSFRow titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("操作人");
titleRow.createCell(1).setCellValue("数据所属店铺");
titleRow.createCell(2).setCellValue("客户旺旺");
titleRow.createCell(3).setCellValue("操作");
titleRow.createCell(4).setCellValue("金额");
titleRow.createCell(5).setCellValue("当天成交");
titleRow.createCell(6).setCellValue("未成交原因");
titleRow.createCell(7).setCellValue("跟单后成交");
titleRow.createCell(8).setCellValue("成交金额");
titleRow.createCell(9).setCellValue("店长追踪情况汇报");
titleRow.createCell(10).setCellValue("操作时间");
// 遍历将数据放到excel列中
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (QuoteData quoteDatas : quoteDatasList) {
shopname = "";
isToDayBuy = "未成交";
isBuy = "未成交";
for (SysRole sysRole : allRoleNameList) {
if (String.valueOf(sysRole.getRoleId()).equals(quoteDatas.getShopname())) {
shopname = sysRole.getRoleName();
break;
}
}
if (quoteDatas.getIsBuyToDay().equals("1")) {
isToDayBuy = "已成交";
}
if (quoteDatas.getIsBuy().equals("1")) {
isBuy = "已成交";
}
XSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
// HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
dataRow.createCell(0).setCellValue(quoteDatas.getRealname());
dataRow.createCell(1).setCellValue(shopname);
dataRow.createCell(2).setCellValue(quoteDatas.getWangwang());
dataRow.createCell(3).setCellValue(quoteDatas.getRemark());
dataRow.createCell(4).setCellValue(quoteDatas.getPrice());
dataRow.createCell(5).setCellValue(isToDayBuy);
dataRow.createCell(6).setCellValue(quoteDatas.getCommentSelf());
dataRow.createCell(7).setCellValue(isBuy);
dataRow.createCell(8).setCellValue(quoteDatas.getBuyPrice() != null ? quoteDatas.getBuyPrice() : 0);
dataRow.createCell(9).setCellValue(quoteDatas.getCommentManager());
dataRow.createCell(10).setCellValue(formatter.format(quoteDatas.getQuoteTime()));
}
// 设置下载时客户端Excel的名称
response.setContentType("application/octet-stream;charset=utf-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(filename.getBytes(), "iso-8859-1") + ".xls");// + ".xls"
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}
}