CmDiscernReceiptController.java 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352
  1. package com.caimei.modules.order.web;
  2. import com.caimei.modules.common.utils.ExcelUtil;
  3. import com.caimei.modules.order.dao.CmDiscernReceiptDao;
  4. import com.caimei.modules.order.dao.NewOrderDao;
  5. import com.caimei.modules.order.entity.*;
  6. import com.caimei.modules.order.service.*;
  7. import com.caimei.modules.order.utils.OrderUtil;
  8. import com.caimei.modules.user.dao.CmUserDao;
  9. import com.caimei.modules.user.entity.CmUser;
  10. import com.caimei.modules.user.entity.CmUserBalanceRecord;
  11. import com.caimei.modules.user.entity.CmUserOrganize;
  12. import com.caimei.modules.user.service.CmUserBalanceRecordService;
  13. import com.caimei.modules.user.service.CmUserOrganizeService;
  14. import com.caimei.utils.DateUtils;
  15. import com.thinkgem.jeesite.common.config.Global;
  16. import com.thinkgem.jeesite.common.persistence.Page;
  17. import com.thinkgem.jeesite.common.utils.Encodes;
  18. import com.thinkgem.jeesite.common.utils.StringUtils;
  19. import com.thinkgem.jeesite.common.web.BaseController;
  20. import org.apache.commons.collections.CollectionUtils;
  21. import org.apache.poi.hssf.usermodel.*;
  22. import org.apache.poi.hssf.util.HSSFColor;
  23. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  24. import org.apache.poi.ss.usermodel.VerticalAlignment;
  25. import org.apache.poi.ss.util.CellRangeAddress;
  26. import org.apache.shiro.authz.annotation.RequiresPermissions;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Controller;
  29. import org.springframework.ui.Model;
  30. import org.springframework.web.bind.annotation.ModelAttribute;
  31. import org.springframework.web.bind.annotation.RequestMapping;
  32. import org.springframework.web.bind.annotation.RequestParam;
  33. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  34. import javax.annotation.Resource;
  35. import javax.servlet.http.HttpServletRequest;
  36. import javax.servlet.http.HttpServletResponse;
  37. import java.io.ByteArrayOutputStream;
  38. import java.text.DecimalFormat;
  39. import java.util.ArrayList;
  40. import java.util.HashMap;
  41. import java.util.List;
  42. import java.util.Map;
  43. /**
  44. * 识别款项表Controller
  45. *
  46. * @author lwt
  47. * @version 2019-06-19
  48. */
  49. @Controller
  50. @RequestMapping(value = "${adminPath}/order/cmDiscernReceipt")
  51. public class CmDiscernReceiptController extends BaseController {
  52. @Autowired
  53. private CmDiscernReceiptService cmDiscernReceiptService;
  54. @Resource
  55. private NewOrderDao newOrderDao;
  56. @Autowired
  57. private NewOrderProductService newOrderProductService;
  58. @Autowired
  59. private NewShopOrderService newShopOrderService;
  60. @Autowired
  61. private CmReceiptOrderRelationService cmReceiptOrderRelationService;
  62. @Autowired
  63. private NewOrderService newOrderService;
  64. @Resource
  65. private CmUserDao cmUserDao;
  66. @Resource
  67. private CmDiscernReceiptDao cmDiscernReceiptDao;
  68. @Autowired
  69. private CmPayShopRecordService cmPayShopRecordService;
  70. @Autowired
  71. private CmUserBalanceRecordService cmUserBalanceRecordService;
  72. @Autowired
  73. private CmUserOrganizeService cmUserOrganizeService;
  74. @ModelAttribute
  75. public CmDiscernReceipt get(@RequestParam(required = false) String id) {
  76. CmDiscernReceipt entity = null;
  77. if (StringUtils.isNotBlank(id)) {
  78. entity = cmDiscernReceiptService.get(id);
  79. }
  80. if (entity == null) {
  81. entity = new CmDiscernReceipt();
  82. }
  83. return entity;
  84. }
  85. @RequiresPermissions("order:cmDiscernReceipt:view")
  86. @RequestMapping(value = {"list", ""})
  87. public String list(CmDiscernReceipt cmDiscernReceipt, HttpServletRequest request, HttpServletResponse response, Model model) {
  88. if (null != cmDiscernReceipt.getStartTime() && !"".equals(cmDiscernReceipt.getStartTime()) && !cmDiscernReceipt.getStartTime().endsWith("00:00:00")) {
  89. model.addAttribute("startTime", cmDiscernReceipt.getStartTime());
  90. cmDiscernReceipt.setStartTime(cmDiscernReceipt.getStartTime().trim() + " 00:00:00");
  91. }
  92. if (null != cmDiscernReceipt.getEndTime() && !"".equals(cmDiscernReceipt.getEndTime()) && !cmDiscernReceipt.getEndTime().endsWith("23:59:59")) {
  93. model.addAttribute("endTime", cmDiscernReceipt.getEndTime());
  94. cmDiscernReceipt.setEndTime(cmDiscernReceipt.getEndTime().trim() + " 23:59:59");
  95. }
  96. Page<CmDiscernReceipt> page = cmDiscernReceiptService.findPage(new Page<CmDiscernReceipt>(request, response), cmDiscernReceipt);
  97. //获取组织列表
  98. List<CmUserOrganize> cmUserOrganizeList = cmUserOrganizeService.findOrganize();
  99. model.addAttribute("cmUserOrganizeList", cmUserOrganizeList);
  100. //
  101. model.addAttribute("page", page);
  102. return "modules/order/cmDiscernReceiptList";
  103. }
  104. @RequiresPermissions("order:cmDiscernReceipt:view")
  105. @RequestMapping(value = "form")
  106. public String form(CmDiscernReceipt cmDiscernReceipt, Model model) {
  107. model.addAttribute("cmDiscernReceipt", cmDiscernReceipt);
  108. return "modules/order/cmDiscernReceiptForm";
  109. }
  110. @RequiresPermissions("order:cmDiscernReceipt:edit")
  111. @RequestMapping(value = "save")
  112. public String save(CmDiscernReceipt cmDiscernReceipt, Model model, RedirectAttributes redirectAttributes) {
  113. if (!beanValidator(model, cmDiscernReceipt)) {
  114. return form(cmDiscernReceipt, model);
  115. }
  116. cmDiscernReceiptService.save(cmDiscernReceipt);
  117. addMessage(redirectAttributes, "保存识别款项表成功");
  118. return "redirect:" + Global.getAdminPath() + "/order/cmDiscernReceipt/?repage";
  119. }
  120. @RequiresPermissions("order:cmDiscernReceipt:delete")
  121. @RequestMapping(value = "delete")
  122. public String delete(CmDiscernReceipt cmDiscernReceipt, RedirectAttributes redirectAttributes) {
  123. cmDiscernReceiptService.delete(cmDiscernReceipt);
  124. addMessage(redirectAttributes, "删除识别款项表成功");
  125. return "redirect:" + Global.getAdminPath() + "/order/cmDiscernReceipt/?repage";
  126. }
  127. //------------------------------------------------------------
  128. //
  129. @RequiresPermissions("order:cmDiscernReceipt:view")
  130. @RequestMapping(value = "detail")
  131. public String detail(CmDiscernReceipt cmDiscernReceipt, Model model) {
  132. ReceiptDetailVo vo = cmDiscernReceiptService.detail(cmDiscernReceipt);
  133. model.addAttribute("vo", vo);
  134. return "modules/order/cmDiscernReceiptForm";
  135. }
  136. /**
  137. * 撤销收款
  138. *
  139. * @param cmDiscernReceipt
  140. * @param model
  141. * @return
  142. */
  143. @RequiresPermissions("order:cmDiscernReceipt:edit")
  144. @RequestMapping(value = "cancel")
  145. public String cancel(CmDiscernReceipt cmDiscernReceipt, Model model, String note, RedirectAttributes redirectAttributes) {
  146. try {
  147. cmDiscernReceiptService.cancel(cmDiscernReceipt, note);
  148. //撤销收款后如果存在多收款退款余额,则此处需要重新减少用户余额,以及撤销余额收支记录
  149. String orderID = cmDiscernReceipt.getOrderID();
  150. NewOrder newOrder = newOrderDao.get(orderID);
  151. String confirmType = cmDiscernReceipt.getConfirmType();
  152. if (StringUtils.isNotEmpty(confirmType) && StringUtils.equals("3", confirmType)) {
  153. //撤销余额收支记录
  154. CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
  155. cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
  156. cmUserBalanceRecord.setReceiptId(Integer.parseInt(cmDiscernReceipt.getId()));
  157. cmUserBalanceRecord.setUserId(newOrder.getUserID());
  158. cmUserBalanceRecord.setRemark("撤销收款,余额记录无效-后台");
  159. cmUserBalanceRecord.setDelFlag("1");
  160. cmUserBalanceRecordService.updateBalanceRecordBuyReceipt(cmUserBalanceRecord);
  161. //回收用户退款余额
  162. Integer userID = newOrder.getUserID();
  163. CmUser cmUser = cmUserDao.get(String.valueOf(userID));
  164. String receiptAmount = cmDiscernReceipt.getReceiptAmount();//收款金额
  165. Double payableAmount = newOrder.getPayableAmount();//订单真实需支付金额
  166. Double receiptAmountDb = 0d;
  167. if (StringUtils.isNotEmpty(receiptAmount)) {
  168. receiptAmountDb = Double.parseDouble(receiptAmount);
  169. }
  170. //多收退款余额金额
  171. Double blanceAmount = 0d;
  172. if (receiptAmountDb > payableAmount) {
  173. blanceAmount = receiptAmountDb - payableAmount;
  174. }
  175. cmUser.setAbleUserMoney(cmUser.getAbleUserMoney() - blanceAmount);
  176. cmUser.setUserMoney(cmUser.getUserMoney() - blanceAmount);
  177. cmUserDao.updateMoney(cmUser);
  178. }
  179. } catch (Exception e) {
  180. addMessage(redirectAttributes, "数据异常,撤销收款失败");
  181. logger.info(e.getMessage());
  182. e.printStackTrace();
  183. }
  184. return "redirect:" + Global.getAdminPath() + "/order/cmDiscernReceipt/detail?repage&id=" + cmDiscernReceipt.getId();
  185. }
  186. //--------------------------------------------------------------
  187. /**
  188. * 导出订单信息
  189. *
  190. * @param cmDiscernReceipt
  191. * @return
  192. */
  193. @RequiresPermissions("order:cmDiscernReceipt:edit")
  194. @RequestMapping(value = "export")
  195. public void export(CmDiscernReceipt cmDiscernReceipt, RedirectAttributes redirectAttributes, HttpServletRequest request, HttpServletResponse response) {
  196. //获取订单数据
  197. String fileName = "收款列表.xls";
  198. String template = Global.getConfig("export.template");
  199. String templateFileName = template + "/discern_receipt.xls";
  200. try {
  201. Map data = new HashMap<String, Object>();
  202. List<CmDiscernReceipt> list = cmDiscernReceiptService.export(new Page<CmDiscernReceipt>(request, response), cmDiscernReceipt);
  203. data.put("list", list);
  204. data.put("orderUtil", new OrderUtil());
  205. new ExcelUtil().createExcel(templateFileName, data, fileName, response);
  206. } catch (Exception e) {
  207. addMessage(redirectAttributes, "收款列表导出失败!" + e.getMessage());
  208. logger.info(e.getMessage());
  209. e.printStackTrace();
  210. }
  211. }
  212. @RequestMapping(value = "exportTest")
  213. public void exportTest(String startTime, String endTime, CmDiscernReceipt cmDiscernReceipt, RedirectAttributes redirectAttributes, HttpServletRequest request, HttpServletResponse response) {
  214. //获取订单数据
  215. String fileName = "收款账单.xls";
  216. String template = Global.getConfig("export.template");
  217. String templateFileName = template + "/discern_receipt_export.xls";
  218. List<String> listSheetNames = new ArrayList<String>();
  219. ArrayList<List> objects = new ArrayList<List>();
  220. //收款时间筛查
  221. if (startTime == null) {
  222. cmDiscernReceipt.setStartTime("2019-10-01 00:00:00");
  223. } else {
  224. cmDiscernReceipt.setStartTime(startTime);
  225. }
  226. if (endTime == null) {
  227. cmDiscernReceipt.setEndTime("2019-10-31 23:59:59");
  228. } else {
  229. cmDiscernReceipt.setEndTime(endTime);
  230. }
  231. try {
  232. List<CmMainReceiptExport> list = cmDiscernReceiptService.exportTest(cmDiscernReceipt);
  233. for (CmMainReceiptExport bean : list) {
  234. String productNames = bean.getProductNames();
  235. String[] productNameArr = productNames.split(",");
  236. for (int i = 0; i < productNameArr.length; i++) {
  237. productNameArr[i] = (i + 1) + "." + productNameArr[i] + "\r\n";
  238. productNames = i==0?productNameArr[i]:productNames + productNameArr[i];
  239. }
  240. bean.setProductNames(productNames);
  241. bean.setPayType(OrderUtil.getPayTypeStr(bean.getPayType()));
  242. }
  243. //返佣数据
  244. List<CmMainReceiptExport> list1 = cmDiscernReceiptService.exportRebate(cmDiscernReceipt);
  245. for (CmMainReceiptExport export : list1) {
  246. export.setPayType(OrderUtil.getPayTypeStr(export.getPayType()));
  247. export.setOrderID(export.getOrderID() + ("5".equals(export.getReceiptType())?"(供应商退款订单)":"(返佣订单)"));
  248. list.add(export);
  249. }
  250. //非订单款
  251. List<CmMainReceiptExport> list2 = cmDiscernReceiptService.theOrder(cmDiscernReceipt);
  252. for (CmMainReceiptExport export : list2) {
  253. export.setOrderID("非订单");
  254. export.setUserName("");
  255. export.setPayType(OrderUtil.getPayTypeStr(export.getPayType()));
  256. list.add(export);
  257. }
  258. //退款记录表
  259. List<CmReturnedPurchase> purchases = cmDiscernReceiptService.exportRefund(cmDiscernReceipt);
  260. for (CmReturnedPurchase purchase : purchases) {
  261. String refundWay = "";
  262. if (purchase.getReturnedWay().equals("1")) {
  263. if (purchase.getRefundBalanceFee() != null && purchase.getRefundBalanceFee() != 0) {
  264. refundWay += "账户余额";
  265. }
  266. if (purchase.getRefundOnlineFee() != null && purchase.getRefundOnlineFee() != 0) {
  267. refundWay += ";线上退回";
  268. }
  269. if (purchase.getRefundOfflineFee() != null && purchase.getRefundOfflineFee() != 0) {
  270. refundWay += ";线下转账";
  271. }
  272. }
  273. purchase.setReturnedWay(refundWay);
  274. String payType = OrderUtil.getPayType(purchase.getPayType());
  275. purchase.setPayType(payType);
  276. }
  277. // 收款进度 1待收 2部分收 3全收
  278. cmDiscernReceipt.setReceiptProgress("2");
  279. List<CmReceiptExportData> ListExportData1 = getListExportData(cmDiscernReceipt);
  280. cmDiscernReceipt.setReceiptProgress("3");
  281. List<CmReceiptExportData> ListExportData2 = getListExportData(cmDiscernReceipt);
  282. objects.add(list);
  283. /*objects.add(ListExportData1);
  284. objects.add(ListExportData2);
  285. objects.add(getListOrderPayment(cmDiscernReceipt));
  286. objects.add(purchases);*/
  287. listSheetNames.add("收款表");
  288. /*listSheetNames.add("部分收款");
  289. listSheetNames.add("已收款");
  290. listSheetNames.add("返佣订单");
  291. listSheetNames.add("退款记录表");*/
  292. new ExcelUtil().createMultipleSheetsExcel(templateFileName, fileName, listSheetNames, objects, response);
  293. } catch (Exception e) {
  294. addMessage(redirectAttributes, "收款列表导出失败!" + e.getMessage());
  295. logger.info(e.getMessage());
  296. e.printStackTrace();
  297. }
  298. }
  299. @RequestMapping(value = "exportTest1")
  300. public void exportTest1(String startTime, String endTime, CmDiscernReceipt cmDiscernReceipt, RedirectAttributes redirectAttributes, HttpServletRequest request, HttpServletResponse response) {
  301. //获取订单数据
  302. String fileName = "付款账单.xls";
  303. String template = Global.getConfig("export.template");
  304. String templateFileName = template + "/discern_receipt_export1.xls";
  305. List<String> listSheetNames = new ArrayList<String>();
  306. ArrayList<List> objects = new ArrayList<List>();
  307. if (startTime == null) {
  308. cmDiscernReceipt.setStartTime("2019-10-01 00:00:00");
  309. } else {
  310. cmDiscernReceipt.setStartTime(startTime);
  311. }
  312. if (endTime == null) {
  313. cmDiscernReceipt.setEndTime("2019-10-31 23:59:59");
  314. } else {
  315. cmDiscernReceipt.setEndTime(endTime);
  316. }
  317. try {
  318. List<CmMainReceiptExport> list = cmDiscernReceiptService.exportPay(cmDiscernReceipt);
  319. for (CmMainReceiptExport bean : list) {
  320. bean.setPayType(OrderUtil.getPayType(bean.getPayType()));
  321. }
  322. cmDiscernReceipt.setReceiptProgress("2");
  323. List<CmReceiptExportData> ListExportData1 = getListExportPayData(cmDiscernReceipt);
  324. cmDiscernReceipt.setReceiptProgress("3");
  325. List<CmReceiptExportData> ListExportData2 = getListExportPayData(cmDiscernReceipt);
  326. objects.add(list);
  327. objects.add(ListExportData1);
  328. objects.add(ListExportData2);
  329. listSheetNames.add("付款表");
  330. listSheetNames.add("部分付款");
  331. listSheetNames.add("已付款");
  332. new ExcelUtil().createMultipleSheetsExcel(templateFileName, fileName, listSheetNames, objects, response);
  333. } catch (Exception e) {
  334. addMessage(redirectAttributes, "付款列表导出失败!" + e.getMessage());
  335. logger.info(e.getMessage());
  336. e.printStackTrace();
  337. }
  338. }
  339. @RequestMapping(value = "exportTest2")
  340. public void exportTest2(String startTime, String endTime, CmDiscernReceipt cmDiscernReceipt, RedirectAttributes redirectAttributes, HttpServletResponse response) {
  341. //获取订单数据
  342. String fileName = "订单列表账单.xls";
  343. String template = Global.getConfig("export.template");
  344. String templateFileName = template + "/discern_receipt_export2.xls";
  345. List<String> listSheetNames = new ArrayList<String>();
  346. ArrayList<List> objects = new ArrayList<List>();
  347. if (startTime == null) {
  348. cmDiscernReceipt.setStartTime("2019-10-01 00:00:00");
  349. } else {
  350. cmDiscernReceipt.setStartTime(startTime);
  351. }
  352. if (endTime == null) {
  353. cmDiscernReceipt.setEndTime("2019-10-31 23:59:59");
  354. } else {
  355. cmDiscernReceipt.setEndTime(endTime);
  356. }
  357. try {
  358. List<CmReceiptExportData> listOrderDate = getListOrderDate(cmDiscernReceipt);
  359. objects.add(listOrderDate);
  360. objects.add(getListOrder(cmDiscernReceipt));
  361. listSheetNames.add("普通订单");
  362. listSheetNames.add("返佣订单");
  363. new ExcelUtil().createMultipleSheetsExcel(templateFileName, fileName, listSheetNames, objects, response);
  364. } catch (Exception e) {
  365. addMessage(redirectAttributes, "付款列表导出失败!" + e.getMessage());
  366. logger.info(e.getMessage());
  367. e.printStackTrace();
  368. }
  369. }
  370. @RequestMapping(value = "exportTest3")
  371. public void exportTest3(String startTime, String endTime, CmDiscernReceipt cmDiscernReceipt, RedirectAttributes redirectAttributes, HttpServletResponse response) {
  372. if (startTime == null) {
  373. cmDiscernReceipt.setStartTime("2019-10-01 00:00:00");
  374. } else {
  375. cmDiscernReceipt.setStartTime(startTime);
  376. }
  377. if (endTime == null) {
  378. cmDiscernReceipt.setEndTime("2019-10-31 23:59:59");
  379. } else {
  380. cmDiscernReceipt.setEndTime(endTime);
  381. }
  382. try {
  383. List<CmReceiptExportData> ListExportData = getListExportData2(cmDiscernReceipt);
  384. //非订单款
  385. List<CmMainReceiptExport> list = cmDiscernReceiptService.theOrder(cmDiscernReceipt);
  386. if (list != null && list.size() > 0) {
  387. CmReceiptExportData receiptExportData = new CmReceiptExportData();
  388. List<CmReceiptExport> exportDataList = new ArrayList<>();
  389. for (CmMainReceiptExport export : list) {
  390. CmReceiptExport receiptExport = new CmReceiptExport();
  391. receiptExport.setOrderID("非订单");
  392. receiptExport.setReceiptDate(export.getReceiptDate());
  393. receiptExport.setReceiptedRecord(OrderUtil.getPayTypeStr(export.getPayType()));
  394. receiptExport.setReceiptedAmount(export.getAssociateAmount().toString());
  395. receiptExport.setReceiptedAmountRemark("非订单款");
  396. receiptExport.setCommission(export.getAssociateAmount());
  397. exportDataList.add(receiptExport);
  398. }
  399. receiptExportData.setList(exportDataList);
  400. ListExportData.add(receiptExportData);
  401. }
  402. excel(response, ListExportData);
  403. } catch (Exception e) {
  404. addMessage(redirectAttributes, "收款账单导出失败!" + e.getMessage());
  405. logger.info(e.getMessage());
  406. e.printStackTrace();
  407. }
  408. }
  409. /**
  410. * 返佣订单记录,按收款时间
  411. *
  412. * @param cmDiscernReceipt
  413. * @return
  414. */
  415. private List<CmReceiptExportData> getListOrderPayment(CmDiscernReceipt cmDiscernReceipt) {
  416. List<CmReceiptExportData> data = new ArrayList<CmReceiptExportData>();
  417. List<CmMainReceiptExport> listReceipted = cmDiscernReceiptService.exportPayment(cmDiscernReceipt);
  418. data = format(data, listReceipted);
  419. return data;
  420. }
  421. /**
  422. * 返佣订单记录,按订单时间
  423. *
  424. * @param cmDiscernReceipt
  425. * @return
  426. */
  427. private List<CmReceiptExportData> getListOrder(CmDiscernReceipt cmDiscernReceipt) {
  428. List<CmReceiptExportData> data = new ArrayList<CmReceiptExportData>();
  429. List<CmMainReceiptExport> listReceipted = cmDiscernReceiptService.getListOrder(cmDiscernReceipt);
  430. data = format(data, listReceipted);
  431. return data;
  432. }
  433. /**
  434. * 获取普通订单记录
  435. *
  436. * @param cmDiscernReceipt
  437. * @return
  438. */
  439. private List<CmReceiptExportData> getListOrderDate(CmDiscernReceipt cmDiscernReceipt) {
  440. List<CmReceiptExportData> data = new ArrayList<CmReceiptExportData>();
  441. List<CmMainReceiptExport> listReceipted = cmDiscernReceiptService.exportOrderDate(cmDiscernReceipt);
  442. data = format(data, listReceipted);
  443. return data;
  444. }
  445. /**
  446. * @Author ye.qin
  447. * @Description //TODO 获取付款记录
  448. * @Date 2019\8\8 0008 11:26
  449. * @Param
  450. */
  451. private List<CmReceiptExportData> getListExportPayData(CmDiscernReceipt cmDiscernReceipt) {
  452. List<CmReceiptExportData> data = new ArrayList<CmReceiptExportData>();
  453. List<CmMainReceiptExport> listReceipted = cmDiscernReceiptService.exportPayData(cmDiscernReceipt);
  454. data = formatData(data, listReceipted);
  455. return data;
  456. }
  457. /**
  458. * @Author ye.qin
  459. * @Description //TODO 获取收款记录
  460. * @Date 2019\8\8 0008 11:26
  461. * @Param
  462. */
  463. private List<CmReceiptExportData> getListExportData(CmDiscernReceipt cmDiscernReceipt) {
  464. List<CmReceiptExportData> data = new ArrayList<CmReceiptExportData>();
  465. List<CmMainReceiptExport> listReceipted = cmDiscernReceiptService.exportReceiptPay(cmDiscernReceipt);
  466. if (cmDiscernReceipt.getReceiptProgress().equals("2")) {
  467. //只使用余额支付的记录
  468. List<CmMainReceiptExport> list1 = cmDiscernReceiptService.exportOnlyBalancePay(cmDiscernReceipt);
  469. if (list1 != null) listReceipted.addAll(list1);
  470. }
  471. data = formatData(data, listReceipted);
  472. return data;
  473. }
  474. /**
  475. * 获取收款记录2
  476. *
  477. * @param cmDiscernReceipt
  478. * @return
  479. */
  480. private List<CmReceiptExportData> getListExportData2(CmDiscernReceipt cmDiscernReceipt) {
  481. List<CmReceiptExportData> data = new ArrayList<CmReceiptExportData>();
  482. List<CmMainReceiptExport> listReceipted = cmDiscernReceiptService.exportReceiptPay(cmDiscernReceipt);
  483. cmDiscernReceipt.setReceiptProgress("2");
  484. //只使用余额支付的记录
  485. List<CmMainReceiptExport> list1 = cmDiscernReceiptService.exportOnlyBalancePay(cmDiscernReceipt);
  486. //返佣记录
  487. List<CmMainReceiptExport> list2 = cmDiscernReceiptService.exportPayment(cmDiscernReceipt);
  488. if (list1 != null) listReceipted.addAll(list1);
  489. if (list2 != null) listReceipted.addAll(list2);
  490. data = format2(data, listReceipted);
  491. return data;
  492. }
  493. private List<CmReceiptExportData> formatData(List<CmReceiptExportData> data, List<CmMainReceiptExport> listReceipted) {
  494. for (CmMainReceiptExport bean : listReceipted) {
  495. CmReceiptExportData currentData = new CmReceiptExportData();
  496. NewOrder order = newOrderService.get(bean.getOrderID());
  497. List<CmReceiptExport> listShopOrder = cmDiscernReceiptService.findShopOrder(bean.getOrderID());
  498. Double payProductFeeTotal = 0d;//用于第三行商品金额汇总统计(总)
  499. Double payTaxFeeTotal = 0d;//应付总税费(总)
  500. Double payFreightTotal = 0d;//应付总运费(总)
  501. Double payOtherTotal = 0d;//应付第三方(总)
  502. Double payAmountTotal = 0d;//应付总金额(总)
  503. Double payedAmountTotal = 0d;//已付总金额(总)
  504. Double commissionTotal = 0d;//采美佣金(总)
  505. String userName = "";//用户名称
  506. StringBuilder shopInfos = new StringBuilder();//供应商名称(汇总并添加应付金额)
  507. for (CmReceiptExport bean1 : listShopOrder) {
  508. userName = bean1.getUserName();
  509. //汇总商品供应商名称以及应付信息
  510. String supplierInfo = bean1.getSupplierName() + "(" + bean1.getPayAmount() + ")";
  511. shopInfos.append(supplierInfo);
  512. shopInfos.append("\r\n");
  513. List<NewOrderProduct> listProduct = newOrderProductService.findListByShopOrderID(Integer.parseInt(bean1.getShopOrderID()));
  514. Double payProductFee = 0d;
  515. Double productFee = 0d;
  516. StringBuilder productMsg = new StringBuilder();
  517. Integer flag = 1;
  518. for (NewOrderProduct bean2 : listProduct) {
  519. if (999 != bean2.getProductID()) {
  520. payProductFee += bean2.getNewCostPrice() * (bean2.getNum() + bean2.getPresentNum());
  521. productMsg.append(flag + "." + bean2.getName() + " 数量(赠品):" + bean2.getNum() + "(" + bean2.getPresentNum() + ")" + ",售价:" + bean2.getDiscountPrice() + ",成本:" + bean2.getNewCostPrice() + ",应收税费:" + bean2.getAddedValueTax() + ",应付税费:" + bean2.getShouldPayTotalTax() / bean2.getNum() + ";");
  522. flag++;
  523. productFee += bean2.getDiscountPrice() * bean2.getNum();
  524. }
  525. }
  526. bean1.setProductMsg(productMsg.toString());
  527. bean1.setPayProductFee(payProductFee); //设置应付商品费
  528. payProductFeeTotal = payProductFeeTotal + payProductFee;//设置应付总商品费
  529. payTaxFeeTotal = payTaxFeeTotal + bean1.getPayTaxFee();
  530. payFreightTotal = payFreightTotal + bean1.getPayFreight();
  531. payOtherTotal = payOtherTotal + bean1.getPayOther();
  532. bean1.setGroup("订单");
  533. bean1.setProductFee(productFee);
  534. if (bean1.getShopID().equals("998")) {
  535. bean1.setCommission(0d);
  536. bean1.setPayedAmount(0d);
  537. if (bean1.getPayStatus().equals("3")) {
  538. bean1.setPayedAmount(bean1.getPayAmount());
  539. }
  540. bean1.setReceiptedAmount("0");
  541. bean1.setPayProductFee(bean1.getProductFee());
  542. bean1.setPayAmount(bean1.getPayProductFee());
  543. } else {
  544. bean1.setCommission(bean1.getReceiptAmount() - bean1.getPayOther() - bean1.getPayAmount());
  545. bean1.setReceiptedAmount("0");
  546. HashMap data1 = new HashMap();
  547. Double payedAmount = 0d;//统计子订单所有付款金额
  548. //获取子订单一下的,按照每个月每个账号的一个收款金额显示
  549. List<CmPayShopRecord> listPayRecord = newShopOrderService.getPayedRecordsGroupBy(bean1.getShopOrderID());
  550. StringBuilder payRecord = new StringBuilder();
  551. for (CmPayShopRecord bean3 : listPayRecord) {
  552. payRecord.append(bean3.getPayTime() + "付:" + OrderUtil.getPayType(bean3.getPayType()) + "(¥" + bean3.getPayAmount() + ")");
  553. payRecord.append("\r\n");
  554. payedAmount += bean3.getPayAmount();
  555. }
  556. bean1.setPayRecord(payRecord.toString());
  557. bean1.setPayedAmount(payedAmount);
  558. }
  559. bean1.setArrearage(bean1.getPayAmount() - bean1.getPayedAmount());//增加未付款
  560. DecimalFormat df = new DecimalFormat("#.00");//保留两位小数
  561. bean1.setCommission(Double.valueOf(df.format(bean1.getCommission())));
  562. payAmountTotal = payAmountTotal + bean1.getPayAmount();
  563. payedAmountTotal = payedAmountTotal + bean1.getPayedAmount();
  564. commissionTotal = commissionTotal + bean1.getCommission();
  565. }
  566. //判断是否存在经理折扣,存在就给集合手动添加数据
  567. if (order.getDiscountFee() != null && order.getDiscountFee() > 0) {
  568. CmReceiptExport discountBean = new CmReceiptExport();
  569. discountBean.setOrderID(order.getOrderID().toString());
  570. discountBean.setGroup("经理折扣");
  571. discountBean.setProductMsg("经理折扣:" + order.getDiscountFee());
  572. discountBean.setReceiptAmount(-order.getDiscountFee());
  573. discountBean.setReceiptedAmount("-" + order.getDiscountFee().toString());
  574. discountBean.setCommission(-order.getDiscountFee());
  575. listShopOrder.add(discountBean);
  576. }
  577. /**汇总数据--start*/
  578. //集合手动添加汇总数据
  579. //2、汇总信息的详细收款等
  580. String recepitRecord = "";
  581. List<CmReceiptOrderRelation> listRelationGroupBy = cmReceiptOrderRelationService.findByOrderIDGroupBy(order.getOrderID().toString());
  582. CmReceiptExport totalBean = new CmReceiptExport();
  583. //1、待合并的汇总信息
  584. totalBean.setGroup("汇总");
  585. //判断是否是返佣订单
  586. List<Integer> l = new ArrayList<>();
  587. l.add(order.getOrderID());
  588. List<Integer> orderIds = cmDiscernReceiptDao.findRebateOrderID(l);
  589. if (null != orderIds && orderIds.contains(order.getOrderID()))
  590. totalBean.setOrderID(order.getOrderID().toString() + "(返佣订单)");
  591. else
  592. totalBean.setOrderID(order.getOrderID().toString());
  593. //totalBean.setProductMsg("汇总");
  594. //1.1应收款
  595. totalBean.setReceiptAmount(order.getPayTotalFee() + order.getDiscountFee());
  596. List<CmReceiptOrderRelation> listRelation = cmReceiptOrderRelationService.findByOrderID(order.getOrderID().toString());
  597. Double totalAmount = 0d;
  598. String confirmType = "";
  599. Boolean isFanyong = false;
  600. for (CmReceiptOrderRelation bean3 : listRelation) {
  601. bean3.setReceiptDate(DateUtils.format(DateUtils.parse(bean3.getReceiptDate()), "yyyy-MM"));
  602. totalAmount += Double.parseDouble(bean3.getAssociateAmount());
  603. if (bean3.getConfirmType().equals("1")) {
  604. confirmType = "小额抹平确认";
  605. } else if (bean3.getConfirmType().equals("2")) {
  606. confirmType = "大额抹平确认";
  607. } else if (bean3.getConfirmType().equals("3")) {
  608. confirmType = "大额退款余额";
  609. }
  610. if (bean3.getRelationType().equals("1")) {
  611. isFanyong = true;
  612. }
  613. }
  614. StringBuilder msg = new StringBuilder();
  615. if (confirmType != "") {
  616. msg.append("(" + confirmType + ")");
  617. }
  618. if (order.getBalancePayFee() != null && order.getBalancePayFee() > 0) {
  619. msg.append("(余额抵扣:¥" + order.getBalancePayFee() + ")");
  620. }
  621. //1.2已收款
  622. totalBean.setReceiptedAmount(totalAmount + msg.toString());
  623. //1.3客户名称
  624. totalBean.setUserName(userName);
  625. //1.4供应商
  626. totalBean.setSupplierName(shopInfos.toString());
  627. //1.5应付商品费
  628. totalBean.setPayProductFee(payProductFeeTotal);
  629. //1.6应付税费
  630. totalBean.setPayTaxFee(payTaxFeeTotal);
  631. //1.7应付运费
  632. totalBean.setPayFreight(payFreightTotal);
  633. //1.8应付第三方
  634. totalBean.setPayOther(payOtherTotal);
  635. //1.9应付款
  636. totalBean.setPayAmount(payAmountTotal);
  637. //1.10已付款
  638. totalBean.setPayedAmount(payedAmountTotal);
  639. //1.11采美佣金
  640. totalBean.setCommission(commissionTotal);
  641. totalBean.setArrearage(payAmountTotal - payedAmountTotal);//增加未付款
  642. //查询主订单下面的所有子订单ID串
  643. NewOrder newOrder = newOrderDao.get(order.getOrderID().toString());
  644. String shopOrderIDs = newOrder.getShopOrderIDs();
  645. String[] split = null;
  646. StringBuilder payRecord = new StringBuilder();
  647. if (null != shopOrderIDs && shopOrderIDs.contains(",")) {
  648. split = shopOrderIDs.split(",");
  649. } else {
  650. split = new String[1];
  651. split[0] = shopOrderIDs;
  652. }
  653. List<CmPayShopRecord> byOrderIDsGroupBy = cmPayShopRecordService.findByOrderIDsGroupBy(split);
  654. for (CmPayShopRecord cps : byOrderIDsGroupBy) {
  655. payRecord.append(OrderUtil.getPayType(cps.getPayType()) + "(¥" + cps.getPayAmount() + ")");
  656. payRecord.append("\r\n");
  657. }
  658. //1.12付款账号
  659. totalBean.setPayRecord(payRecord.toString());
  660. for (CmReceiptOrderRelation cror : listRelationGroupBy) {
  661. recepitRecord = cror.getReceiptDate() + "收:" + cror.getPayType() + "(¥" + cror.getAssociateAmount() + ")";
  662. }
  663. //2.1设置收款账号
  664. totalBean.setReceiptedRecord(recepitRecord);
  665. recepitRecord = "";
  666. listShopOrder.add(totalBean);
  667. //if(isFanyong)totalBean.setSupplierName("返佣订单");
  668. /**汇总数据--end*/
  669. currentData.setList(listShopOrder);
  670. data.add(currentData);
  671. }
  672. return data;
  673. }
  674. private List<CmReceiptExportData> format(List<CmReceiptExportData> data, List<CmMainReceiptExport> listReceipted) {
  675. for (CmMainReceiptExport bean : listReceipted) {
  676. CmReceiptExportData currentData = new CmReceiptExportData();
  677. NewOrder order = newOrderService.get(bean.getOrderID());
  678. List<CmReceiptExport> listShopOrder = cmDiscernReceiptService.findShopOrder(bean.getOrderID());
  679. Double payProductFeeTotal = 0d;//用于第三行商品金额汇总统计(总)
  680. Double payTaxFeeTotal = 0d;//应付总税费(总)
  681. Double payFreightTotal = 0d;//应付总运费(总)
  682. Double payOtherTotal = 0d;//应付第三方(总)
  683. Double payAmountTotal = 0d;//应付总金额(总)
  684. Double payedAmountTotal = 0d;//已付总金额(总)
  685. Double commissionTotal = 0d;//采美佣金(总)
  686. String userName = "";//用户名称
  687. StringBuilder shopInfos = new StringBuilder();//供应商名称(汇总并添加应付金额)
  688. for (CmReceiptExport bean1 : listShopOrder) {
  689. userName = bean1.getUserName();
  690. //汇总商品供应商名称以及应付信息
  691. String supplierInfo = bean1.getSupplierName() + "(" + bean1.getPayAmount() + ")";
  692. shopInfos.append(supplierInfo);
  693. shopInfos.append("\r\n");
  694. List<NewOrderProduct> listProduct = newOrderProductService.findListByShopOrderID(Integer.parseInt(bean1.getShopOrderID()));
  695. Double payProductFee = 0d;
  696. Double productFee = 0d;
  697. StringBuilder productMsg = new StringBuilder();
  698. Integer flag = 1;
  699. for (NewOrderProduct bean2 : listProduct) {
  700. if (999 != bean2.getProductID()) {
  701. payProductFee += bean2.getNewCostPrice() * (bean2.getNum() + bean2.getPresentNum());
  702. productMsg.append(flag + "." + bean2.getName() + " 数量(赠品):" + bean2.getNum() + "(" + bean2.getPresentNum() + ")" + ",售价:" + bean2.getDiscountPrice() + ",成本:" + bean2.getNewCostPrice() + ",应收税费:" + bean2.getAddedValueTax() + ",应付税费:" + bean2.getShouldPayTotalTax() / bean2.getNum() + ";");
  703. flag++;
  704. productFee += bean2.getDiscountPrice() * bean2.getNum();
  705. }
  706. }
  707. bean1.setProductMsg(productMsg.toString());
  708. bean1.setPayProductFee(payProductFee); //设置应付商品费
  709. payProductFeeTotal = payProductFeeTotal + payProductFee;//设置应付总商品费
  710. payTaxFeeTotal = payTaxFeeTotal + bean1.getPayTaxFee();
  711. payFreightTotal = payFreightTotal + bean1.getPayFreight();
  712. payOtherTotal = payOtherTotal + bean1.getPayOther();
  713. bean1.setGroup("订单");
  714. bean1.setProductFee(productFee);
  715. if (bean1.getShopID().equals("998")) {
  716. bean1.setCommission(0d);
  717. bean1.setPayedAmount(0d);
  718. if (bean1.getPayStatus().equals("3")) {
  719. bean1.setPayedAmount(bean1.getPayAmount());
  720. }
  721. bean1.setReceiptedAmount("0");
  722. bean1.setPayProductFee(bean1.getProductFee());
  723. bean1.setPayAmount(bean1.getPayProductFee());
  724. } else {
  725. bean1.setCommission(bean1.getReceiptAmount() - bean1.getPayOther() - bean1.getPayAmount());
  726. bean1.setReceiptedAmount("0");
  727. HashMap data1 = new HashMap();
  728. Double payedAmount = 0d;//统计子订单所有付款金额
  729. //获取子订单一下的,按照每个月每个账号的一个收款金额显示
  730. List<CmPayShopRecord> listPayRecord = newShopOrderService.getPayedRecordsGroupBy(bean1.getShopOrderID());
  731. StringBuilder payRecord = new StringBuilder();
  732. for (CmPayShopRecord bean3 : listPayRecord) {
  733. payRecord.append(bean3.getPayTime() + "付:" + OrderUtil.getPayType(bean3.getPayType()) + "(¥" + bean3.getPayAmount() + ")");
  734. payRecord.append("\r\n");
  735. payedAmount += bean3.getPayAmount();
  736. }
  737. bean1.setPayRecord(payRecord.toString());
  738. bean1.setPayedAmount(payedAmount);
  739. }
  740. bean1.setArrearage(bean1.getPayAmount() - bean1.getPayedAmount());//增加未付款
  741. DecimalFormat df = new DecimalFormat("#.00");//保留两位小数
  742. bean1.setCommission(Double.valueOf(df.format(bean1.getCommission())));
  743. if (bean.getRelationType() != null) {//判断是否是返佣订单
  744. bean1.setPayAmount(bean1.getPayProductFee() + bean1.getPayTaxFee() + bean1.getPayFreight() + bean1.getPayOther());
  745. bean1.setPayedAmount(bean1.getPayAmount());//已付款
  746. bean1.setCommission(Double.valueOf(bean.getReceiptAmount()));//采美佣金
  747. bean1.setArrearage(bean1.getPayedAmount() - bean1.getPayAmount());//未付款
  748. }
  749. payAmountTotal = payAmountTotal + bean1.getPayAmount();
  750. payedAmountTotal = payedAmountTotal + bean1.getPayedAmount();
  751. commissionTotal = commissionTotal + bean1.getCommission();
  752. }
  753. //判断是否存在经理折扣,存在就给集合手动添加数据
  754. if (order.getDiscountFee() != null && order.getDiscountFee() > 0) {
  755. CmReceiptExport discountBean = new CmReceiptExport();
  756. discountBean.setOrderID(order.getOrderID().toString());
  757. discountBean.setGroup("经理折扣");
  758. discountBean.setProductMsg("经理折扣:" + order.getDiscountFee());
  759. discountBean.setReceiptAmount(-order.getDiscountFee());
  760. discountBean.setReceiptedAmount("-" + order.getDiscountFee().toString());
  761. discountBean.setCommission(-order.getDiscountFee());
  762. listShopOrder.add(discountBean);
  763. }
  764. /**汇总数据--start*/
  765. //集合手动添加汇总数据
  766. //2、汇总信息的详细收款等
  767. String recepitRecord = "";
  768. CmReceiptExport totalBean = new CmReceiptExport();
  769. //1、待合并的汇总信息
  770. totalBean.setGroup("汇总");
  771. //判断是否是返佣订单
  772. List<Integer> l = new ArrayList<>();
  773. l.add(order.getOrderID());
  774. List<Integer> orderIds = cmDiscernReceiptDao.findRebateOrderID(l);
  775. if (null != orderIds && orderIds.contains(order.getOrderID()))
  776. totalBean.setOrderID(order.getOrderID().toString() + "(返佣订单)");
  777. else
  778. totalBean.setOrderID(order.getOrderID().toString());
  779. //totalBean.setProductMsg("汇总");
  780. //1.1应收款
  781. totalBean.setReceiptAmount(order.getPayTotalFee() + order.getDiscountFee());
  782. List<CmReceiptOrderRelation> listRelation = cmReceiptOrderRelationService.findByOrderID(order.getOrderID().toString());
  783. Double totalAmount = 0d;
  784. String confirmType = "";
  785. Boolean isFanyong = false;
  786. for (CmReceiptOrderRelation bean3 : listRelation) {
  787. bean3.setReceiptDate(DateUtils.format(DateUtils.parse(bean3.getReceiptDate()), "yyyy-MM"));
  788. totalAmount += Double.parseDouble(bean3.getAssociateAmount());
  789. if (bean3.getConfirmType().equals("1")) {
  790. confirmType = "小额抹平确认";
  791. } else if (bean3.getConfirmType().equals("2")) {
  792. confirmType = "大额抹平确认";
  793. } else if (bean3.getConfirmType().equals("3")) {
  794. confirmType = "大额退款余额";
  795. }
  796. if (bean3.getRelationType().equals("1")) {
  797. isFanyong = true;
  798. }
  799. }
  800. StringBuilder msg = new StringBuilder();
  801. if (confirmType != "") {
  802. msg.append("(" + confirmType + ")");
  803. }
  804. if (order.getBalancePayFee() != null && order.getBalancePayFee() > 0) {
  805. msg.append("(余额抵扣:¥" + order.getBalancePayFee() + ")");
  806. }
  807. //1.2已收款
  808. totalBean.setReceiptedAmount(totalAmount + msg.toString());
  809. //1.3客户名称
  810. totalBean.setUserName(userName);
  811. //1.4供应商
  812. totalBean.setSupplierName(shopInfos.toString());
  813. //1.5应付商品费
  814. totalBean.setPayProductFee(payProductFeeTotal);
  815. //1.6应付税费
  816. totalBean.setPayTaxFee(payTaxFeeTotal);
  817. //1.7应付运费
  818. totalBean.setPayFreight(payFreightTotal);
  819. //1.8应付第三方
  820. totalBean.setPayOther(payOtherTotal);
  821. //1.9应付款
  822. totalBean.setPayAmount(payAmountTotal);
  823. //1.10已付款
  824. totalBean.setPayedAmount(payedAmountTotal);
  825. //1.11采美佣金
  826. totalBean.setCommission(commissionTotal);
  827. totalBean.setStatus(OrderUtil.getStatus(bean.getStatus()));
  828. totalBean.setArrearage(payAmountTotal - payedAmountTotal);//增加未付款
  829. if (bean.getRelationType() != null) {//判断是否是返佣订单
  830. totalBean.setReceiptedAmount(bean.getReceiptAmount() + "(返佣款)");
  831. totalBean.setPayedAmount(totalBean.getPayAmount());//已付款
  832. totalBean.setCommission(Double.valueOf(bean.getReceiptAmount()));//采美佣金
  833. totalBean.setArrearage(payAmountTotal - totalBean.getPayAmount());//未付款
  834. }
  835. //查询主订单下面的所有子订单ID串
  836. NewOrder newOrder = newOrderDao.get(order.getOrderID().toString());
  837. String shopOrderIDs = newOrder.getShopOrderIDs();
  838. String[] split = null;
  839. StringBuilder payRecord = new StringBuilder();
  840. if (null != shopOrderIDs && shopOrderIDs.contains(",")) {
  841. split = shopOrderIDs.split(",");
  842. } else {
  843. split = new String[1];
  844. split[0] = shopOrderIDs;
  845. }
  846. List<CmPayShopRecord> byOrderIDsGroupBy = cmPayShopRecordService.findByOrderIDsGroupBy(split);
  847. for (CmPayShopRecord cps : byOrderIDsGroupBy) {
  848. payRecord.append(OrderUtil.getPayType(cps.getPayType()) + "(¥" + cps.getPayAmount() + ")");
  849. payRecord.append("\r\n");
  850. }
  851. //1.12付款账号
  852. totalBean.setPayRecord(payRecord.toString());
  853. List<CmReceiptOrderRelation> listRelationGroupBy = cmReceiptOrderRelationService.findByOrderIDGroupBy(order.getOrderID().toString());
  854. for (CmReceiptOrderRelation cror : listRelationGroupBy) {
  855. recepitRecord = cror.getReceiptDate() + "收:" + cror.getPayType() + "(¥" + cror.getAssociateAmount() + ")";
  856. }
  857. //2.1设置收款账号
  858. totalBean.setReceiptedRecord(recepitRecord);
  859. if (bean.getRelationType() != null) {//判断是否是返佣订单
  860. List<CmReceiptOrderRelation> listRelationGroup = cmReceiptOrderRelationService.findByOrderIDGroup(order.getOrderID().toString());
  861. for (CmReceiptOrderRelation relation : listRelationGroup) {
  862. recepitRecord = relation.getReceiptDate() + "收:" + relation.getPayType() + "(¥" + relation.getAssociateAmount() + ")";
  863. }
  864. //2.1设置收款账号
  865. totalBean.setReceiptedRecord(recepitRecord);
  866. }
  867. recepitRecord = "";
  868. listShopOrder.add(totalBean);
  869. //if(isFanyong)totalBean.setSupplierName("返佣订单");
  870. /**汇总数据--end*/
  871. currentData.setList(listShopOrder);
  872. data.add(currentData);
  873. }
  874. return data;
  875. }
  876. private List<CmReceiptExportData> format2(List<CmReceiptExportData> data, List<CmMainReceiptExport> listReceipted) {
  877. for (CmMainReceiptExport bean : listReceipted) {
  878. CmReceiptExportData currentData = new CmReceiptExportData();
  879. NewOrder order = newOrderService.get(bean.getOrderID());
  880. List<CmReceiptExport> listShopOrderDate = cmDiscernReceiptService.findShopOrder(bean.getOrderID());
  881. List<CmReceiptExport> listShopOrder = new ArrayList<>();
  882. Double payProductFeeTotal = 0d;//用于第三行商品金额汇总统计(总)
  883. Double payTaxFeeTotal = 0d;//应付总税费(总)
  884. Double payFreightTotal = 0d;//应付总运费(总)
  885. Double payOtherTotal = 0d;//应付第三方(总)
  886. Double payAmountTotal = 0d;//应付总金额(总)
  887. Double payedAmountTotal = 0d;//已付总金额(总)
  888. Double commissionTotal = 0d;//采美佣金(总)
  889. Double productFeeTotal = 0d;//应收商品费(总)
  890. Double taxFeeTotal = 0d;//应收税费(总)
  891. Double freightTotal = 0d;//应收运费(总)
  892. String payTime = ""; //付款时间
  893. String userName = "";//用户名称
  894. StringBuilder shopInfos = new StringBuilder();//供应商名称(汇总并添加应付金额)
  895. for (CmReceiptExport bean1 : listShopOrderDate) {
  896. userName = bean1.getUserName();
  897. //汇总商品供应商名称以及应付信息
  898. String supplierInfo = bean1.getSupplierName() + "";
  899. shopInfos.append(supplierInfo);
  900. shopInfos.append("\r\n");
  901. List<NewOrderProduct> listProduct = newOrderProductService.findListByShopOrderID(Integer.parseInt(bean1.getShopOrderID()));
  902. Double payProductFee = 0d;
  903. Double productFee = 0d;
  904. StringBuilder productMsg = new StringBuilder();
  905. Integer flag = 1;
  906. for (NewOrderProduct bean2 : listProduct) {
  907. if (999 != bean2.getProductID()) {
  908. payProductFee += bean2.getNewCostPrice() * (bean2.getNum() + bean2.getPresentNum());
  909. productMsg.append(flag + "." + bean2.getName() + " 数量(赠品):" + bean2.getNum() + "(" + bean2.getPresentNum() + ")" + ",售价:" + bean2.getDiscountPrice() + ",成本:" + bean2.getNewCostPrice() + ",应收税费:" + bean2.getAddedValueTax() + ",应付税费:" + bean2.getShouldPayTotalTax() / bean2.getNum() + ";");
  910. flag++;
  911. productFee += bean2.getDiscountPrice() * bean2.getNum();
  912. }
  913. }
  914. bean1.setProductMsg(productMsg.toString());
  915. bean1.setPayProductFee(payProductFee); //设置应付商品费
  916. payProductFeeTotal = payProductFeeTotal + payProductFee;//设置应付总商品费
  917. payTaxFeeTotal = payTaxFeeTotal + bean1.getPayTaxFee();
  918. payFreightTotal = payFreightTotal + bean1.getPayFreight();
  919. payOtherTotal = payOtherTotal + bean1.getPayOther();
  920. bean1.setGroup("订单");
  921. bean1.setProductFee(productFee);
  922. if (bean1.getShopID().equals("998")) {
  923. bean1.setCommission(0d);
  924. bean1.setPayedAmount(0d);
  925. if (bean1.getPayStatus().equals("3")) {
  926. bean1.setPayedAmount(bean1.getPayAmount());
  927. }
  928. bean1.setReceiptedAmount("0");
  929. bean1.setPayProductFee(bean1.getProductFee());
  930. bean1.setPayAmount(bean1.getPayProductFee());
  931. freightTotal += bean1.getProductAmount();
  932. } else {
  933. bean1.setCommission(bean1.getReceiptAmount() - bean1.getPayOther() - bean1.getPayAmount());
  934. bean1.setReceiptedAmount("0");
  935. HashMap data1 = new HashMap();
  936. Double payedAmount = 0d;//统计子订单所有付款金额
  937. //获取子订单一下的,按照每个月每个账号的一个收款金额显示
  938. List<CmPayShopRecord> listPayRecord = newShopOrderService.getPayedRecordsGroupBy(bean1.getShopOrderID());
  939. StringBuilder payRecord = new StringBuilder();
  940. for (CmPayShopRecord bean3 : listPayRecord) {
  941. payRecord.append(bean3.getPayTime() + "付:" + OrderUtil.getPayType(bean3.getPayType()) + "(¥" + bean3.getPayAmount() + ")");
  942. payRecord.append("\r\n");
  943. payedAmount += bean3.getPayAmount();
  944. payTime = bean3.getPayTime();
  945. }
  946. bean1.setPayRecord(payRecord.toString());
  947. bean1.setPayedAmount(payedAmount);
  948. }
  949. bean1.setArrearage(bean1.getPayAmount() - bean1.getPayedAmount());//增加未付款
  950. DecimalFormat df = new DecimalFormat("#.00");//保留两位小数
  951. bean1.setCommission(Double.valueOf(df.format(bean1.getCommission())));
  952. productFeeTotal += bean1.getProductFee();//计算总的应收商品费
  953. taxFeeTotal += bean1.getTaxFee();//计算总的应收税费
  954. payAmountTotal = payAmountTotal + bean1.getPayAmount();
  955. payedAmountTotal = payedAmountTotal + bean1.getPayedAmount();
  956. commissionTotal = commissionTotal + bean1.getCommission();
  957. }
  958. /**汇总数据--start*/
  959. //集合手动添加汇总数据
  960. List<CmMainReceiptExport> gathering = cmDiscernReceiptService.gathering(order.getOrderID());
  961. if (gathering == null || gathering.size() == 0) {
  962. CmMainReceiptExport cmMainReceiptExport = new CmMainReceiptExport();
  963. cmMainReceiptExport.setPayType("");
  964. cmMainReceiptExport.setReceiptDate("无");
  965. gathering.add(cmMainReceiptExport);
  966. }
  967. for (CmMainReceiptExport receiptExport : gathering) {
  968. //2、汇总信息的详细收款等
  969. String recepitRecord = "";
  970. List<CmReceiptOrderRelation> listRelationGroupBy = cmReceiptOrderRelationService.findByOrderIDGroupBy(order.getOrderID().toString());
  971. CmReceiptExport totalBean = new CmReceiptExport();
  972. //1、待合并的汇总信息
  973. totalBean.setGroup("汇总");
  974. //判断是否是返佣订单
  975. List<Integer> l = new ArrayList<>();
  976. l.add(order.getOrderID());
  977. List<Integer> orderIds = cmDiscernReceiptDao.findRebateOrderID(l);
  978. if (null != orderIds && orderIds.contains(order.getOrderID()))
  979. totalBean.setOrderID(order.getOrderID().toString() + "(返佣订单)");
  980. else
  981. totalBean.setOrderID(order.getOrderID().toString());
  982. //1.1应收款
  983. totalBean.setReceiptAmount(order.getPayTotalFee() + order.getDiscountFee());
  984. List<CmReceiptOrderRelation> listRelation = cmReceiptOrderRelationService.findByOrderID(order.getOrderID().toString());
  985. Double totalAmount = 0d;
  986. String confirmType = "";
  987. Boolean isFanyong = false;
  988. for (CmReceiptOrderRelation bean3 : listRelation) {
  989. bean3.setReceiptDate(DateUtils.format(DateUtils.parse(bean3.getReceiptDate()), "yyyy-MM"));
  990. totalAmount += Double.parseDouble(bean3.getAssociateAmount());
  991. if (bean3.getConfirmType().equals("1")) {
  992. confirmType = "小额抹平确认";
  993. } else if (bean3.getConfirmType().equals("2")) {
  994. confirmType = "大额抹平确认";
  995. } else if (bean3.getConfirmType().equals("3")) {
  996. confirmType = "大额退款余额";
  997. }
  998. if (bean3.getRelationType().equals("1")) {
  999. isFanyong = true;
  1000. }
  1001. }
  1002. StringBuilder msg = new StringBuilder();
  1003. if (confirmType != "") {
  1004. msg.append("(" + confirmType + ")");
  1005. }
  1006. if (order.getBalancePayFee() != null && order.getBalancePayFee() > 0) {
  1007. msg.append("(余额抵扣:¥" + order.getBalancePayFee() + ")");
  1008. }
  1009. //1.2已收款
  1010. totalBean.setReceiptedAmount(totalAmount.toString());
  1011. //已收款备注
  1012. if (null != orderIds && orderIds.contains(order.getOrderID())) {
  1013. totalBean.setReceiptedAmountRemark("返佣款");
  1014. } else {
  1015. totalBean.setReceiptedAmountRemark(msg.toString());
  1016. }
  1017. //1.3客户名称
  1018. totalBean.setUserName(userName);
  1019. //1.4供应商
  1020. totalBean.setSupplierName(shopInfos.toString());
  1021. //1.5应付商品费
  1022. totalBean.setPayProductFee(payProductFeeTotal);
  1023. //1.6应付税费
  1024. totalBean.setPayTaxFee(payTaxFeeTotal);
  1025. //1.7应付运费
  1026. totalBean.setPayFreight(payFreightTotal);
  1027. //1.8应付第三方
  1028. totalBean.setPayOther(payOtherTotal);
  1029. //1.9应付款
  1030. totalBean.setPayAmount(payAmountTotal);
  1031. //1.10已付款
  1032. totalBean.setPayedAmount(payedAmountTotal);
  1033. //1.11采美佣金
  1034. totalBean.setCommission(commissionTotal);
  1035. totalBean.setArrearage(payAmountTotal - payedAmountTotal);//增加未付款
  1036. totalBean.setProductFee(productFeeTotal);//应收商品费(总)
  1037. totalBean.setTaxFee(taxFeeTotal);//应收税费(总)
  1038. totalBean.setProductAmount(freightTotal);//应收运费(总)
  1039. totalBean.setPayTime(payTime);//付款时间
  1040. totalBean.setReceiptDate(receiptExport.getReceiptDate());//收款时间
  1041. totalBean.setReceiptedRecord(OrderUtil.getPayTypeStr(receiptExport.getPayType()));//收款账号
  1042. //查询主订单下面的所有子订单ID串
  1043. NewOrder newOrder = newOrderDao.get(order.getOrderID().toString());
  1044. String shopOrderIDs = newOrder.getShopOrderIDs();
  1045. String[] split = null;
  1046. StringBuilder payRecord = new StringBuilder();
  1047. if (null != shopOrderIDs && shopOrderIDs.contains(",")) {
  1048. split = shopOrderIDs.split(",");
  1049. } else {
  1050. split = new String[1];
  1051. split[0] = shopOrderIDs;
  1052. }
  1053. List<CmPayShopRecord> byOrderIDsGroupBy = cmPayShopRecordService.findByOrderIDsGroupBy(split);
  1054. for (CmPayShopRecord cps : byOrderIDsGroupBy) {
  1055. payRecord.append(OrderUtil.getPayType(cps.getPayType()) + "(¥" + cps.getPayAmount() + ")");
  1056. payRecord.append("\r\n");
  1057. }
  1058. //1.12付款账号
  1059. totalBean.setPayRecord(payRecord.toString());
  1060. listShopOrder.add(totalBean);
  1061. }
  1062. /**汇总数据--end*/
  1063. currentData.setList(listShopOrder);
  1064. data.add(currentData);
  1065. }
  1066. return data;
  1067. }
  1068. public void excel(HttpServletResponse response, List<CmReceiptExportData> excelList) {
  1069. //创建一个webbook,对应一个Excel文件
  1070. HSSFWorkbook wb = new HSSFWorkbook();
  1071. //在webbook中添加一个sheet,对应Excel文件中的sheet
  1072. HSSFSheet sheet = wb.createSheet("收款详情订单");
  1073. //创建单元格,并设置值表头 设置表头居中
  1074. HSSFCellStyle style = wb.createCellStyle();
  1075. style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直
  1076. style.setAlignment(HorizontalAlignment.CENTER);//水平
  1077. style.setFillForegroundColor(HSSFColor.ORANGE.index);
  1078. HSSFCellStyle textStyle = wb.createCellStyle();
  1079. //设置列宽(第几列,宽度)receivedTotal
  1080. sheet.setColumnWidth(0, 1500);//序号
  1081. sheet.setColumnWidth(1, 3200);//母订单id
  1082. sheet.setColumnWidth(2, 4800);//收款时间
  1083. sheet.setColumnWidth(3, 4800);//收款账号
  1084. sheet.setColumnWidth(4, 5000);//客户
  1085. sheet.setColumnWidth(5, 5000);//应收商品费
  1086. sheet.setColumnWidth(6, 3200);//应收税费
  1087. sheet.setColumnWidth(7, 3200);//应收运费
  1088. sheet.setColumnWidth(8, 3200);//应收款
  1089. sheet.setColumnWidth(9, 3200);//已收款
  1090. sheet.setColumnWidth(10, 5000);//已收款备注
  1091. sheet.setColumnWidth(11, 5000);//付款时间
  1092. sheet.setColumnWidth(12, 3200);//付款账号
  1093. sheet.setColumnWidth(13, 5000);//供应商
  1094. sheet.setColumnWidth(14, 6000);//应付商品费
  1095. sheet.setColumnWidth(15, 3200);//应付税费
  1096. sheet.setColumnWidth(16, 3200);//应付运费
  1097. sheet.setColumnWidth(17, 3200);//应付第三方
  1098. sheet.setColumnWidth(18, 3200);//应付款
  1099. sheet.setColumnWidth(19, 3200);//已付款
  1100. sheet.setColumnWidth(20, 3200);//未付款
  1101. sheet.setColumnWidth(21, 3200);//采美佣金
  1102. //第一行(表头)
  1103. String[] head = new String[]{"序号", "母订单id", "收款时间", "收款账号", "客户", "应收商品费", "应收税费", "应收运费", "应收款", "已收款", "已收款备注", "付款时间", "付款账号", "供应商", "应付商品费", "应付税费", "应付运费", "应付第三方", "应付款", "已付款", "未付款", "采美佣金"};//在excel中的第4行每列的参数
  1104. HSSFCell cell;
  1105. HSSFRow row = sheet.createRow(0);
  1106. for (int i = 0; i < head.length; i++) {
  1107. cell = row.createCell(i);
  1108. row.setHeight((short) 0x270);
  1109. cell.setCellValue(head[i]);
  1110. cell.setCellStyle(style);
  1111. }
  1112. Integer currentUseRow = 1;//当前已使用行号(表头存在一行从1开始)
  1113. Integer currentMergeStartRow = 1;//开始合并行号
  1114. int count = 0;
  1115. //循环遍历所有集合数据
  1116. if (CollectionUtils.isNotEmpty(excelList)) {
  1117. for (CmReceiptExportData exportData : excelList) {
  1118. count++;
  1119. int size = exportData.getList().size();
  1120. if (CollectionUtils.isNotEmpty(exportData.getList())) {
  1121. List<CmReceiptExport> list = exportData.getList();
  1122. for (int i = 0; i < list.size(); i++) {
  1123. HSSFRow row2 = sheet.createRow(currentUseRow);
  1124. row2.setHeight((short) 0x270);
  1125. //创建序号列
  1126. cell = row2.createCell(0);
  1127. cell.setCellValue(count);
  1128. cell.setCellStyle(textStyle);
  1129. //母订单id
  1130. cell = row2.createCell(1);
  1131. cell.setCellValue(list.get(i).getOrderID());
  1132. cell.setCellStyle(textStyle);
  1133. //收款时间
  1134. cell = row2.createCell(2);
  1135. cell.setCellValue(list.get(i).getReceiptDate());
  1136. cell.setCellStyle(textStyle);
  1137. //收款账号
  1138. cell = row2.createCell(3);
  1139. cell.setCellValue(list.get(i).getReceiptedRecord());
  1140. cell.setCellStyle(textStyle);
  1141. //客户
  1142. cell = row2.createCell(4);
  1143. cell.setCellValue(list.get(i).getUserName());
  1144. cell.setCellStyle(textStyle);
  1145. //应收商品费
  1146. cell = row2.createCell(5);
  1147. cell.setCellValue(formatting(list.get(i).getProductFee()));
  1148. cell.setCellStyle(textStyle);
  1149. //应收税费
  1150. cell = row2.createCell(6);
  1151. cell.setCellValue(formatting(list.get(i).getTaxFee()));
  1152. cell.setCellStyle(textStyle);
  1153. //应收运费
  1154. cell = row2.createCell(7);
  1155. cell.setCellValue(formatting(list.get(i).getProductAmount()));
  1156. cell.setCellStyle(textStyle);
  1157. //应收款
  1158. cell = row2.createCell(8);
  1159. cell.setCellValue(formatting(list.get(i).getReceiptAmount()));
  1160. cell.setCellStyle(textStyle);
  1161. //已收款
  1162. cell = row2.createCell(9);
  1163. cell.setCellValue(formatting(Double.valueOf(list.get(i).getReceiptedAmount())));
  1164. cell.setCellStyle(textStyle);
  1165. //已收款备注
  1166. cell = row2.createCell(10);
  1167. cell.setCellValue(list.get(i).getReceiptedAmountRemark());
  1168. cell.setCellStyle(textStyle);
  1169. //付款时间
  1170. cell = row2.createCell(11);
  1171. cell.setCellValue(list.get(i).getPayTime());
  1172. cell.setCellStyle(textStyle);
  1173. //付款账号
  1174. cell = row2.createCell(12);
  1175. cell.setCellValue(list.get(i).getPayRecord());
  1176. cell.setCellStyle(textStyle);
  1177. //供应商
  1178. cell = row2.createCell(13);
  1179. cell.setCellValue(list.get(i).getSupplierName());
  1180. cell.setCellStyle(textStyle);
  1181. //应付商品费
  1182. cell = row2.createCell(14);
  1183. cell.setCellValue(formatting(list.get(i).getPayProductFee()));
  1184. cell.setCellStyle(textStyle);
  1185. //应付税费
  1186. cell = row2.createCell(15);
  1187. cell.setCellValue(formatting(list.get(i).getPayTaxFee()));
  1188. cell.setCellStyle(textStyle);
  1189. //应付运费
  1190. cell = row2.createCell(16);
  1191. cell.setCellValue(formatting(list.get(i).getPayFreight()));
  1192. cell.setCellStyle(textStyle);
  1193. //应付第三方
  1194. cell = row2.createCell(17);
  1195. cell.setCellValue(formatting(list.get(i).getPayOther()));
  1196. cell.setCellStyle(textStyle);
  1197. //应付款
  1198. cell = row2.createCell(18);
  1199. cell.setCellValue(formatting(list.get(i).getPayAmount()));
  1200. cell.setCellStyle(textStyle);
  1201. //已付款
  1202. cell = row2.createCell(19);
  1203. cell.setCellValue(formatting(list.get(i).getPayedAmount()));
  1204. cell.setCellStyle(textStyle);
  1205. //未付款
  1206. cell = row2.createCell(20);
  1207. cell.setCellValue(formatting(list.get(i).getArrearage()));
  1208. cell.setCellStyle(textStyle);
  1209. //采美佣金
  1210. cell = row2.createCell(21);
  1211. cell.setCellValue(formatting(list.get(i).getCommission()));
  1212. cell.setCellStyle(textStyle);
  1213. currentUseRow += 1;//供应商大小*2决定的存在的行数(累计统计)
  1214. }
  1215. //合并订单数据
  1216. for (int j = currentMergeStartRow; j < currentUseRow; j++) {
  1217. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 0, 0));//起始行号,终止行号, 起始列号,终止列号
  1218. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 1, 1));//起始行号,终止行号, 起始列号,终止列号
  1219. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 4, 4));//起始行号,终止行号, 起始列号,终止列号
  1220. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 5, 5));//起始行号,终止行号, 起始列号,终止列号
  1221. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 6, 6));//起始行号,终止行号, 起始列号,终止列号
  1222. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 7, 7));//起始行号,终止行号, 起始列号,终止列号
  1223. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 8, 8));//起始行号,终止行号, 起始列号,终止列号
  1224. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 9, 9));//起始行号,终止行号, 起始列号,终止列号
  1225. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 10, 10));//起始行号,终止行号, 起始列号,终止列号
  1226. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 11, 11));//起始行号,终止行号, 起始列号,终止列号
  1227. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 12, 12));//起始行号,终止行号, 起始列号,终止列号
  1228. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 13, 13));//起始行号,终止行号, 起始列号,终止列号
  1229. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 14, 14));//起始行号,终止行号, 起始列号,终止列号
  1230. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 15, 15));//起始行号,终止行号, 起始列号,终止列号
  1231. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 16, 16));//起始行号,终止行号, 起始列号,终止列号
  1232. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 17, 17));//起始行号,终止行号, 起始列号,终止列号
  1233. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 18, 18));//起始行号,终止行号, 起始列号,终止列号
  1234. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 19, 19));//起始行号,终止行号, 起始列号,终止列号
  1235. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 20, 20));//起始行号,终止行号, 起始列号,终止列号
  1236. }
  1237. currentMergeStartRow += size;//提供下一个订单出账合并使用
  1238. }
  1239. }
  1240. }
  1241. try {
  1242. ByteArrayOutputStream os = new ByteArrayOutputStream();
  1243. wb.write(os);
  1244. //调用浏览器自带的下载器,要先将数据转成byte流
  1245. String fileName = "收款详情列表.xls";
  1246. byte[] content = os.toByteArray();
  1247. response.setContentType("application/x-download");
  1248. response.setHeader("Content-disposition", "attachment; filename=" + Encodes.urlEncode(fileName));
  1249. response.getOutputStream().write(content);
  1250. response.getOutputStream().flush();
  1251. response.getOutputStream().close();
  1252. os.flush();
  1253. os.close();
  1254. } catch (Exception e) {
  1255. e.printStackTrace();
  1256. }
  1257. }
  1258. public Double formatting(Double num) {
  1259. String data = "0";
  1260. if (num != null) {
  1261. data = String.format("%.2f", num);
  1262. }
  1263. return Double.parseDouble(data);
  1264. }
  1265. }