CmDiscernReceiptController.java 70 KB

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