CmDiscernReceiptController.java 69 KB

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