CmDiscernReceiptController.java 72 KB

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