pom.xml
@@ -27,6 +27,32 @@ <dependencies> <!--excel读取 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.8</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.8</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.8</version> </dependency> <!-- 图片压缩--> <dependency> <groupId>net.coobird</groupId> src/main/java/cc/mrbird/febs/dapp/controller/AdminMallGoodsController.java
@@ -8,11 +8,21 @@ import cc.mrbird.febs.common.utils.OssUtils; import cc.mrbird.febs.dapp.dto.*; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum; import cc.mrbird.febs.dapp.mapper.DappMemberDao; import cc.mrbird.febs.dapp.mapper.MallAddressInfoMapper; import cc.mrbird.febs.dapp.mapper.MallOrderInfoMapper; import cc.mrbird.febs.dapp.service.IAdminMallGoodsService; import cc.mrbird.febs.dapp.service.IMallNewsInfoService; import cc.mrbird.febs.dapp.utils.ExcelSheetPO; import cc.mrbird.febs.dapp.utils.ExcelUtil; import cc.mrbird.febs.dapp.utils.ExcelVersion; import cc.mrbird.febs.dapp.utils.ResponseHeadUtil; import cc.mrbird.febs.dapp.vo.AdminMallGoodsCategoryTreeVo; import cc.mrbird.febs.dapp.vo.MallOrderItemVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -23,14 +33,16 @@ import sun.misc.BASE64Encoder; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.io.OutputStream; import java.net.URLEncoder; import java.util.*; @Slf4j @Validated @@ -40,6 +52,10 @@ public class AdminMallGoodsController extends BaseController { private final IAdminMallGoodsService adminMallGoodsService; private final MallOrderInfoMapper mallOrderInfoMapper; private final MallAddressInfoMapper mallAddressInfoMapper; private final DappMemberDao dappMemberDao; /** * 商品分类-选择 @@ -389,6 +405,151 @@ return new FebsResponse().success(); } @GetMapping("exportOrderList") @ControllerEndpoint(operation = "订单列表", exceptionMessage = "导出失败") public FebsResponse exportOrderList(MallOrderInfo mallOrderInfo, HttpServletResponse response) throws IOException { List<ExcelSheetPO> res = new ArrayList<>(); ExcelSheetPO orderSheet = new ExcelSheetPO(); String title = "订单列表"; orderSheet.setSheetName(title); orderSheet.setTitle(title); String[] header = {"订单编号", "收货姓名", "收货电话", "收货地址", "提货方式","订单状态","发货状态","下单时间", "商品详情", "金额", "物流单号", "物流公司", "物流公司码"}; orderSheet.setHeaders(header); QueryRequest request = new QueryRequest(); request.setPageNum(1); request.setPageSize(9999); List<MallOrderInfo> dataList = new ArrayList<>(); String orderIds = mallOrderInfo.getOrderIds(); List<String> ids = StrUtil.splitTrim(orderIds, ","); for(String id : ids){ long orderId = Long.parseLong(id); MallOrderInfo mallOrderInfo1 = mallOrderInfoMapper.selectById(orderId); if(ObjectUtil.isNotEmpty(mallOrderInfo1) && MallOrderInfo.DELIVER_STATUS_WAIT == mallOrderInfo1.getDeliverState() && 1 == mallOrderInfo1.getDeliverType()){ dataList.add(mallOrderInfo1); } } List<List<Object>> list = new ArrayList<>(); if (dataList.size() > 0) { for (MallOrderInfo item : dataList) { List<Object> temp = new ArrayList<>(); temp.add(item.getOrderNo()); MallAddressInfo mallAddressInfo = mallAddressInfoMapper.selectById(item.getAddressId()); // temp.add(item.getAmount()); // temp.add(DateUtil.format(item.getOrderTime(), "yyyy-MM-dd HH:mm:ss")); // temp.add("快递配送"); temp.add(mallAddressInfo.getName()); temp.add(mallAddressInfo.getPhone()); temp.add(mallAddressInfo.getArea()+mallAddressInfo.getAddress()); temp.add("快递寄送"); temp.add("已支付"); temp.add("待发货"); temp.add(item.getPayTime()); List<MallOrderItemVo> mallOrderItemVoList = dappMemberDao.selectMallOrderItemVoByOrderId(item.getId()); if (CollUtil.isNotEmpty(mallOrderItemVoList)) { StringBuilder sb = new StringBuilder(); for (MallOrderItemVo itemItem : mallOrderItemVoList) { if (StrUtil.isNotBlank(sb)) { sb.append(";" + itemItem.getGoodsName()+"-"+itemItem.getPrice() + "*" + itemItem.getCnt()); } else { sb.append(itemItem.getGoodsName()+"-"+itemItem.getPrice() + "*" + itemItem.getCnt()); } } temp.add(sb.toString()); } else { temp.add(""); } temp.add(item.getAmount()); list.add(temp); } } orderSheet.setDataList(list); res.add(orderSheet); response = ResponseHeadUtil.setExcelHead(response); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title + DateUtil.format(new Date(), "yyyyMMDDHHmmss") + ".xlsx".trim(), "UTF-8")); OutputStream os = response.getOutputStream(); ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); return null; } @PostMapping(value = "/importDeliver") @ControllerEndpoint(operation = "导入发货", exceptionMessage = "导入失败") public FebsResponse importDeliver(@RequestBody MultipartFile file) throws IOException { if (file.isEmpty()) { return new FebsResponse().fail(); } String fileName = file.getOriginalFilename(); String dirPath = "/home/javaweb/webresource/"; File saveFile = new File(new File(dirPath).getAbsolutePath() + File.separator + fileName); if (!saveFile.exists()) { if (!saveFile.getParentFile().exists()) { saveFile.getParentFile().mkdirs(); } } file.transferTo(saveFile); List<ExcelSheetPO> data = ExcelUtil.readExcel(saveFile, null, null); if (CollUtil.isEmpty(data)) { return new FebsResponse().fail(); } List<List<Object>> dataList = data.get(0).getDataList(); int expressNoIndex = -1; int expressComIndex = -1; int expressCodeIndex = -1; for (int i = 1; i < dataList.size(); i++) { List<Object> objects = dataList.get(i); String expressNo = ""; String expressCom = ""; for (int j = 0; j < objects.size(); j++) { Object obj = objects.get(j); if ("物流单号".equals(obj)) { expressNoIndex = j; } if ("物流公司".equals(obj)) { expressComIndex = j; } if ("物流公司码".equals(obj)) { expressCodeIndex = j; } if (j == expressNoIndex) { expressNo = (String) objects.get(j); } if (j == expressComIndex) { expressCom = (String) objects.get(j); } } if (StrUtil.isNotBlank(expressNo) && StrUtil.isNotBlank(expressCom)) { String orderNo = (String) objects.get(0); DeliverGoodsDto deliverGoods = new DeliverGoodsDto(); deliverGoods.setOrderNo(orderNo); deliverGoods.setExpressCom(expressCom); deliverGoods.setExpressNo(expressNo); adminMallGoodsService.deliverGoodsByOrderNo(deliverGoods); } } return new FebsResponse().success(); } } src/main/java/cc/mrbird/febs/dapp/entity/MallOrderInfo.java
@@ -72,4 +72,7 @@ @TableField(exist = false) private String goodsName; @TableField(exist = false) private String orderIds; } src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
@@ -55,6 +55,8 @@ BigDecimal selectSumAmountByType(@Param("type")int code); BigDecimal selectSumAmountByTypeAndDate(@Param("type")int code, @Param("dateStr") DateTime now); IPage<AdminMallMoneyFlowVo> selectOrderMoneyFlowInPage(Page<AdminMallMoneyFlowVo> page, @Param("record")MallOrderInfo mallOrder); List<DappFundFlowEntity> selectListByMemberIdAndTypeAndDate(@Param("memberId")Long memberId, @Param("type")int code, @Param("dateStr") DateTime now); src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -5,6 +5,7 @@ import cc.mrbird.febs.dapp.dto.PackageRecordDto; import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.entity.MallAddressInfo; import cc.mrbird.febs.dapp.entity.MallOrderInfo; import cc.mrbird.febs.dapp.vo.*; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -128,4 +129,6 @@ List<PackageRecordVo> selectPackageRecordMonthInPage(@Param("date") Date date); List<PackageRecordVo> selectPackageRecordWeekInPage(@Param("date") Date date); MallOrderInfo selectOrderByOrderNo(@Param("orderNo") String orderNo); } src/main/java/cc/mrbird/febs/dapp/service/IAdminMallGoodsService.java
@@ -69,4 +69,6 @@ FebsResponse deliverGoods(DeliverGoodsDto deliverGoodsDto); FebsResponse delOrder(Long id); void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoods); } src/main/java/cc/mrbird/febs/dapp/service/impl/AdminMallGoodsService.java
@@ -472,4 +472,33 @@ return new FebsResponse().success(); } @Override public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoods) { MallOrderInfo mallOrderInfo = dappMemberDao.selectOrderByOrderNo(deliverGoods.getOrderNo()); if(ObjectUtil.isEmpty(mallOrderInfo)){ return; } Integer status = mallOrderInfo.getStatus(); if(2 != status){ return; } Integer deliverState = mallOrderInfo.getDeliverState(); if(1 != deliverState){ return; } String expressNo = deliverGoods.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return; } String expressCom = deliverGoods.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return; } mallOrderInfo.setDeliverState(2); mallOrderInfo.setDeliverName(expressCom); mallOrderInfo.setDeliverCode(expressNo); mallOrderInfoMapper.updateById(mallOrderInfo); } } src/main/java/cc/mrbird/febs/dapp/utils/ExcelSheetPO.java
New file @@ -0,0 +1,62 @@ package cc.mrbird.febs.dapp.utils; import java.util.List; public class ExcelSheetPO { /** * sheet的名称 */ private String sheetName; /** * 表格标题 */ private String title; /** * 头部标题集合 */ private String[] headers; /** * 数据集合 */ private List<List<Object>> dataList; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String[] getHeaders() { return headers; } public void setHeaders(String[] headers) { this.headers = headers; } public List<List<Object>> getDataList() { return dataList; } public void setDataList(List<List<Object>> dataList) { this.dataList = dataList; } public String getSheetName() { return sheetName; } public void setSheetName(String sheetName) { this.sheetName = sheetName; } } src/main/java/cc/mrbird/febs/dapp/utils/ExcelUtil.java
New file @@ -0,0 +1,319 @@ package cc.mrbird.febs.dapp.utils; import cn.hutool.core.util.ArrayUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.WorkbookUtil; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class ExcelUtil { /** * 标题样式 */ private final static String STYLE_HEADER = "header"; /** * 表头样式 */ private final static String STYLE_TITLE = "title"; /** * 数据样式 */ private final static String STYLE_DATA = "data"; private static String getFileExtName(File file) { String fileName = file.getName(); String prefix = fileName.substring(fileName.lastIndexOf(".") ); return prefix; } /** * 读取excel文件里面的内容 支持日期,数字,字符,函数公式,布尔类型 * * @param file * @param rowCount * @param columnCount * @return * @throws FileNotFoundException * @throws IOException * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2017年12月20日 */ public static List<ExcelSheetPO> readExcel(File file, Integer rowCount, Integer columnCount) throws FileNotFoundException, IOException { // 根据后缀名称判断excel的版本 String extName = getFileExtName(file); Workbook wb = null; if (ExcelVersion.V2003.getSuffix().equals(extName)) { wb = new HSSFWorkbook(new FileInputStream(file)); } else if (ExcelVersion.V2007.getSuffix().equals(extName)) { wb = new XSSFWorkbook(new FileInputStream(file)); } else { // 无效后缀名称,这里之能保证excel的后缀名称,不能保证文件类型正确,不过没关系,在创建Workbook的时候会校验文件格式 throw new IllegalArgumentException("Invalid excel version"); } // 开始读取数据 List<ExcelSheetPO> sheetPOs = new ArrayList<>(); // 解析sheet for (int i = 0; i < wb.getNumberOfSheets(); i++) { Sheet sheet = wb.getSheetAt(i); List<List<Object>> dataList = new ArrayList<>(); ExcelSheetPO sheetPO = new ExcelSheetPO(); sheetPO.setSheetName(sheet.getSheetName()); sheetPO.setDataList(dataList); int readRowCount = 0; if (rowCount == null || rowCount > sheet.getPhysicalNumberOfRows()) { readRowCount = sheet.getPhysicalNumberOfRows(); } else { readRowCount = rowCount; } // 解析sheet 的行 for (int j = sheet.getFirstRowNum(); j < readRowCount; j++) { Row row = sheet.getRow(j); if (row == null) { continue; } if (row.getFirstCellNum() < 0) { continue; } int readColumnCount = 0; if (columnCount == null || columnCount > row.getLastCellNum()) { readColumnCount = (int) row.getLastCellNum(); } else { readColumnCount = columnCount; } List<Object> rowValue = new LinkedList<Object>(); // 解析sheet 的列 for (int k = 0; k < readColumnCount; k++) { Cell cell = row.getCell(k); rowValue.add(getCellValue(wb, cell)); } dataList.add(rowValue); } sheetPOs.add(sheetPO); } return sheetPOs; } private static Object getCellValue(Workbook wb, Cell cell) { Object columnValue = null; if (cell != null) { // 格式化 number DecimalFormat df = new DecimalFormat("0"); // String // 字符 // 格式化日期字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化数字 DecimalFormat nf = new DecimalFormat("0.00"); switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: columnValue = cell.getStringCellValue(); break; case Cell.CELL_TYPE_NUMERIC: if ("@".equals(cell.getCellStyle().getDataFormatString())) { columnValue = df.format(cell.getNumericCellValue()); } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { columnValue = nf.format(cell.getNumericCellValue()); } else { columnValue = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); } break; case Cell.CELL_TYPE_BOOLEAN: columnValue = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_BLANK: columnValue = ""; break; case Cell.CELL_TYPE_FORMULA: // 格式单元格 FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); evaluator.evaluateFormulaCell(cell); CellValue cellValue = evaluator.evaluate(cell); columnValue = cellValue.getNumberValue(); break; default: columnValue = cell.toString(); } } return columnValue; } /** * 在硬盘上写入excel文件 * * @param version * @param excelSheets * @param filePath * @throws IOException * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2017年12月20日 */ public static void createWorkbookAtDisk(ExcelVersion version, List<ExcelSheetPO> excelSheets, String filePath) throws IOException { FileOutputStream fileOut = new FileOutputStream(filePath); createWorkbookAtOutStream(version, excelSheets, fileOut, true); } /** * 把excel表格写入输出流中 * * @param version * @param excelSheets * @param outStream * @param closeStream 是否关闭输出流 * @throws IOException * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2017年12月20日 */ public static void createWorkbookAtOutStream(ExcelVersion version, List<ExcelSheetPO> excelSheets, OutputStream outStream, boolean closeStream) throws IOException { if (CollectionUtils.isNotEmpty(excelSheets)) { Workbook wb = createWorkBook(version, excelSheets); wb.write(outStream); if (closeStream) { outStream.close(); } } } private static Workbook createWorkBook(ExcelVersion version, List<ExcelSheetPO> excelSheets) { Workbook wb = getWorkbookInstance(version); for (int i = 0; i < excelSheets.size(); i++) { ExcelSheetPO excelSheetPO = excelSheets.get(i); if (excelSheetPO.getSheetName() == null) { excelSheetPO.setSheetName("sheet" + i); } // 过滤特殊字符 Sheet tempSheet = wb.createSheet(WorkbookUtil.createSafeSheetName(excelSheetPO.getSheetName())); buildSheetData(wb, tempSheet, excelSheetPO, version); } return wb; } private static void buildSheetData(Workbook wb, Sheet sheet, ExcelSheetPO excelSheetPO, ExcelVersion version) { sheet.setDefaultRowHeight((short) 400); // sheet.setDefaultColumnWidth((short) 10); sheet.autoSizeColumn(1); createTitle(sheet, excelSheetPO, wb, version); createHeader(sheet, excelSheetPO, wb, version); createBody(sheet, excelSheetPO, wb, version); } private static void createBody(Sheet sheet, ExcelSheetPO excelSheetPO, Workbook wb, ExcelVersion version) { List<List<Object>> dataList = excelSheetPO.getDataList(); for (int i = 0; i < dataList.size() && i < version.getMaxRow(); i++) { List<Object> values = dataList.get(i); Row row = sheet.createRow(2 + i); for (int j = 0; j < values.size() && j < version.getMaxColumn(); j++) { Cell cell = row.createCell(j); Object value = values.get(j); if (value == null) { value = ""; } cell.setCellValue(String.valueOf(value)); } } } private static void createHeader(Sheet sheet, ExcelSheetPO excelSheetPO, Workbook wb, ExcelVersion version) { String[] headers = excelSheetPO.getHeaders(); Row row = sheet.createRow(1); for (int i = 0; i < headers.length && i < version.getMaxColumn(); i++) { Cell cellHeader = row.createCell(i); cellHeader.setCellStyle(getStyle(STYLE_HEADER, wb)); cellHeader.setCellValue(headers[i]); // 调整每一列宽度 sheet.autoSizeColumn((short) i); // 解决自动设置列宽中文失效的问题 sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 16 / 10); } } private static void createTitle(Sheet sheet, ExcelSheetPO excelSheetPO, Workbook wb, ExcelVersion version) { Row titleRow = sheet.createRow(0); Cell titleCel = titleRow.createCell(0); titleCel.setCellValue(excelSheetPO.getTitle()); titleCel.setCellStyle(getStyle(STYLE_TITLE, wb)); // 限制最大列数 if (ArrayUtil.isNotEmpty(excelSheetPO.getHeaders())) { int column = excelSheetPO.getHeaders().length > version.getMaxColumn() ? version.getMaxColumn() : excelSheetPO.getHeaders().length; sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, column - 1)); } } private static CellStyle getStyle(String type, Workbook wb) { HashMap<String, CellStyle> cellStyleMap = new HashMap<>(); if (cellStyleMap.containsKey(type)) { return cellStyleMap.get(type); } // 生成一个样式 CellStyle style = wb.createCellStyle(); // style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // style.setBorderRight(HSSFCellStyle.BORDER_THIN); // style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setWrapText(true); if (STYLE_HEADER == type) { style.setAlignment(HSSFCellStyle.ALIGN_CENTER); Font font = wb.createFont(); font.setFontHeightInPoints((short) 16); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); } else if (STYLE_TITLE == type) { style.setAlignment(HSSFCellStyle.ALIGN_CENTER); Font font = wb.createFont(); font.setFontHeightInPoints((short) 18); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); } else if (STYLE_DATA == type) { style.setAlignment(HSSFCellStyle.ALIGN_LEFT); Font font = wb.createFont(); font.setFontHeightInPoints((short) 12); style.setFont(font); } cellStyleMap.put(type, style); return style; } private static Workbook getWorkbookInstance(ExcelVersion version) { switch (version) { case V2003: return new HSSFWorkbook(); case V2007: return new XSSFWorkbook(); case V_BIGDATA: return new SXSSFWorkbook(2000); default: throw new IllegalArgumentException("param is not defind"); } } } src/main/java/cc/mrbird/febs/dapp/utils/ExcelVersion.java
New file @@ -0,0 +1,39 @@ package cc.mrbird.febs.dapp.utils; public enum ExcelVersion { /** * 虽然V2007版本支持最大支持1048575 * 16383 , * V2003版支持65535*255 * 但是在实际应用中如果使用如此庞大的对象集合会导致内存溢出, * 因此这里限制最大为10000*100,如果还要加大建议先通过单元测试进行性能测试。 * 1000*100 全部导出预计时间为27s左右 */ V2003(".xls", 65535, 100), V2007(".xlsx", 65535, 100), V_BIGDATA(".xlsx", 5048576, 16384); private String suffix; private int maxRow; private int maxColumn; ExcelVersion(String suffix, int maxRow, int maxColumn) { this.suffix = suffix; this.maxRow = maxRow; this.maxColumn = maxColumn; } public String getSuffix() { return this.suffix; } public int getMaxRow() { return maxRow; } public int getMaxColumn() { return maxColumn; } } src/main/java/cc/mrbird/febs/dapp/utils/ResponseHeadUtil.java
New file @@ -0,0 +1,17 @@ package cc.mrbird.febs.dapp.utils; import javax.servlet.http.HttpServletResponse; public class ResponseHeadUtil { /** * 设置文件头部 * @param response */ public static HttpServletResponse setExcelHead(HttpServletResponse response) { response.setCharacterEncoding("UTF-8"); response.setHeader("content-type", "application/octet-stream;charset=UTF-8"); response.setContentType("application/octet-stream;charset=UTF-8"); return response; } } src/main/java/cc/mrbird/febs/system/controller/LoginController.java
@@ -6,6 +6,7 @@ import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.service.ValidateCodeService; import cc.mrbird.febs.common.utils.Md5Util; import cc.mrbird.febs.dapp.mapper.DappFundFlowDao; import cc.mrbird.febs.dapp.mapper.DappMemberDao; import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao; import cc.mrbird.febs.dapp.mapper.MallOrderInfoMapper; @@ -46,6 +47,7 @@ private final ILoginLogService loginLogService; private final DappMemberDao dappMemberDao; private final DappWalletCoinDao dappWalletCoinDao; private final DappFundFlowDao dappFundFlowDao; @PostMapping("login") @Limit(key = "login", period = 60, count = 10, name = "登录接口", prefix = "limit") @@ -119,6 +121,18 @@ data.put("withdrawToday", dappWalletCoinDao.selectWithdrawAmountByType("D", new Date())); data.put("withdrawNot", dappWalletCoinDao.selectTotal()); data.put("releaseAmountTotal", dappFundFlowDao.selectSumAmountByType(27)); data.put("releaseAmountToday", dappFundFlowDao.selectSumAmountByTypeAndDate(27, DateUtil.date())); data.put("releaseScoreTotal", dappFundFlowDao.selectSumAmountByType(28)); data.put("releaseScoreToday", dappFundFlowDao.selectSumAmountByTypeAndDate(28, DateUtil.date())); data.put("releasePackageTotal", dappFundFlowDao.selectSumAmountByType(29)); data.put("releasePackageToday", dappFundFlowDao.selectSumAmountByTypeAndDate(29, DateUtil.date())); data.put("releasePackageTotal", dappFundFlowDao.selectSumAmountByType(42)); data.put("releasePackageToday", dappFundFlowDao.selectSumAmountByTypeAndDate(42, DateUtil.date())); return new FebsResponse().success().data(data); } src/main/resources/mapper/dapp/DappFundFlowDao.xml
@@ -170,6 +170,12 @@ where type = #{type} </select> <select id="selectSumAmountByTypeAndDate" resultType="java.math.BigDecimal"> select ifnull(sum(amount), 0) from dapp_fund_flow where type = #{type} and date_format(create_time, '%Y-%m-%d') = date_format(#{dateStr}, '%Y-%m-%d') </select> <select id="selectOrderMoneyFlowInPage" resultType="cc.mrbird.febs.dapp.vo.AdminMallMoneyFlowVo"> select a.create_time createTime, src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -490,4 +490,11 @@ order by totalAmount desc LIMIT 100; </select> <select id="selectOrderByOrderNo" resultType="cc.mrbird.febs.dapp.entity.MallOrderInfo"> select a.* from mall_order_info a where a.order_no = #{orderNo} limit 1 </select> </mapper> src/main/resources/templates/febs/views/goods/orderList.html
@@ -100,6 +100,12 @@ </div> </div> </div> <script type="text/html" id="tableToolBarOrder"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverTwo">导出未发货订单(快递)</button> <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" id="importDeliver" lay-event="importDeliver">导入发货</button> </div> </script> <script type="text/html" id="user-option"> <span shiro:lacksPermission="user:view,user:update,user:delete"> <span class="layui-badge-dot febs-bg-orange"></span> 无权限 @@ -142,6 +148,44 @@ // 表格初始化 initTable(); table.on('toolbar(orderTable)', function(obj){ var event = obj.event; var id = obj.config.id; var checkStatus = table.checkStatus(id); if (event == 'exportDeliverTwo') { var data = checkStatus.data; let ids = ""; for(let i = 0;i < data.length;i++){ if(data[i].status != 2){ febs.alert.warn('请选择已支付的订单'); return; }else if(data[i].deliverState != 1){ febs.alert.warn('请选择待发货的订单'); return; }else{ ids = ids + data[i].id+","; } } console.log(ids); if(ids == null || ids == ""){ febs.alert.warn('请选择订单'); return; } window.location.href = ctx + "admin/goods/exportOrderList?orderType=1&status=2&deliveryType=2&orderIds="+ids; } }); upload.render({ elem: '#importDeliver' ,url: 'admin/goods/importDeliver' //此处配置你自己的上传接口即可 ,accept: 'file' //普通文件 ,done: function(res){ console.log("123"); febs.alert.success('操作成功'); $query.click(); } }); // 初始化表格操作栏各个按钮功能 table.on('tool(orderTable)', function (obj) { @@ -196,9 +240,10 @@ id: 'orderTable', url: ctx + 'admin/goods/orderList', // defaultToolbar: [], toolbar: '#tableToolBar', toolbar: '#tableToolBarOrder', totalRow: true ,// 开启合计行 cols: [[ {type: 'checkbox', fixed: 'left'}, {field: 'orderNo', title: '订单编号', minWidth: 120,align:'left', totalRowText: '合计:'}, {field: 'address', title: '购买人', minWidth: 120,align:'left'}, {field: 'goodsName', title: '商品信息', minWidth: 200,align:'left'}, src/main/resources/templates/febs/views/index.html
@@ -261,6 +261,102 @@ </div> </div> <div class="layui-card-body layui-anim layui-anim-fadein"> <div class="layui-row"> <div class="m-title">余额系统拨付</div> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">总量</p> <p class="num"><span id="releaseAmountTotal"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日拨付</p> <p class="num"><span id="releaseAmountToday"></span></p> </div> </div> </div> </div> </div> </div> <div class="layui-card-body layui-anim layui-anim-fadein"> <div class="layui-row"> <div class="m-title">积分系统拨付</div> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">总量</p> <p class="num"><span id="releaseScoreTotal"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日拨付</p> <p class="num"><span id="releaseScoreToday"></span></p> </div> </div> </div> </div> </div> </div> <div class="layui-card-body layui-anim layui-anim-fadein"> <div class="layui-row"> <div class="m-title">资产包系统拨付</div> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">总量</p> <p class="num"><span id="releasePackageTotal"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日拨付</p> <p class="num"><span id="releasePackageToday"></span></p> </div> </div> </div> </div> </div> </div> <div class="layui-card-body layui-anim layui-anim-fadein"> <div class="layui-row"> <div class="m-title">花吖赠送</div> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">赠送总数</p> <p class="num"><span id="sendPackageTotal"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日赠送</p> <p class="num"><span id="sendPackageToday"></span></p> </div> </div> </div> </div> </div> </div> </div> </div> </div> @@ -310,6 +406,18 @@ .find('#withdrawToday').text(data.withdrawToday).end() .find('#withdrawNot').text(data.withdrawNot).end() .find('#releaseAmountTotal').text(data.releaseAmountTotal).end() .find('#releaseAmountToday').text(data.releaseAmountToday).end() .find('#releaseScoreTotal').text(data.releaseScoreTotal).end() .find('#releaseScoreToday').text(data.releaseScoreToday).end() .find('#releasePackageTotal').text(data.releasePackageTotal).end() .find('#releasePackageToday').text(data.releasePackageToday).end() .find('#sendPackageTotal').text(data.releasePackageTotal).end() .find('#sendPackageToday').text(data.releasePackageToday).end() .find('#today-visit-count').text(data.todayVisitCount).end() .find('#total-visit-count').text(data.totalVisitCount).end() .find('#user-dept').text(currentUser.deptName ? currentUser.deptName : '暂无所属部门').end()