From 6990e23b036d479f6b5255ad8c7fcac66bbd2575 Mon Sep 17 00:00:00 2001 From: lzh Date: Wed, 11 Jan 2023 02:06:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E3=80=81=E5=9C=A8=E9=80=94?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gdinstorage/GdInstorageCountMapper.java | 23 ++ .../gdinstorage/GdInstorageCountService.java | 82 +++++- .../biz/gdinstorage/GdInstorageJmdMapper.java | 4 + .../gdinstorage/GdInstorageJmdService.java | 4 + .../biz/gdinstorage/GdInstorageYcMapper.java | 6 + .../biz/gdinstorage/GdInstorageYcService.java | 4 + .../biz/gdinventory/GdInventoryOkMapper.java | 3 + .../biz/gdinventory/GdInventoryOkService.java | 14 + .../biz/gdinventory/GdInventoryService.java | 2 +- .../portal/biz/gdsales/GdSalesMapper.java | 32 +++ .../portal/biz/gdsales/GdSalesReportday.java | 114 ++++---- .../biz/gdsales/GdSalesReportdayService.java | 184 ++++++++----- .../portal/biz/gdsales/GdSalesService.java | 244 ++++++++++++------ .../portal/biz/gdsales/GdSalesYcMapper.java | 25 ++ .../portal/biz/gdsales/GdSalesYcService.java | 23 ++ .../biz/gdwholesale/GdWholesaleMapper.java | 3 + .../biz/gdwholesale/GdWholesaleService.java | 4 + .../biz/storeinfo/StoreInfoService.java | 33 +++ .../在途商品汇总统计表.xlsx | Bin 20707 -> 20684 bytes .../xlsx-tmpl/销售汇总日报表.xlsx | Bin 26237 -> 23617 bytes 20 files changed, 594 insertions(+), 210 deletions(-) diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountMapper.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountMapper.java index 6cd22cfe..37155186 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountMapper.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountMapper.java @@ -83,4 +83,27 @@ public interface GdInstorageCountMapper extends BaseMapper { */ @Select("SELECT name,code,CONVERT(billTotalPrice,DECIMAL(12,2)) billTotalPrice,billDate,arrivalDate FROM hz_gysddmxb") List> ddmxb(); + + /** + * 烟草订单明细表 + * + * @return + */ + @Select("SELECT prs.storeName storeName ,prt.code code ,CONVERT(SUM(prs.price),DECIMAL(12,2)) price,prt.purchaseDate purchaseDate, " + + "prt.arrivalDate arrivalDate " + + " FROM purchase_requisition_store prs " + + "LEFT JOIN `purchase_requisition_tobacco` prt ON prt.sid=prs.mainsid " + + "GROUP BY prs.storeCode ORDER BY prs.storeName ") + List> ycddmxb(); + + @Select("SELECT CONCAT('[',prs.storeCode,']',prs.storeName) storeName , " + + "CONVERT(SUM(prs.price),DECIMAL(12,2)) ddspjz, " + + "CONVERT(IFNULL(SUM(giy.colq16),0),DECIMAL(12,2)) colq16, " + + "CONVERT(IF(SUM(prs.price)-IFNULL(SUM(giy.colq16),0)>0,SUM(prs.price)-IFNULL(SUM(giy.colq16),0),0),DECIMAL(12,2)) ztprodValue1, " + + "CONVERT(IF(IFNULL(SUM(giy.colq16),0)-SUM(prs.price)>0,IFNULL(SUM(giy.colq16),0)-SUM(prs.price),0),DECIMAL(12,2)) ztprodValue2 " + + " FROM `purchase_requisition_store` prs " + + "LEFT JOIN `purchase_requisition_tobacco_details` prtd ON prs.sid=prtd.mainsid " + + "LEFT JOIN `gd_instorage_yc` giy ON giy.colb1=prs.storeCode " + + "GROUP BY prs.storeCode ") + List> ycspdhmxb(); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountService.java index bd94dfe6..10d0a319 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageCountService.java @@ -136,10 +136,10 @@ public class GdInstorageCountService extends ServiceImpl> list4 = baseMapper.ycspdhmxb(); + if (list4 != null && !list4.isEmpty()) { + int size4 = list4.size(); + int countRow4 = size4 + 3; + double ccddspjz = 0, cccolq16 = 0, ccztprodValue1 = 0, ccztprodValue2 = 0; + for (int y = 3; y < countRow2; y++) { + Map map = list4.get(y - 3); + + writer.writeCellValue(0, y, "市烟草"); + writer.writeCellValue(1, y, map.get("storeName")); + writer.writeCellValue(2, y, map.get("ddspjz")); + ccddspjz = ccddspjz + ExcelTool.toDouble(map.get("ddspjz")); + writer.writeCellValue(3, y, map.get("colq16")); + cccolq16 = cccolq16 + ExcelTool.toDouble(map.get("colq16")); + writer.writeCellValue(4, y, map.get("ztprodValue1")); + ccztprodValue1 = ccztprodValue1 + ExcelTool.toDouble(map.get("ztprodValue1")); + writer.writeCellValue(5, y, map.get("ztprodValue2")); + ccztprodValue2 = ccztprodValue2 + ExcelTool.toDouble(map.get("ztprodValue2")); + } + writer.writeCellValue(1, countRow4, "合计"); + writer.writeCellValue(2, countRow4, ccddspjz); + writer.writeCellValue(3, countRow4, cccolq16); + writer.writeCellValue(4, countRow4, ccztprodValue1); + writer.writeCellValue(5, countRow4, ccztprodValue2); + } // 烟草订单明细表 - // writer.setSheet(4); + writer.setSheet(4); + writer.writeCellValue(0, 1, "编号:ycddmxb" + dfmt1); + writer.writeCellValue(4, 1, "数据时间:" + dfmt); + List> list5 = baseMapper.ycddmxb(); + if (list5 != null && !list5.isEmpty()) { + int size5 = list5.size(); + int countRow5 = size5 + 3; + xh = 0; + double cPrice = 0; + for (int y = 3; y < countRow5; y++) { + Map map = list5.get(y - 3); + xh++; + writer.writeCellValue(0, y, xh); + writer.writeCellValue(1, y, map.get("storeName")); + writer.writeCellValue(2, y, map.get("code")); + writer.writeCellValue(3, y, map.get("price")); + cPrice = cPrice + ExcelTool.toDouble(map.get("price")); + writer.writeCellValue(4, y, map.get("purchaseDate")); + writer.writeCellValue(5, y, map.get("arrivalDate")); + } + writer.writeCellValue(1, countRow5, "合计金额"); + writer.writeCellValue(3, countRow5, cPrice); + } writer.flush(); writer.close(); @@ -218,4 +267,13 @@ public class GdInstorageCountService extends ServiceImpl> list = baseMapper.gysdhhzb(); + for (Map map : list) { + wdhjz = wdhjz + ExcelTool.toDouble(map.get("wdhjz")); + } + return wdhjz; + } } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdMapper.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdMapper.java index 5570a523..08d9d956 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdMapper.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdMapper.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; /** * Project: yxt_supervise
@@ -47,4 +48,7 @@ import org.apache.ibatis.annotations.Param; public interface GdInstorageJmdMapper extends BaseMapper { @Delete("delete from gd_instorage_jmd where orderDate=#{orderDate} ") void clearByOrderDate(@Param("orderDate") String orderDate); + + @Select("SELECT IFNULL(sum(colq16),0) as amount FROM gd_instorage_jmd where orderDate=#{orderDate} ") + double amountOfDay(@Param("orderDate") String orderDate); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdService.java index 1a97ef4b..1d3064d6 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageJmdService.java @@ -47,4 +47,8 @@ public class GdInstorageJmdService extends ServiceImpl @@ -47,4 +48,9 @@ import org.apache.ibatis.annotations.Param; public interface GdInstorageYcMapper extends BaseMapper { @Delete("delete from gd_instorage_yc where orderDate=#{orderDate} ") void clearByOrderDate(@Param("orderDate") String orderDate); + + @Select("select IFNULL(sum(t.colq16),0) as amount from ( " + + " select gig.* from gd_instorage_yc gig left join store_index si on gig.colb1=si.code " + + " where gig.orderDate=#{orderDate} and si.`type` ='连锁外加盟(销配结算)' ) t ") + double amountOfDayJmd(@Param("orderDate") String orderDate); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageYcService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageYcService.java index f0f56699..198e6161 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageYcService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinstorage/GdInstorageYcService.java @@ -46,4 +46,8 @@ public class GdInstorageYcService extends ServiceImpl { @Select("select prodCode,CONVERT(IFNULL(sum(prodNum),0),CHAR) pnum from gd_inventory_ok group by prodCode") List> numberOfProduct(); + + @Select("select IFNULL(sum(prodValue),0) from gd_inventory_ok") + double amountCurrent(); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryOkService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryOkService.java index 0e825218..3646de66 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryOkService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryOkService.java @@ -72,6 +72,16 @@ public class GdInventoryOkService extends ServiceImpl> listOfWarehouse() { + return baseMapper.listOfWarehouse(); + } + + // 仓库商品明细表 + public List> listOfProd(){ + return baseMapper.listOfProd(); + } + /** * 库存汇总 * @@ -258,4 +268,8 @@ public class GdInventoryOkService extends ServiceImpl map.put(m.get("prodCode"), m.get("pnum"))); return map; } + + public double amountCurrent() { + return baseMapper.amountCurrent(); + } } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryService.java index 7d8a1e0c..862caf10 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdinventory/GdInventoryService.java @@ -385,7 +385,7 @@ public class GdInventoryService extends ServiceImpl map = readMapFromRow(r); diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesMapper.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesMapper.java index 7b24659d..7f8c5377 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesMapper.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesMapper.java @@ -29,6 +29,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; /** * Project: yxt_supervise
@@ -48,4 +52,32 @@ public interface GdSalesMapper extends BaseMapper { @Delete("delete from gd_sales where dataDate=#{dataDate} ") void clearByDataDate(@Param("dataDate") String dataDate); + + @Select("select t2.storeCode,si.name,t2.amount from( " + + " select storeCode,sum(t1.price) as amount from( " + + " select storeCode,saleNum*salePrice as price from gd_sales where dataDate=#{dataDate} " + + " ) t1 group by t1.storeCode " + + ") t2 left join store_index si on t2.storecode=si.code ") + List> listOfStoreOnDay(@Param("dataDate") String orderDate); + + @Select("select count(1) from (select storeCode from gd_sales where dataDate=#{dataDate} group by storeCode) t") + int countStoreOnDay(@Param("dataDate") String orderDate); + + @Select("select count(1) from (select prodCode from gd_sales where dataDate=#{dataDate} group by prodCode) t") + int countProductOnDay(@Param("dataDate") String orderDate); + + @Select("select si.name,t1.* from ( " + + " select storeCode,orderType,orderNo,prodCode,prodName,saleNum,salePrice,saleNum*salePrice as amount from gd_sales where dataDate=#{dataDate} " + + ") t1 left join store_index si on t1.storecode=si.code ") + List> listOfProductOnDay(@Param("dataDate") String orderDate); + + @Select("select CONVERT(IFNULL(sum(saleNum*salePrice),0),DECIMAL(12,2)) as amount from ( " + + " select gs.saleNum,gs.salePrice from gd_sales gs left join store_index si on gs.storeCode=si.code " + + " where gs.dataDate=#{dataDate} and si.`type` ='连网连锁店' ) t ") + double amountOfLsdOnDay(@Param("dataDate") String orderDate); + + @Select("select CONVERT(IFNULL(sum(saleNum*salePrice),0),DECIMAL(12,2)) as amount from ( " + + " select gs.saleNum,gs.salePrice from gd_sales gs left join store_index si on gs.storeCode=si.code " + + " where gs.dataDate=#{dataDate} and si.`type` ='连锁内加盟' ) t ") + double amountOfLsnjmOnDay(String orderDate); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportday.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportday.java index d7d657e7..7849133d 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportday.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportday.java @@ -20,66 +20,66 @@ public class GdSalesReportday extends EntityWithId { private String kmdatea; // 科目/日,大前天 private String kmdateb; // 科目/日,前天 private String kmdatec; // 科目/日,昨天 - private String xjlla; // 现金流量-经营活动产生的现金流量(元),大前天 - private String xjllb; // 现金流量-经营活动产生的现金流量(元),前天 - private String xjllc; // 现金流量-经营活动产生的现金流量(元),昨天 - private String xsxja; // 销售商品收到的现金(元),大前天 - private String xsxjb; // 销售商品收到的现金(元),前天 - private String xsxjc; // 销售商品收到的现金(元),昨天 - private String qtxja; // 收到其他与经营活动有关的现金(元),大前天 - private String qtxjb; // 收到其他与经营活动有关的现金(元),前天 - private String qtxjc; // 收到其他与经营活动有关的现金(元),昨天 - private String cwfxhja; // 财务分析本项合计,大前天 - private String cwfxhjb; // 财务分析本项合计,前天 - private String cwfxhjc; // 财务分析本项合计,昨天 - private String zcfza; // 资产负债-流动资产(元),大前天 - private String zcfzb; // 资产负债-流动资产(元),前天 - private String zcfzc; // 资产负债-流动资产(元),昨天 - private String yszka; // 应收账款(元),大前天 - private String yszkb; // 应收账款(元),前天 - private String yszkc; // 应收账款(元),昨天 - private String ldfza; // 流动负债(元),大前天 - private String ldfzb; // 流动负债(元),前天 - private String ldfzc; // 流动负债(元),昨天 - private String yskxa; // 预收款项(元),大前天 - private String yskxb; // 预收款项(元),前天 - private String yskxc; // 预收款项(元),昨天 + private double xjlla = 0; // 现金流量-经营活动产生的现金流量(元),大前天 + private double xjllb = 0; // 现金流量-经营活动产生的现金流量(元),前天 + private double xjllc = 0; // 现金流量-经营活动产生的现金流量(元),昨天 + private double xsxja = 0; // 销售商品收到的现金(元),大前天 + private double xsxjb = 0; // 销售商品收到的现金(元),前天 + private double xsxjc = 0; // 销售商品收到的现金(元),昨天 + private double qtxja = 0; // 收到其他与经营活动有关的现金(元),大前天 + private double qtxjb = 0; // 收到其他与经营活动有关的现金(元),前天 + private double qtxjc = 0; // 收到其他与经营活动有关的现金(元),昨天 + private double cwfxhja = 0; // 财务分析本项合计,大前天 + private double cwfxhjb = 0; // 财务分析本项合计,前天 + private double cwfxhjc = 0; // 财务分析本项合计,昨天 + private double zcfza = 0; // 资产负债-流动资产(元),大前天 + private double zcfzb = 0; // 资产负债-流动资产(元),前天 + private double zcfzc = 0; // 资产负债-流动资产(元),昨天 + private double yszka = 0; // 应收账款(元),大前天 + private double yszkb = 0; // 应收账款(元),前天 + private double yszkc = 0; // 应收账款(元),昨天 + private double ldfza = 0; // 流动负债(元),大前天 + private double ldfzb = 0; // 流动负债(元),前天 + private double ldfzc = 0; // 流动负债(元),昨天 + private double yskxa = 0; // 预收款项(元),大前天 + private double yskxb = 0; // 预收款项(元),前天 + private double yskxc = 0; // 预收款项(元),昨天 private String qczhz; // 期初总货值 private String ycqchz; // 烟草期初货值 private String xmdatea; // 项目/日,前天 private String xmdateb; // 项目/日,昨天 private String xmdatec; // 项目/日,今天 - private String zthza; // 在途货值(元),前天 - private String zthzb; // 在途货值(元),昨天 - private String zthzc; // 在途货值(元),今天 - private String kchza; // 库存货值(元),前天 - private String kchzb; // 库存货值(元),昨天 - private String kchzc; // 库存货值(元),今天 - private String zhyea; // 帐户余额(元)账户余额为前一天余额,前天 - private String zhyeb; // 帐户余额(元)账户余额为前一天余额,昨天 - private String zhyec; // 帐户余额(元)账户余额为前一天余额,今天 - private String yjyszka; // 预警应收帐款(元),前天 - private String yjyszkb; // 预警应收帐款(元),昨天 - private String yjyszkc; // 预警应收帐款(元),今天 - private String yjhja; // 主要预警指标本项合计,前天 - private String yjhjb; // 主要预警指标本项合计,昨天 - private String yjhjc; // 主要预警指标本项合计,今天 - private String lwlsdze; // 连网连锁店,总额(元) - private String lwlsdyszk; // 连网连锁店,应收帐款(元) - private String lwlsdkcje; // 连网连锁店,扣除应收金额(元) - private String lsnjmze; // 连锁内加盟,总额(元) - private String lsnjmyszk; // 连锁内加盟,应收帐款(元) - private String lsnjmkcje; // 连锁内加盟,扣除应收金额(元) - private String pszxze; // 配送中心,总额(元) - private String pszxyszk; // 配送中心,应收帐款(元) - private String pszxkcje; // 配送中心,扣除应收金额(元) - private String lswjmze; // 连锁外加盟(销配结算),总额(元) - private String lswjmyszk; // 连锁外加盟(销配结算),应收帐款(元) - private String lswjmkcje; // 连锁外加盟(销配结算),扣除应收金额(元) - private String ycmdze; // 36524集团报烟门店仓,总额(元) - private String ycmdyszk; // 36524集团报烟门店仓,应收帐款(元) - private String ycmdkcje; // 36524集团报烟门店仓,扣除应收金额(元) - private String ycjmdze; // 烟草连锁外加盟(销配结算),总额(元) - private String ycjmdyszk; // 烟草连锁外加盟(销配结算),应收帐款(元) - private String ycjmdkcje; // 烟草连锁外加盟(销配结算),扣除应收金额(元) + private double zthza = 0; // 在途货值(元),前天 + private double zthzb = 0; // 在途货值(元),昨天 + private double zthzc = 0; // 在途货值(元),今天 + private double kchza = 0; // 库存货值(元),前天 + private double kchzb = 0; // 库存货值(元),昨天 + private double kchzc = 0; // 库存货值(元),今天 + private double zhyea = 0; // 帐户余额(元)账户余额为前一天余额,前天 + private double zhyeb = 0; // 帐户余额(元)账户余额为前一天余额,昨天 + private double zhyec = 0; // 帐户余额(元)账户余额为前一天余额,今天 + private double yjyszka = 0; // 预警应收帐款(元),前天 + private double yjyszkb = 0; // 预警应收帐款(元),昨天 + private double yjyszkc = 0; // 预警应收帐款(元),今天 + private double yjhja = 0; // 主要预警指标本项合计,前天 + private double yjhjb = 0; // 主要预警指标本项合计,昨天 + private double yjhjc = 0; // 主要预警指标本项合计,今天 + private double lwlsdze = 0; // 连网连锁店,总额(元) + private double lwlsdyszk = 0; // 连网连锁店,应收帐款(元) + private double lwlsdkcje = 0; // 连网连锁店,扣除应收金额(元) + private double lsnjmze = 0; // 连锁内加盟,总额(元) + private double lsnjmyszk = 0; // 连锁内加盟,应收帐款(元) + private double lsnjmkcje = 0; // 连锁内加盟,扣除应收金额(元) + private double pszxze = 0; // 配送中心,总额(元) + private double pszxyszk = 0; // 配送中心,应收帐款(元) + private double pszxkcje = 0; // 配送中心,扣除应收金额(元) + private double lswjmze = 0; // 连锁外加盟(销配结算),总额(元) + private double lswjmyszk = 0; // 连锁外加盟(销配结算),应收帐款(元) + private double lswjmkcje = 0; // 连锁外加盟(销配结算),扣除应收金额(元) + private double ycmdze = 0; // 36524集团报烟门店仓,总额(元) + private double ycmdyszk = 0; // 36524集团报烟门店仓,应收帐款(元) + private double ycmdkcje = 0; // 36524集团报烟门店仓,扣除应收金额(元) + private double ycjmdze = 0; // 烟草连锁外加盟(销配结算),总额(元) + private double ycjmdyszk = 0; // 烟草连锁外加盟(销配结算),应收帐款(元) + private double ycjmdkcje = 0; // 烟草连锁外加盟(销配结算),扣除应收金额(元) } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportdayService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportdayService.java index 059303a9..44ccc87f 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportdayService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesReportdayService.java @@ -2,8 +2,15 @@ package com.yxt.supervise.portal.biz.gdsales; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yxt.supervise.portal.biz.gdinstorage.GdInstorageCountService; +import com.yxt.supervise.portal.biz.gdinstorage.GdInstorageJmdService; +import com.yxt.supervise.portal.biz.gdinstorage.GdInstorageYcService; +import com.yxt.supervise.portal.biz.gdinventory.GdInventoryOkService; +import com.yxt.supervise.portal.biz.gdwholesale.GdWholesaleService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; @@ -12,87 +19,128 @@ import java.util.List; @Service public class GdSalesReportdayService extends ServiceImpl { + @Autowired + private GdSalesService gdSalesService; + @Autowired + private GdSalesYcService gdSalesYcService; + @Autowired + private GdWholesaleService gdWholesaleService; + @Autowired + private GdInstorageJmdService gdInstorageJmdService; + @Autowired + private GdInstorageYcService gdInstorageYcService; + @Autowired + private GdInventoryOkService gdInventoryOkService; + @Autowired + private GdInstorageCountService gdInstorageCountService; + public GdSalesReportday clearAndInitByOrderDate(String orderDate) { this.clearByOrderDate(orderDate); // 清除数据日的数据 - String dfmt2 = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"); + Date curDate = new Date(); + String dfmt = DateUtil.format(curDate, "yyyy-MM-dd"); + String dfmt2 = DateUtil.format(curDate, "yyyy-MM-dd HH:mm"); String preOrderDate = dayAgo(orderDate, -1); // 前一天 String befOrderDate = dayAgo(orderDate, -2); // 前两天 String thrOrderDate = dayAgo(orderDate, -3); // 前三天 - GdSalesReportday preReport = fetchByOrderDate(preOrderDate); - if (preReport == null) - preReport = new GdSalesReportday(); + + GdSalesReportday preRp = fetchByOrderDate(preOrderDate); + if (preRp == null) + preRp = new GdSalesReportday(); GdSalesReportday rp = new GdSalesReportday(); rp.setOrderDate(orderDate); // 单据日期 - rp.setSerialNumber("xsjyrbb" + orderDate); // 编号 + rp.setSerialNumber("xsjyrbb" + orderDate.replace("-", "")); // 编号 rp.setReportTime(dfmt2); // 上报时间 - rp.setKmdatea(thrOrderDate); // 科目/日,大前天 - rp.setKmdateb(befOrderDate); // 科目/日,前天 - rp.setKmdatec(preOrderDate); // 科目/日,昨天 - rp.setXjlla(""); // 现金流量-经营活动产生的现金流量(元),大前天 - rp.setXjllb(""); // 现金流量-经营活动产生的现金流量(元),前天 - rp.setXjllc(""); // 现金流量-经营活动产生的现金流量(元),昨天 - rp.setXsxja(""); // 销售商品收到的现金(元),大前天 - rp.setXsxjb(""); // 销售商品收到的现金(元),前天 - rp.setXsxjc(""); // 销售商品收到的现金(元),昨天 - rp.setQtxja(""); // 收到其他与经营活动有关的现金(元),大前天 - rp.setQtxjb(""); // 收到其他与经营活动有关的现金(元),前天 - rp.setQtxjc(""); // 收到其他与经营活动有关的现金(元),昨天 - rp.setCwfxhja(""); // 财务分析本项合计,大前天 - rp.setCwfxhjb(""); // 财务分析本项合计,前天 - rp.setCwfxhjc(""); // 财务分析本项合计,昨天 - rp.setZcfza(""); // 资产负债-流动资产(元),大前天 - rp.setZcfzb(""); // 资产负债-流动资产(元),前天 - rp.setZcfzc(""); // 资产负债-流动资产(元),昨天 - rp.setYszka(""); // 应收账款(元),大前天 - rp.setYszkb(""); // 应收账款(元),前天 - rp.setYszkc(""); // 应收账款(元),昨天 - rp.setLdfza(""); // 流动负债(元),大前天 - rp.setLdfzb(""); // 流动负债(元),前天 - rp.setLdfzc(""); // 流动负债(元),昨天 - rp.setYskxa(""); // 预收款项(元),大前天 - rp.setYskxb(""); // 预收款项(元),前天 - rp.setYskxc(""); // 预收款项(元),昨天 + rp.setKmdatea(befOrderDate); // 科目/日,大前天 + rp.setKmdateb(preOrderDate); // 科目/日,前天 + rp.setKmdatec(orderDate); // 科目/日,昨天 + // rp.setXjlla(""); // 现金流量-经营活动产生的现金流量(元),大前天 + // rp.setXjllb(""); // 现金流量-经营活动产生的现金流量(元),前天 + // rp.setXjllc(""); // 现金流量-经营活动产生的现金流量(元),昨天 + rp.setXsxja(preRp.getXsxjb()); // 销售商品收到的现金(元),大前天 + rp.setXsxjb(preRp.getXsxjc()); // 销售商品收到的现金(元),前天 + rp.setXsxjc(0); // 销售商品收到的现金(元),昨天 //后面计算 + // rp.setQtxja(""); // 收到其他与经营活动有关的现金(元),大前天 + // rp.setQtxjb(""); // 收到其他与经营活动有关的现金(元),前天 + // rp.setQtxjc(""); // 收到其他与经营活动有关的现金(元),昨天 + rp.setCwfxhja(preRp.getCwfxhjb()); // 财务分析本项合计,大前天 + rp.setCwfxhjb(preRp.getCwfxhjc()); // 财务分析本项合计,前天 + rp.setCwfxhjc(0); // 财务分析本项合计,昨天 //后面计算 + // rp.setZcfza(""); // 资产负债-流动资产(元),大前天 + // rp.setZcfzb(""); // 资产负债-流动资产(元),前天 + // rp.setZcfzc(""); // 资产负债-流动资产(元),昨天 + // rp.setYszka(""); // 应收账款(元),大前天 + // rp.setYszkb(""); // 应收账款(元),前天 + // rp.setYszkc(""); // 应收账款(元),昨天 + // rp.setLdfza(""); // 流动负债(元),大前天 + // rp.setLdfzb(""); // 流动负债(元),前天 + // rp.setLdfzc(""); // 流动负债(元),昨天 + // rp.setYskxa(""); // 预收款项(元),大前天 + // rp.setYskxb(""); // 预收款项(元),前天 + // rp.setYskxc(""); // 预收款项(元),昨天 rp.setQczhz(""); // 期初总货值 rp.setYcqchz(""); // 烟草期初货值 - rp.setXmdatea(""); // 项目/日,前天 - rp.setXmdateb(""); // 项目/日,昨天 - rp.setXmdatec(""); // 项目/日,今天 - rp.setZthza(""); // 在途货值(元),前天 - rp.setZthzb(""); // 在途货值(元),昨天 - rp.setZthzc(""); // 在途货值(元),今天 - rp.setKchza(""); // 库存货值(元),前天 - rp.setKchzb(""); // 库存货值(元),昨天 - rp.setKchzc(""); // 库存货值(元),今天 - rp.setZhyea(""); // 帐户余额(元)账户余额为前一天余额,前天 - rp.setZhyeb(""); // 帐户余额(元)账户余额为前一天余额,昨天 - rp.setZhyec(""); // 帐户余额(元)账户余额为前一天余额,今天 - rp.setYjyszka(""); // 预警应收帐款(元),前天 - rp.setYjyszkb(""); // 预警应收帐款(元),昨天 - rp.setYjyszkc(""); // 预警应收帐款(元),今天 - rp.setYjhja(""); // 主要预警指标本项合计,前天 - rp.setYjhjb(""); // 主要预警指标本项合计,昨天 - rp.setYjhjc(""); // 主要预警指标本项合计,今天 - rp.setLwlsdze(""); // 连网连锁店,总额(元) - rp.setLwlsdyszk(""); // 连网连锁店,应收帐款(元) - rp.setLwlsdkcje(""); // 连网连锁店,扣除应收金额(元) - rp.setLsnjmze(""); // 连锁内加盟,总额(元) - rp.setLsnjmyszk(""); // 连锁内加盟,应收帐款(元) - rp.setLsnjmkcje(""); // 连锁内加盟,扣除应收金额(元) - rp.setPszxze(""); // 配送中心,总额(元) - rp.setPszxyszk(""); // 配送中心,应收帐款(元) - rp.setPszxkcje(""); // 配送中心,扣除应收金额(元) - rp.setLswjmze(""); // 连锁外加盟(销配结算),总额(元) - rp.setLswjmyszk(""); // 连锁外加盟(销配结算),应收帐款(元) - rp.setLswjmkcje(""); // 连锁外加盟(销配结算),扣除应收金额(元) - rp.setYcmdze(""); // 36524集团报烟门店仓,总额(元) - rp.setYcmdyszk(""); // 36524集团报烟门店仓,应收帐款(元) - rp.setYcmdkcje(""); // 36524集团报烟门店仓,扣除应收金额(元) - rp.setYcjmdze(""); // 烟草连锁外加盟(销配结算),总额(元) - rp.setYcjmdyszk(""); // 烟草连锁外加盟(销配结算),应收帐款(元) - rp.setYcjmdkcje(""); // 烟草连锁外加盟(销配结算),扣除应收金额(元) + rp.setXmdatea(StrUtil.isBlank(preRp.getXmdateb()) ? preOrderDate : preRp.getXmdateb()); // 项目/日,前天 + rp.setXmdateb(StrUtil.isBlank(preRp.getXmdatec()) ? orderDate : preRp.getXmdatec()); // 项目/日,昨天 + rp.setXmdatec(dfmt); // 项目/日,今天 + rp.setZthza(preRp.getZthzb()); // 在途货值(元),前天 + rp.setZthzb(preRp.getZthzc()); // 在途货值(元),昨天 + rp.setZthzc(0); // 在途货值(元),今天 // 计算 + rp.setKchza(preRp.getKchzb()); // 库存货值(元),前天 + rp.setKchzb(preRp.getKchzc()); // 库存货值(元),昨天 + rp.setKchzc(0); // 库存货值(元),今天 // 计算 + // rp.setZhyea(""); // 帐户余额(元)账户余额为前一天余额,前天 + // rp.setZhyeb(""); // 帐户余额(元)账户余额为前一天余额,昨天 + // rp.setZhyec(""); // 帐户余额(元)账户余额为前一天余额,今天 + // rp.setYjyszka(""); // 预警应收帐款(元),前天 + // rp.setYjyszkb(""); // 预警应收帐款(元),昨天 + // rp.setYjyszkc(""); // 预警应收帐款(元),今天 + // rp.setYjhja(""); // 主要预警指标本项合计,前天 + // rp.setYjhjb(""); // 主要预警指标本项合计,昨天 + // rp.setYjhjc(""); // 主要预警指标本项合计,今天 + double xsLwlsd = gdSalesService.amountOfLwlsdDay(orderDate); + rp.setLwlsdze(xsLwlsd); // 连网连锁店,总额(元) + // rp.setLwlsdyszk(""); // 连网连锁店,应收帐款(元) + rp.setLwlsdkcje(xsLwlsd); // 连网连锁店,扣除应收金额(元) + + double xsLsnjm = gdSalesService.amountOfLsnjmDay(orderDate); + rp.setLsnjmze(xsLsnjm); // 连锁内加盟,总额(元) + // rp.setLsnjmyszk(""); // 连锁内加盟,应收帐款(元) + rp.setLsnjmkcje(xsLsnjm); // 连锁内加盟,扣除应收金额(元) + + double xsPszx = gdWholesaleService.amountOfDay(orderDate); + rp.setPszxze(xsPszx); // 配送中心,总额(元) + // rp.setPszxyszk(""); // 配送中心,应收帐款(元) + rp.setPszxkcje(xsPszx); // 配送中心,扣除应收金额(元) + + double xsLswjm = gdInstorageJmdService.amountOfDay(orderDate); + rp.setLswjmze(xsLswjm); // 连锁外加盟(销配结算),总额(元) + // rp.setLswjmyszk(""); // 连锁外加盟(销配结算),应收帐款(元) + rp.setLswjmkcje(xsLswjm); // 连锁外加盟(销配结算),扣除应收金额(元) + + double xsYc = gdSalesYcService.amountOfDay(orderDate); + rp.setYcmdze(xsYc); // 36524集团报烟门店仓,总额(元) + // rp.setYcmdyszk(""); // 36524集团报烟门店仓,应收帐款(元) + rp.setYcmdkcje(xsYc); // 36524集团报烟门店仓,扣除应收金额(元) + + double xsYcJmd = gdInstorageYcService.amountOfDayJmd(orderDate); + rp.setYcjmdze(xsYcJmd); // 烟草连锁外加盟(销配结算),总额(元) + // rp.setYcjmdyszk(""); // 烟草连锁外加盟(销配结算),应收帐款(元) + rp.setYcjmdkcje(xsYcJmd); // 烟草连锁外加盟(销配结算),扣除应收金额(元) + + double xshz1 = Math.round((xsLwlsd + xsLsnjm + xsPszx + xsLswjm + xsYc + xsYcJmd) * 100) / 100; + rp.setXsxjc(xshz1); // 销售商品收到的现金(元),昨天 //后面计算 + rp.setCwfxhjc(xshz1); // 财务分析本项合计,昨天 //后面计算 + + //在途货值 + double zthz = gdInstorageCountService.amountZaitu(); + rp.setZthzc(0); // 在途货值(元),今天 // 计算 + + //库存货值 + double kzhz = gdInventoryOkService.amountCurrent(); + rp.setKchzc(0); // 库存货值(元),今天 // 计算 baseMapper.insert(rp); return rp; diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesService.java index 3b2f5cc1..b4412972 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesService.java @@ -28,7 +28,6 @@ package com.yxt.supervise.portal.biz.gdsales; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; @@ -164,6 +163,7 @@ public class GdSalesService extends ServiceImpl { odate = dataDate; GdSalesGd gd = rowToEntity(r); toInsertListGd.add(gd); + // 监管商品销售数据 if (gdRescategoryProdService.containsCode(prodCode) && storeIndexService.containsCodeWithOneNoJmd(storeCode)) { GdSales gw = new GdSales(); BeanUtil.copyProperties(gd, gw); @@ -171,6 +171,7 @@ public class GdSalesService extends ServiceImpl { y++; } + // 烟草销售数据 if (checkYcProd(typeTwo) && storeInfoService.containsCodeOfYc(storeCode)) { GdSalesYc gyc = new GdSalesYc(); BeanUtil.copyProperties(gd, gyc); @@ -220,7 +221,7 @@ public class GdSalesService extends ServiceImpl { if (gdLog == null) return rb.setMsg("上传记录未找到"); String orderDate = gdLog.getOrderDate(); - GdSalesReportday reportday = gdSalesReportdayService.clearAndInitByOrderDate(orderDate); + GdSalesReportday reportday = gdSalesReportdayService.clearAndInitByOrderDate(orderDate); Date curDate = new Date(); @@ -240,19 +241,110 @@ public class GdSalesService extends ServiceImpl { // 销售汇总日报表 writer.setSheet(0); - xshzrbb(writer,reportday); + xshzrbb(writer, reportday); // 门店销售明细表 - // writer.setSheet(1); + writer.setSheet(1); + int storeCount = baseMapper.countStoreOnDay(orderDate); + List> list1 = baseMapper.listOfStoreOnDay(orderDate); + // writer.writeCellValue(0, 1, "编号:mdxsmxb" + dfmt1); + writer.merge(1, 1, 0, 2, "编号:mdxsmxb" + dfmt1, false); + writer.writeCellValue(3, 1, "渠道数量: " + storeCount); + writer.writeCellValue(4, 1, " 上报时间:" + dfmt2); + int size1 = list1.size(); + int countRow1 = size1 + 3; + double hj1 = 0; + int xh = 0; + for (int y = 3; y < countRow1; y++) { + Map map = list1.get(y - 3); + xh++; + writer.writeCellValue(0, y, xh); + // writer.writeCellValue(1, y, map.get("name")); + writer.merge(y, y, 1, 3, map.get("name"), false); + writer.writeCellValue(4, y, map.get("amount")); + hj1 = hj1 + ExcelTool.toDouble(map.get("amount")); + } + // writer.writeCellValue(1, countRow1, "合计"); + writer.merge(countRow1, countRow1, 0, 3, "合计", false); + writer.writeCellValue(4, countRow1, hj1); // 门店商品销售明细表 - // writer.setSheet(2); + writer.setSheet(2); + int productCount = baseMapper.countProductOnDay(orderDate); + List> list2 = baseMapper.listOfProductOnDay(orderDate); + // writer.writeCellValue(0, 1, "编号:mdspxsmxb" + dfmt1); + writer.merge(1, 1, 0, 2, "编号:mdspxsmxb" + dfmt1, false); + // writer.writeCellValue(3, 1, "商品数量: " + productCount); + writer.merge(1, 1, 3, 4, "商品数量: " + productCount, false); + // writer.writeCellValue(4, 1, " 上报时间:" + dfmt2); + writer.merge(1, 1, 5, 7, "上报时间:" + dfmt2, false); + int size2 = list2.size(); + int countRow2 = size2 + 3; + double hj2 = 0; + for (int y = 3; y < countRow2; y++) { + Map map = list2.get(y - 3); + writer.writeCellValue(0, y, map.get("name")); + writer.writeCellValue(1, y, map.get("orderType")); + writer.writeCellValue(2, y, map.get("orderNo")); + writer.writeCellValue(3, y, map.get("prodCode")); + writer.writeCellValue(4, y, map.get("prodName")); + writer.writeCellValue(5, y, Math.round(ExcelTool.toDouble( map.get("saleNum")))); + writer.writeCellValue(6, y, map.get("salePrice")); + writer.writeCellValue(7, y, map.get("amount")); + hj2 = hj2 + ExcelTool.toDouble(map.get("amount")); + } + writer.merge(countRow2, countRow2, 0, 6, "合计", false); + writer.writeCellValue(7, countRow2, hj2); // 烟草门店销售明细表 - // writer.setSheet(3); + writer.setSheet(3); + int storeCountyc = gdSalesYcService.countStoreOnDay(orderDate); + List> list1yc = gdSalesYcService.listOfStoreOnDay(orderDate); + // writer.writeCellValue(0, 1, "编号:ycmdxsmxb" + dfmt1); + writer.merge(1, 1, 0, 2, "编号:ycmdxsmxb" + dfmt1, false); + writer.writeCellValue(3, 1, "渠道数量: " + storeCountyc); + writer.writeCellValue(4, 1, " 上报时间:" + dfmt2); + int size1yc = list1yc.size(); + int countRow1yc = size1yc + 3; + double hj1yc = 0; + xh = 0; + for (int y = 3; y < countRow1yc; y++) { + Map map = list1yc.get(y - 3); + xh++; + writer.writeCellValue(0, y, xh); + // writer.writeCellValue(1, y, map.get("name")); + writer.merge(y, y, 1, 3, map.get("name"), false); + writer.writeCellValue(4, y, map.get("amount")); + hj1yc = hj1yc + ExcelTool.toDouble(map.get("amount")); + } + // writer.writeCellValue(1, countRow1yc, "合计"); + writer.merge(countRow1yc, countRow1yc, 0, 3, "合计", false); + writer.writeCellValue(4, countRow1yc, hj1yc); // 烟草门店商品销售明细表 - // writer.setSheet(4); + writer.setSheet(4); + int productCountyc = gdSalesYcService.countProductOnDay(orderDate); + List> list2yc = gdSalesYcService.listOfProductOnDay(orderDate); + writer.merge(1, 1, 0, 2, "编号:ycmdspxsmxb" + dfmt1, false); + writer.merge(1, 1, 3, 4, "商品数量: " + productCountyc, false); + writer.merge(1, 1, 5, 7, "上报时间:" + dfmt2, false); + int size2yc = list2yc.size(); + int countRow2yc = size2yc + 3; + double hj2yc = 0; + for (int y = 3; y < countRow2yc; y++) { + Map map = list2yc.get(y - 3); + writer.writeCellValue(0, y, map.get("name")); + writer.writeCellValue(1, y, map.get("orderType")); + writer.writeCellValue(2, y, map.get("orderNo")); + writer.writeCellValue(3, y, map.get("prodCode")); + writer.writeCellValue(4, y, map.get("prodName")); + writer.writeCellValue(5, y, Math.round(ExcelTool.toDouble( map.get("saleNum")))); + writer.writeCellValue(6, y, map.get("salePrice")); + writer.writeCellValue(7, y, map.get("amount")); + hj2yc = hj2yc + ExcelTool.toDouble(map.get("amount")); + } + writer.merge(countRow2yc, countRow2yc, 0, 6, "合计", false); + writer.writeCellValue(7, countRow2yc, hj2yc); writer.flush(); writer.close(); @@ -267,70 +359,78 @@ public class GdSalesService extends ServiceImpl { private void xshzrbb(ExcelWriter writer, GdSalesReportday reportday) { writer.writeCellValue(0, 1, "编号:" + reportday.getSerialNumber()); writer.writeCellValue(2, 1, "上报时间:" + reportday.getReportTime()); - writer.writeCellValue(1, 3,reportday.getKmdatea()); // 科目/日,大前天 - writer.writeCellValue(2, 3,reportday.getKmdateb()); // 科目/日,前天 - writer.writeCellValue(3, 3,reportday.getKmdatec()); // 科目/日,昨天 - writer.writeCellValue(1, 4,reportday.getXjlla()); // 现金流量-经营活动产生的现金流量(元),大前天 - writer.writeCellValue(2, 4,reportday.getXjllb()); // 现金流量-经营活动产生的现金流量(元),前天 - writer.writeCellValue(3, 4,reportday.getXjllc()); // 现金流量-经营活动产生的现金流量(元),昨天 - writer.writeCellValue(1, 5,reportday.getXsxja()); // 销售商品收到的现金(元),大前天 - writer.writeCellValue(2, 5,reportday.getXsxjb()); // 销售商品收到的现金(元),前天 - writer.writeCellValue(3, 5,reportday.getXsxjc()); // 销售商品收到的现金(元),昨天 - writer.writeCellValue(1, 6,reportday.getQtxja()); // 收到其他与经营活动有关的现金(元),大前天 - writer.writeCellValue(2, 6,reportday.getQtxjb()); // 收到其他与经营活动有关的现金(元),前天 - writer.writeCellValue(3, 6,reportday.getQtxjc()); // 收到其他与经营活动有关的现金(元),昨天 - writer.writeCellValue(1, 7,reportday.getCwfxhja()); // 财务分析本项合计,大前天 - writer.writeCellValue(2, 7,reportday.getCwfxhjb()); // 财务分析本项合计,前天 - writer.writeCellValue(3, 7,reportday.getCwfxhjc()); // 财务分析本项合计,昨天 - writer.writeCellValue(1, 8,reportday.getZcfza()); // 资产负债-流动资产(元),大前天 - writer.writeCellValue(2, 8,reportday.getZcfzb()); // 资产负债-流动资产(元),前天 - writer.writeCellValue(3, 8,reportday.getZcfzc()); // 资产负债-流动资产(元),昨天 - writer.writeCellValue(1, 9,reportday.getYszka()); // 应收账款(元),大前天 - writer.writeCellValue(2, 9,reportday.getYszkb()); // 应收账款(元),前天 - writer.writeCellValue(3, 9,reportday.getYszkc()); // 应收账款(元),昨天 - writer.writeCellValue(1, 10,reportday.getLdfza()); // 流动负债(元),大前天 - writer.writeCellValue(2, 10,reportday.getLdfzb()); // 流动负债(元),前天 - writer.writeCellValue(3, 10,reportday.getLdfzc()); // 流动负债(元),昨天 - writer.writeCellValue(1, 11,reportday.getYskxa()); // 预收款项(元),大前天 - writer.writeCellValue(2, 11,reportday.getYskxb()); // 预收款项(元),前天 - writer.writeCellValue(3, 11,reportday.getYskxc()); // 预收款项(元),昨天 - writer.writeCellValue(1, 12,"期初总货值:"+reportday.getQczhz()); // 期初总货值 - writer.writeCellValue(3, 12,"烟草期初货值:"+reportday.getYcqchz()); // 烟草期初货值 - writer.writeCellValue(1, 13,reportday.getXmdatea()); // 项目/日,前天 - writer.writeCellValue(2, 13,reportday.getXmdateb()); // 项目/日,昨天 - writer.writeCellValue(3, 13,reportday.getXmdatec()); // 项目/日,今天 - writer.writeCellValue(1, 14,reportday.getZthza()); // 在途货值(元),前天 - writer.writeCellValue(2, 14,reportday.getZthzb()); // 在途货值(元),昨天 - writer.writeCellValue(3, 14,reportday.getZthzc()); // 在途货值(元),今天 - writer.writeCellValue(1, 15,reportday.getKchza()); // 库存货值(元),前天 - writer.writeCellValue(2, 15,reportday.getKchzb()); // 库存货值(元),昨天 - writer.writeCellValue(3, 15,reportday.getKchzc()); // 库存货值(元),今天 - writer.writeCellValue(1, 16,reportday.getZhyea()); // 帐户余额(元)账户余额为前一天余额,前天 - writer.writeCellValue(2, 16,reportday.getZhyeb()); // 帐户余额(元)账户余额为前一天余额,昨天 - writer.writeCellValue(3, 16,reportday.getZhyec()); // 帐户余额(元)账户余额为前一天余额,今天 - writer.writeCellValue(1, 17,reportday.getYjyszka()); // 预警应收帐款(元),前天 - writer.writeCellValue(2, 17,reportday.getYjyszkb()); // 预警应收帐款(元),昨天 - writer.writeCellValue(3, 17,reportday.getYjyszkc()); // 预警应收帐款(元),今天 - writer.writeCellValue(1, 18,reportday.getYjhja()); // 主要预警指标本项合计,前天 - writer.writeCellValue(2, 18,reportday.getYjhjb()); // 主要预警指标本项合计,昨天 - writer.writeCellValue(3, 18,reportday.getYjhjc()); // 主要预警指标本项合计,今天 - writer.writeCellValue(1, 21,reportday.getLwlsdze()); // 连网连锁店,总额(元) - writer.writeCellValue(2, 21,reportday.getLwlsdyszk()); // 连网连锁店,应收帐款(元) - writer.writeCellValue(3, 21,reportday.getLwlsdkcje()); // 连网连锁店,扣除应收金额(元) - writer.writeCellValue(1, 22,reportday.getLsnjmze()); // 连锁内加盟,总额(元) - writer.writeCellValue(2, 22,reportday.getLsnjmyszk()); // 连锁内加盟,应收帐款(元) - writer.writeCellValue(3, 22,reportday.getLsnjmkcje()); // 连锁内加盟,扣除应收金额(元) - writer.writeCellValue(1, 23,reportday.getPszxze()); // 配送中心,总额(元) - writer.writeCellValue(2, 23,reportday.getPszxyszk()); // 配送中心,应收帐款(元) - writer.writeCellValue(3, 23,reportday.getPszxkcje()); // 配送中心,扣除应收金额(元) - writer.writeCellValue(1, 24,reportday.getLswjmze()); // 连锁外加盟(销配结算),总额(元) - writer.writeCellValue(2, 24,reportday.getLswjmyszk()); // 连锁外加盟(销配结算),应收帐款(元) - writer.writeCellValue(3, 24,reportday.getLswjmkcje()); // 连锁外加盟(销配结算),扣除应收金额(元) - writer.writeCellValue(1, 25,reportday.getYcmdze()); // 36524集团报烟门店仓,总额(元) - writer.writeCellValue(2, 25,reportday.getYcmdyszk()); // 36524集团报烟门店仓,应收帐款(元) - writer.writeCellValue(3, 25,reportday.getYcmdkcje()); // 36524集团报烟门店仓,扣除应收金额(元) - writer.writeCellValue(1, 26,reportday.getYcjmdze()); // 烟草连锁外加盟(销配结算),总额(元) - writer.writeCellValue(2, 26,reportday.getYcjmdyszk()); // 烟草连锁外加盟(销配结算),应收帐款(元) - writer.writeCellValue(3, 26,reportday.getYcjmdkcje()); // 烟草连锁外加盟(销配结算),扣除应收金额(元) + writer.writeCellValue(1, 3, reportday.getKmdatea()); // 科目/日,大前天 + writer.writeCellValue(2, 3, reportday.getKmdateb()); // 科目/日,前天 + writer.writeCellValue(3, 3, reportday.getKmdatec()); // 科目/日,昨天 + writer.writeCellValue(1, 4, reportday.getXjlla()); // 现金流量-经营活动产生的现金流量(元),大前天 + writer.writeCellValue(2, 4, reportday.getXjllb()); // 现金流量-经营活动产生的现金流量(元),前天 + writer.writeCellValue(3, 4, reportday.getXjllc()); // 现金流量-经营活动产生的现金流量(元),昨天 + writer.writeCellValue(1, 5, reportday.getXsxja()); // 销售商品收到的现金(元),大前天 + writer.writeCellValue(2, 5, reportday.getXsxjb()); // 销售商品收到的现金(元),前天 + writer.writeCellValue(3, 5, reportday.getXsxjc()); // 销售商品收到的现金(元),昨天 + writer.writeCellValue(1, 6, reportday.getQtxja()); // 收到其他与经营活动有关的现金(元),大前天 + writer.writeCellValue(2, 6, reportday.getQtxjb()); // 收到其他与经营活动有关的现金(元),前天 + writer.writeCellValue(3, 6, reportday.getQtxjc()); // 收到其他与经营活动有关的现金(元),昨天 + writer.writeCellValue(1, 7, reportday.getCwfxhja()); // 财务分析本项合计,大前天 + writer.writeCellValue(2, 7, reportday.getCwfxhjb()); // 财务分析本项合计,前天 + writer.writeCellValue(3, 7, reportday.getCwfxhjc()); // 财务分析本项合计,昨天 + writer.writeCellValue(1, 8, reportday.getZcfza()); // 资产负债-流动资产(元),大前天 + writer.writeCellValue(2, 8, reportday.getZcfzb()); // 资产负债-流动资产(元),前天 + writer.writeCellValue(3, 8, reportday.getZcfzc()); // 资产负债-流动资产(元),昨天 + writer.writeCellValue(1, 9, reportday.getYszka()); // 应收账款(元),大前天 + writer.writeCellValue(2, 9, reportday.getYszkb()); // 应收账款(元),前天 + writer.writeCellValue(3, 9, reportday.getYszkc()); // 应收账款(元),昨天 + writer.writeCellValue(1, 10, reportday.getLdfza()); // 流动负债(元),大前天 + writer.writeCellValue(2, 10, reportday.getLdfzb()); // 流动负债(元),前天 + writer.writeCellValue(3, 10, reportday.getLdfzc()); // 流动负债(元),昨天 + writer.writeCellValue(1, 11, reportday.getYskxa()); // 预收款项(元),大前天 + writer.writeCellValue(2, 11, reportday.getYskxb()); // 预收款项(元),前天 + writer.writeCellValue(3, 11, reportday.getYskxc()); // 预收款项(元),昨天 + writer.writeCellValue(1, 12, "期初总货值:" + reportday.getQczhz()); // 期初总货值 + writer.writeCellValue(3, 12, "烟草期初货值:" + reportday.getYcqchz()); // 烟草期初货值 + writer.writeCellValue(1, 13, reportday.getXmdatea()); // 项目/日,前天 + writer.writeCellValue(2, 13, reportday.getXmdateb()); // 项目/日,昨天 + writer.writeCellValue(3, 13, reportday.getXmdatec()); // 项目/日,今天 + writer.writeCellValue(1, 14, reportday.getZthza()); // 在途货值(元),前天 + writer.writeCellValue(2, 14, reportday.getZthzb()); // 在途货值(元),昨天 + writer.writeCellValue(3, 14, reportday.getZthzc()); // 在途货值(元),今天 + writer.writeCellValue(1, 15, reportday.getKchza()); // 库存货值(元),前天 + writer.writeCellValue(2, 15, reportday.getKchzb()); // 库存货值(元),昨天 + writer.writeCellValue(3, 15, reportday.getKchzc()); // 库存货值(元),今天 + writer.writeCellValue(1, 16, reportday.getZhyea()); // 帐户余额(元)账户余额为前一天余额,前天 + writer.writeCellValue(2, 16, reportday.getZhyeb()); // 帐户余额(元)账户余额为前一天余额,昨天 + writer.writeCellValue(3, 16, reportday.getZhyec()); // 帐户余额(元)账户余额为前一天余额,今天 + writer.writeCellValue(1, 17, reportday.getYjyszka()); // 预警应收帐款(元),前天 + writer.writeCellValue(2, 17, reportday.getYjyszkb()); // 预警应收帐款(元),昨天 + writer.writeCellValue(3, 17, reportday.getYjyszkc()); // 预警应收帐款(元),今天 + writer.writeCellValue(1, 18, reportday.getYjhja()); // 主要预警指标本项合计,前天 + writer.writeCellValue(2, 18, reportday.getYjhjb()); // 主要预警指标本项合计,昨天 + writer.writeCellValue(3, 18, reportday.getYjhjc()); // 主要预警指标本项合计,今天 + writer.writeCellValue(1, 21, reportday.getLwlsdze()); // 连网连锁店,总额(元) + writer.writeCellValue(2, 21, reportday.getLwlsdyszk()); // 连网连锁店,应收帐款(元) + writer.writeCellValue(3, 21, reportday.getLwlsdkcje()); // 连网连锁店,扣除应收金额(元) + writer.writeCellValue(1, 22, reportday.getLsnjmze()); // 连锁内加盟,总额(元) + writer.writeCellValue(2, 22, reportday.getLsnjmyszk()); // 连锁内加盟,应收帐款(元) + writer.writeCellValue(3, 22, reportday.getLsnjmkcje()); // 连锁内加盟,扣除应收金额(元) + writer.writeCellValue(1, 23, reportday.getPszxze()); // 配送中心,总额(元) + writer.writeCellValue(2, 23, reportday.getPszxyszk()); // 配送中心,应收帐款(元) + writer.writeCellValue(3, 23, reportday.getPszxkcje()); // 配送中心,扣除应收金额(元) + writer.writeCellValue(1, 24, reportday.getLswjmze()); // 连锁外加盟(销配结算),总额(元) + writer.writeCellValue(2, 24, reportday.getLswjmyszk()); // 连锁外加盟(销配结算),应收帐款(元) + writer.writeCellValue(3, 24, reportday.getLswjmkcje()); // 连锁外加盟(销配结算),扣除应收金额(元) + writer.writeCellValue(1, 25, reportday.getYcmdze()); // 36524集团报烟门店仓,总额(元) + writer.writeCellValue(2, 25, reportday.getYcmdyszk()); // 36524集团报烟门店仓,应收帐款(元) + writer.writeCellValue(3, 25, reportday.getYcmdkcje()); // 36524集团报烟门店仓,扣除应收金额(元) + writer.writeCellValue(1, 26, reportday.getYcjmdze()); // 烟草连锁外加盟(销配结算),总额(元) + writer.writeCellValue(2, 26, reportday.getYcjmdyszk()); // 烟草连锁外加盟(销配结算),应收帐款(元) + writer.writeCellValue(3, 26, reportday.getYcjmdkcje()); // 烟草连锁外加盟(销配结算),扣除应收金额(元) + } + + public double amountOfLwlsdDay(String orderDate) { + return baseMapper.amountOfLsdOnDay(orderDate); + } + + public double amountOfLsnjmDay(String orderDate) { + return baseMapper.amountOfLsnjmOnDay(orderDate); } } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcMapper.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcMapper.java index bc5d172c..8b6ca606 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcMapper.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcMapper.java @@ -29,6 +29,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; /** * Project: yxt_supervise
@@ -47,4 +51,25 @@ import org.apache.ibatis.annotations.Param; public interface GdSalesYcMapper extends BaseMapper { @Delete("delete from gd_sales_yc where dataDate=#{dataDate} ") void clearByDataDate(@Param("dataDate") String dataDate); + + @Select("select count(1) from (select storeCode from gd_sales_yc where dataDate=#{dataDate} group by storeCode) t") + int countStoreOnDay(@Param("dataDate") String orderDate); + + @Select("select t2.storeCode,si.name,t2.amount from( " + + " select storeCode,sum(t1.price) as amount from( " + + " select storeCode,saleNum*salePrice as price from gd_sales_yc where dataDate=#{dataDate} " + + " ) t1 group by t1.storeCode " + + ") t2 left join store_index si on t2.storecode=si.code ") + List> listOfStoreOnDay(@Param("dataDate") String orderDate); + + @Select("select count(1) from (select prodCode from gd_sales_yc where dataDate=#{dataDate} group by prodCode) t") + int countProductOnDay(@Param("dataDate") String orderDate); + + @Select("select si.name,t1.* from ( " + + " select storeCode,orderType,orderNo,prodCode,prodName,saleNum,salePrice,saleNum*salePrice as amount from gd_sales_yc where dataDate=#{dataDate} " + + ") t1 left join store_index si on t1.storecode=si.code ") + List> listOfProductOnDay(@Param("dataDate") String orderDate); + + @Select("SELECT CONVERT(IFNULL(sum(saleNum*salePrice),0),DECIMAL(12,2)) as amount FROM gd_sales_yc where dataDate=#{dataDate}") + double amountOfDay(String orderDate); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcService.java index 79c11e29..d40015e2 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsales/GdSalesYcService.java @@ -28,6 +28,9 @@ package com.yxt.supervise.portal.biz.gdsales; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; + /** * Project: yxt_supervise
* File: GdSalesYcService.java
@@ -47,4 +50,24 @@ public class GdSalesYcService extends ServiceImpl { public void clearByDataDate(String dataDate) { baseMapper.clearByDataDate(dataDate); } + + public int countStoreOnDay(String orderDate) { + return baseMapper.countStoreOnDay(orderDate); + } + + public List> listOfStoreOnDay(String orderDate) { + return baseMapper.listOfStoreOnDay(orderDate); + } + + public int countProductOnDay(String orderDate) { + return baseMapper.countProductOnDay(orderDate); + } + + public List> listOfProductOnDay(String orderDate) { + return baseMapper.listOfProductOnDay(orderDate); + } + + public double amountOfDay(String orderDate) { + return baseMapper.amountOfDay(orderDate); + } } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleMapper.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleMapper.java index 37112eb0..a34f7c98 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleMapper.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleMapper.java @@ -36,4 +36,7 @@ public interface GdWholesaleMapper extends BaseMapper { // " FROM gd_wholesale where dataDate=#{dataDate} ") @Select("SELECT * FROM gd_wholesale where dataDate=#{dataDate} ") List excelListByOrderDate(@Param("dataDate") String orderDate); + + @Select("SELECT CONVERT(IFNULL(sum(saleNum*salePrice),0),DECIMAL(12,2)) as amount FROM gd_wholesale where dataDate=#{dataDate} ") + double amountOfDay(String orderDate); } diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleService.java b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleService.java index 3d8c5898..d18ca350 100644 --- a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleService.java +++ b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdwholesale/GdWholesaleService.java @@ -180,4 +180,8 @@ public class GdWholesaleService extends ServiceImpl cacheCodeListOfYc = null; //烟草门店的门店编号列表 + private static List cacheCodeListOfYcNoJmd = null; //烟草门店的门店编号列表(不含加盟店) public static void clearCacheCodeListOfYc() { cacheCodeListOfYc = null; + cacheCodeListOfYcNoJmd = null; } public boolean containsCodeOfYc(String code) { @@ -289,6 +291,15 @@ public class StoreInfoService extends MybatisBaseService res.add(entity.getCode().trim())); return res; } + + /** + * 烟草门店列表(不含加盟店) + * + * @return + */ + public List listOfYcNoJmd() { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("isycjyfw", "1"); + qw.ne("type", "连锁外加盟(销配结算)"); + qw.ne("type", "连锁外加盟(销配结算)"); + // qw.and(wrapper -> wrapper.ne("type", "连锁外加盟(销配结算)").or().like("remark", query.getName())); + List list = super.list(qw); + return list; + } + + private List listCodeOfYcNoJmd() { + List res = new ArrayList<>(); + List list = listOfYcNoJmd(); + list.forEach(entity -> res.add(entity.getCode().trim())); + return res; + } } \ No newline at end of file diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/resources/xlsx-tmpl/在途商品汇总统计表.xlsx b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/resources/xlsx-tmpl/在途商品汇总统计表.xlsx index c0d0a3866402ce04bc2d8425d79e820b0b2f6af4..2c8bdd6f40556ccb4227834063fdb99f9f077c10 100644 GIT binary patch delta 8581 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 delta 8593 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 diff --git a/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/resources/xlsx-tmpl/销售汇总日报表.xlsx b/yxt_supervise/supervise-portal/supervise-portal-biz/src/main/resources/xlsx-tmpl/销售汇总日报表.xlsx index d21a4e1f80e22087d4d88933d91915f0ba13b758..98dab2c3fe44f9e3a5805dce1408964c5453b5d1 100644 GIT binary patch delta 11276 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