NewOrderController.java 105 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122
  1. package com.caimei.modules.order.web;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.caimei.constants.NewPayWay;
  4. import com.caimei.dfs.image.beens.ImageUploadInfo;
  5. import com.caimei.modules.bulkpurchase.entity.BpClause;
  6. import com.caimei.modules.bulkpurchase.entity.CmFinanceCharge;
  7. import com.caimei.modules.bulkpurchase.service.BpClauseService;
  8. import com.caimei.modules.common.utils.ExcelUtil;
  9. import com.caimei.modules.common.utils.UploadUtils;
  10. import com.caimei.modules.coupon.entity.CmCouponOrderRecord;
  11. import com.caimei.modules.coupon.service.CmCouponService;
  12. import com.caimei.modules.order.dao.*;
  13. import com.caimei.modules.order.entity.*;
  14. import com.caimei.modules.order.service.*;
  15. import com.caimei.modules.order.utils.OrderUtil;
  16. import com.caimei.modules.product.dao.CmPromotionDao;
  17. import com.caimei.modules.product.dao.ProductDao;
  18. import com.caimei.modules.product.entity.CmPromotion;
  19. import com.caimei.modules.product.entity.Product;
  20. import com.caimei.modules.product.entity.RepeatPurchasePrice;
  21. import com.caimei.modules.product.entity.RepeatPurchasePriceHistory;
  22. import com.caimei.modules.product.service.CmSecondHandDetailService;
  23. import com.caimei.modules.product.service.RepeatPurchasePriceHistoryService;
  24. import com.caimei.modules.product.service.RepeatPurchasePriceService;
  25. import com.caimei.modules.project.dao.ClubDao;
  26. import com.caimei.modules.project.model.ClubModel;
  27. import com.caimei.modules.sys.utils.UploadImageUtils;
  28. import com.caimei.modules.user.dao.CmUserDao;
  29. import com.caimei.modules.user.entity.*;
  30. import com.caimei.modules.user.service.CmMessageService;
  31. import com.caimei.modules.user.service.CmUserOrganizeService;
  32. import com.caimei.modules.user.service.CmUserService;
  33. import com.caimei.modules.user.service.NewCmShopService;
  34. import com.caimei.modules.user.utils.UserType;
  35. import com.caimei.po.ProductLadderPrice;
  36. import com.caimei.utils.AppUtils;
  37. import com.caimei.utils.MathUtil;
  38. import com.caimei.utils.StringUtil;
  39. import com.google.common.collect.Lists;
  40. import com.thinkgem.jeesite.common.config.Global;
  41. import com.thinkgem.jeesite.common.mapper.JsonMapper;
  42. import com.thinkgem.jeesite.common.persistence.Page;
  43. import com.thinkgem.jeesite.common.utils.Encodes;
  44. import com.thinkgem.jeesite.common.utils.StringUtils;
  45. import com.thinkgem.jeesite.common.web.BaseController;
  46. import org.apache.commons.collections.CollectionUtils;
  47. import org.apache.poi.hssf.usermodel.*;
  48. import org.apache.poi.hssf.util.HSSFColor;
  49. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  50. import org.apache.poi.ss.usermodel.VerticalAlignment;
  51. import org.apache.poi.ss.util.CellRangeAddress;
  52. import org.apache.shiro.authz.annotation.RequiresPermissions;
  53. import org.springframework.stereotype.Controller;
  54. import org.springframework.ui.Model;
  55. import org.springframework.web.bind.annotation.*;
  56. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  57. import javax.annotation.Resource;
  58. import javax.servlet.http.HttpServletRequest;
  59. import javax.servlet.http.HttpServletResponse;
  60. import java.io.ByteArrayOutputStream;
  61. import java.math.BigDecimal;
  62. import java.text.SimpleDateFormat;
  63. import java.util.*;
  64. import java.util.stream.Collectors;
  65. import java.util.stream.IntStream;
  66. /**
  67. * 订单模块重构-订单Controller
  68. *
  69. * @author lwt
  70. * @version 2018-07-23
  71. */
  72. @Controller
  73. @RequestMapping(value = "${adminPath}/order")
  74. public class NewOrderController extends BaseController {
  75. @Resource
  76. private CmUtilsDao cmUtilsDao;
  77. @Resource
  78. private NewOrderService newOrderService;
  79. @Resource
  80. private BpClauseService bpClauseService;
  81. @Resource
  82. private NewOrderProductService newOrderProductService;
  83. @Resource
  84. private NewShopOrderService newShopOrderService;
  85. @Resource
  86. private OrderUserInfoService orderUserInfoService;
  87. @Resource
  88. private CmMessageService cmMessageService;
  89. @Resource
  90. private ClubDao clubDao;
  91. @Resource
  92. private ProductDao productDao;
  93. @Resource
  94. private NewOrderProductDao newOrderProductDao;
  95. @Resource
  96. private CmReturnedPurchaseDao cmReturnedPurchaseDao;
  97. @Resource
  98. private CmUserService cmUserService;
  99. @Resource
  100. private RepeatPurchasePriceService repeatPurchasePriceService;
  101. @Resource
  102. private NewCmShopService newCmShopService;
  103. @Resource
  104. private RepeatPurchasePriceHistoryService repeatPurchasePriceHistoryService;
  105. @Resource
  106. private NewOrderConfigService newOrderConfigService;
  107. @Resource
  108. private CmDiscernReceiptService cmDiscernReceiptService;
  109. @Resource
  110. private CmUserDao cmUserDao;
  111. @Resource
  112. private CmReturnedPurchaseService cmReturnedPurchaseService;
  113. @Resource
  114. private CmReceiptOrderRelationDao cmReceiptOrderRelationDao;
  115. @Resource
  116. private CmUserOrganizeService cmUserOrganizeService;
  117. @Resource
  118. private CmSecondHandDetailService cmSecondHandDetailService;
  119. @Resource
  120. private CmDiscernReceiptDao cmDiscernReceiptDao;
  121. @Resource
  122. private CmReceiptOrderRelationService cmReceiptOrderRelationService;
  123. @Resource
  124. private CmPromotionDao cmPromotionDao;
  125. @Resource
  126. private CmCouponService cmCouponService;
  127. @ModelAttribute
  128. public NewOrder get(@RequestParam(required = false) String id) {
  129. NewOrder entity = null;
  130. if (StringUtils.isNotBlank(id)) {
  131. entity = newOrderService.get(id);
  132. }
  133. if (entity == null) {
  134. entity = new NewOrder();
  135. }
  136. return entity;
  137. }
  138. @RequiresPermissions("order:order:view")
  139. @RequestMapping("orderList")
  140. public String orderList(NewOrder order, HttpServletRequest request, HttpServletResponse response, Model model) {
  141. if (null != order.getStartTime() && !"".equals(order.getStartTime()) && !order.getStartTime().endsWith("00:00:00")) {
  142. model.addAttribute("startTime", order.getStartTime());
  143. order.setStartTime(order.getStartTime().trim() + " 00:00:00");
  144. }
  145. if (null != order.getEndTime() && !"".equals(order.getEndTime()) && !order.getEndTime().endsWith("23:59:59")) {
  146. model.addAttribute("endTime", order.getEndTime());
  147. order.setEndTime(order.getEndTime().trim() + " 23:59:59");
  148. }
  149. if (null != order.getStartConfirmTime() && !"".equals(order.getStartConfirmTime()) && !order.getStartConfirmTime().endsWith("00:00:00")) {
  150. model.addAttribute("startConfirmTime", order.getStartConfirmTime());
  151. order.setStartConfirmTime(order.getStartConfirmTime().trim() + " 00:00:00");
  152. }
  153. if (null != order.getEndConfirmTime() && !"".equals(order.getEndConfirmTime()) && !order.getEndConfirmTime().endsWith("23:59:59")) {
  154. model.addAttribute("endConfirmTime", order.getEndConfirmTime());
  155. order.setEndConfirmTime(order.getEndConfirmTime().trim() + " 23:59:59");
  156. }
  157. if (null != order.getStartRefundTime() && !"".equals(order.getStartRefundTime()) && !order.getStartRefundTime().endsWith("00:00:00")) {
  158. model.addAttribute("startRefundTime", order.getStartRefundTime());
  159. order.setStartRefundTime(order.getStartRefundTime().trim() + " 00:00:00");
  160. }
  161. if (null != order.getEndRefundTime() && !"".equals(order.getEndRefundTime()) && !order.getEndRefundTime().endsWith("23:59:59")) {
  162. model.addAttribute("endRefundTime", order.getEndRefundTime());
  163. order.setEndRefundTime(order.getEndRefundTime().trim() + " 23:59:59");
  164. }
  165. model.addAttribute("orderRefundType", order.getOrderRefundType());
  166. if (null != order.getBuyer()) {
  167. order.setBuyer(order.getBuyer().trim());
  168. }
  169. if (null != order.getReceiver()) {
  170. order.setReceiver(order.getReceiver().trim());
  171. }
  172. //查询内部处理了已收,未付统计(包含运费)
  173. Page<NewOrder> page = newOrderService.findPage(new Page<>(request, response, 20), order);
  174. //获取组织列表
  175. List<CmUserOrganize> cmUserOrganizeList = cmUserOrganizeService.findOrganize();
  176. model.addAttribute("cmUserOrganizeList", cmUserOrganizeList);
  177. //获取上线协销人员,排除采美默认协销经理
  178. List<NewCmSp> serviceProviderList = newOrderService.findServiceProviderList();
  179. model.addAttribute("serviceProviderList", serviceProviderList);
  180. model.addAttribute("page", page);
  181. return "modules/order/newOrderList";
  182. }
  183. @RequiresPermissions("order:order:secondhandOrder")
  184. @RequestMapping("secondhandOrderList")
  185. public String secondhandOrderList(NewOrder order, HttpServletRequest request, HttpServletResponse response, Model model) {
  186. if (null != order.getStartTime() && !"".equals(order.getStartTime()) && !order.getStartTime().endsWith("00:00:00")) {
  187. model.addAttribute("startTime", order.getStartTime());
  188. order.setStartTime(order.getStartTime().trim() + " 00:00:00");
  189. }
  190. if (null != order.getEndTime() && !"".equals(order.getEndTime()) && !order.getEndTime().endsWith("23:59:59")) {
  191. model.addAttribute("endTime", order.getEndTime());
  192. order.setEndTime(order.getEndTime().trim() + " 23:59:59");
  193. }
  194. if (null != order.getStartConfirmTime() && !"".equals(order.getStartConfirmTime()) && !order.getStartConfirmTime().endsWith("00:00:00")) {
  195. model.addAttribute("startConfirmTime", order.getStartConfirmTime());
  196. order.setStartConfirmTime(order.getStartConfirmTime().trim() + " 00:00:00");
  197. }
  198. if (null != order.getEndConfirmTime() && !"".equals(order.getEndConfirmTime()) && !order.getEndConfirmTime().endsWith("23:59:59")) {
  199. model.addAttribute("endConfirmTime", order.getEndConfirmTime());
  200. order.setEndConfirmTime(order.getEndConfirmTime().trim() + " 23:59:59");
  201. }
  202. if (null != order.getStartRefundTime() && !"".equals(order.getStartRefundTime()) && !order.getStartRefundTime().endsWith("00:00:00")) {
  203. model.addAttribute("startRefundTime", order.getStartRefundTime());
  204. order.setStartRefundTime(order.getStartRefundTime().trim() + " 00:00:00");
  205. }
  206. if (null != order.getEndRefundTime() && !"".equals(order.getEndRefundTime()) && !order.getEndRefundTime().endsWith("23:59:59")) {
  207. model.addAttribute("endRefundTime", order.getEndRefundTime());
  208. order.setEndRefundTime(order.getEndRefundTime().trim() + " 23:59:59");
  209. }
  210. model.addAttribute("orderRefundType", order.getOrderRefundType());
  211. if (null != order.getBuyer()) {
  212. order.setBuyer(order.getBuyer().trim());
  213. }
  214. if (null != order.getReceiver()) {
  215. order.setReceiver(order.getReceiver().trim());
  216. }
  217. order.setProductCategory(2);
  218. //查询内部处理了已收,未付统计(包含运费)
  219. Page<NewOrder> page = newOrderService.findPage(new Page<>(request, response, 20), order);
  220. //获取组织列表
  221. List<CmUserOrganize> cmUserOrganizeList = cmUserOrganizeService.findOrganize();
  222. model.addAttribute("cmUserOrganizeList", cmUserOrganizeList);
  223. //获取上线协销人员,排除采美默认协销经理
  224. List<NewCmSp> serviceProviderList = newOrderService.findServiceProviderList();
  225. model.addAttribute("serviceProviderList", serviceProviderList);
  226. model.addAttribute("page", page);
  227. return "modules/order/secondhandOrderList";
  228. }
  229. @RequiresPermissions("order:order:form")
  230. @RequestMapping(value = "form")
  231. public String form(NewOrder newOrder, Model model, HttpServletRequest request) {
  232. BpClause bpClause = new BpClause();
  233. bpClause.setEnabledStatus("1");
  234. List<BpClause> bpClauses = bpClauseService.findList(bpClause);
  235. model.addAttribute("bpClauses", bpClauses);
  236. if (null != newOrder.getClauseID() && StringUtils.equals("1", newOrder.getConfirmFlag())) {//订单,且确认
  237. BpClause bpClause1 = bpClauseService.get(newOrder.getClauseID().toString());
  238. model.addAttribute("bpClause", bpClause1);
  239. }
  240. if (null != newOrder) {
  241. //根据订单产品
  242. List<NewOrderProduct> orderProducts = newOrder.getOrderProduct();
  243. if (null != orderProducts && orderProducts.size() > 0) {
  244. BigDecimal alreadyShopOtherPay = new BigDecimal(0);
  245. for (NewOrderProduct orderProduct : orderProducts) {
  246. //重新赋值
  247. alreadyShopOtherPay = BigDecimal.ZERO;
  248. orderProduct.setShopFeeFlag("0");
  249. //金额不为空 且 金额相等
  250. if (BigDecimal.valueOf(orderProduct.getShopFee()).compareTo(alreadyShopOtherPay) == 0 && alreadyShopOtherPay.compareTo(BigDecimal.ZERO) != 0) {
  251. //审核通过 不可修改
  252. orderProduct.setShopFeeFlag("1");
  253. }
  254. // 促销
  255. CmPromotion orderPromotions = null;
  256. if (null != orderProduct.getOrderPromotionsId()) {
  257. orderPromotions = cmPromotionDao.findOrderPromotions(orderProduct.getOrderPromotionsId());
  258. if (null != orderPromotions) {
  259. orderProduct.setPromotionsId(orderPromotions.getPromotionsId());
  260. orderProduct.setLadderPriceFlag(0);
  261. }
  262. }
  263. Product product = productDao.get(orderProduct.getProductID().toString());
  264. orderProduct.setCommodityType(product.getCommodityType());
  265. if (null == orderPromotions) {
  266. if (1 == orderProduct.getLadderPriceFlag() && "1".equals(product.getLadderPriceFlag())) {
  267. // 查询商品当前阶梯价格
  268. List<ProductLadderPrice> ladderPriceList = productDao.findLadderPrice(orderProduct.getSkuId());
  269. if (null != ladderPriceList && ladderPriceList.size() > 0) {
  270. IntStream.range(0, ladderPriceList.size()).forEach(i -> {
  271. if (i == ladderPriceList.size() - 1) {
  272. ladderPriceList.get(i).setBuyNumRangeShow("≥" + ladderPriceList.get(i).getBuyNum());
  273. } else {
  274. String buyNumRangeShow = ladderPriceList.get(i).getBuyNum() + "~" + (ladderPriceList.get(i + 1).getBuyNum() - 1);
  275. ladderPriceList.get(i).setBuyNumRangeShow(buyNumRangeShow);
  276. }
  277. });
  278. orderProduct.setLadderPriceList(ladderPriceList);
  279. }
  280. } else {
  281. orderProduct.setLadderPriceFlag(0);
  282. orderProduct.setIsActProduct("0");
  283. }
  284. }
  285. //是否有优惠券可以查看
  286. Boolean couponsLogo = cmCouponService.setCouponsLogo(newOrder.getUserID(), orderProduct.getProductID(), orderProduct.getShopID(), product.getCommodityType());
  287. if (couponsLogo) {
  288. orderProduct.setCouponsLogo(2);
  289. } else {
  290. orderProduct.setCouponsLogo(1);
  291. }
  292. }
  293. }
  294. if (null != newOrder.getOrderID() && null != newOrder.getClauseName()) {
  295. newOrderService.updateClauseContent(newOrder);
  296. }
  297. if (StringUtil.isEmpty(newOrder.getOrderTime())) {
  298. newOrder.setOrderTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  299. }
  300. if (null == newOrder.getOrderID()) {
  301. newOrder.setOrderSource("4");
  302. }
  303. }
  304. model.addAttribute("order", newOrder);
  305. return "modules/order/orderForm";
  306. }
  307. @RequiresPermissions("order:order:secondeProductOrderForm")
  308. @RequestMapping(value = "secondeProductOrderForm")
  309. public String secondeProductOrderForm(NewOrder newOrder, Model model, HttpServletRequest request) {
  310. BpClause bpClause = new BpClause();
  311. bpClause.setEnabledStatus("1");
  312. List<BpClause> bpClauses = bpClauseService.findList(bpClause);
  313. model.addAttribute("bpClauses", bpClauses);
  314. if (null != newOrder.getClauseID() && StringUtils.equals("1", newOrder.getConfirmFlag())) {//订单,且确认
  315. BpClause bpClause1 = bpClauseService.get(newOrder.getClauseID().toString());
  316. model.addAttribute("bpClause", bpClause1);
  317. }
  318. if (null != newOrder) {
  319. //根据订单产品
  320. List<NewOrderProduct> orderProducts = newOrder.getOrderProduct();
  321. if (null != orderProducts && orderProducts.size() > 0) {
  322. BigDecimal alreadyShopOtherPay = new BigDecimal(0);
  323. for (NewOrderProduct orderProduct : orderProducts) {
  324. //重新赋值
  325. alreadyShopOtherPay = BigDecimal.ZERO;
  326. orderProduct.setShopFeeFlag("0");
  327. //金额不为空 且 金额相等
  328. if (new BigDecimal(orderProduct.getShopFee()).compareTo(alreadyShopOtherPay) == 0 && alreadyShopOtherPay.compareTo(BigDecimal.ZERO) != 0) {
  329. orderProduct.setShopFeeFlag("1");//审核通过 不可修改
  330. }
  331. }
  332. }
  333. if (null != newOrder.getOrderID() && null != newOrder.getClauseName()) {
  334. newOrderService.updateClauseContent(newOrder);
  335. }
  336. if (StringUtil.isEmpty(newOrder.getOrderTime())) {
  337. newOrder.setOrderTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  338. }
  339. }
  340. model.addAttribute("order", newOrder);
  341. return "modules/order/secondProductOrderForm";
  342. }
  343. @RequiresPermissions("order:order:edit")
  344. @RequestMapping(value = "save")
  345. public String save(NewOrder newOrder, Model model, RedirectAttributes redirectAttributes, HttpServletRequest request) {
  346. // 是否为二手订单(二手订单只存在一个商品)
  347. boolean isSecondHandOrder = false;
  348. if (!beanValidator(model, newOrder)) {
  349. return form(newOrder, model, request);
  350. }
  351. if (CollectionUtils.isEmpty(newOrder.getOrderProduct())) {
  352. model.addAttribute("message", "保存失败商品不能为空");
  353. return form(newOrder, model, request);
  354. } else {
  355. List<NewOrderProduct> orderProductList = Lists.newArrayList();
  356. for (NewOrderProduct newOrderProduct : newOrder.getOrderProduct()) {
  357. if (StringUtils.isNotEmpty(newOrderProduct.getEnabledStatus())) {
  358. NewOrderProduct o = JSONObject.parseObject(newOrderProduct.getEnabledStatus(), NewOrderProduct.class);
  359. JSONObject jsonObject = JSONObject.parseObject(newOrderProduct.getEnabledStatus());
  360. String productId = jsonObject.getString("productId");
  361. if (productId != null && !"".equals(productId)) {
  362. o.setProductID(Integer.valueOf(productId));
  363. }
  364. String shopId = jsonObject.getString("shopId");
  365. if (shopId != null && !"".equals(shopId)) {
  366. o.setShopID(Integer.valueOf(shopId));
  367. }
  368. String singleShopFee = jsonObject.getString("shopFee1");
  369. if (singleShopFee != null && !"".equals(singleShopFee)) {
  370. o.setSingleShopFee(Double.valueOf(singleShopFee));
  371. }
  372. String singleOtherFee = jsonObject.getString("otherFee1");
  373. if (singleOtherFee != null && !"".equals(singleOtherFee)) {
  374. o.setSingleOtherFee(Double.valueOf(singleOtherFee));
  375. }
  376. String singleCmFee = jsonObject.getString("cmFee1");
  377. if (singleCmFee != null && !"".equals(singleCmFee)) {
  378. o.setSingleCmFee(Double.valueOf(singleCmFee));
  379. }
  380. String productType = jsonObject.getString("productType");
  381. if (productType != null && !"".equals(productType)) {
  382. o.setProductType(Integer.valueOf(productType));
  383. }
  384. String ladderPriceFlag = jsonObject.getString("ladderPriceFlag");
  385. if (ladderPriceFlag != null && !"".equals(ladderPriceFlag)) {
  386. o.setLadderPriceFlag(Integer.valueOf(ladderPriceFlag));
  387. }
  388. String skuId = jsonObject.getString("skuId");
  389. if ("2".equals(o.getProductCategory())) {
  390. skuId = newOrderProductDao.findSkuIdByProductId(o.getProductID());
  391. }
  392. o.setSplitCode(productDao.getSplitCodeByProductId(o.getProductID()));
  393. Integer promotionsId = o.getPromotionsId() != null ? o.getPromotionsId() : 0;
  394. o.setPromotionsId(promotionsId);
  395. if ("0".equals(productType)) {
  396. o.setSkuId(Integer.valueOf(skuId));
  397. o.setPreferential((o.getPrice() - o.getDiscountPrice()) * o.getNum());//折扣
  398. o.setDiscountFee(BigDecimal.valueOf(o.getTotalFee()).subtract(BigDecimal.valueOf(o.getShouldPayFee())).doubleValue());//经理折扣
  399. o.setTotalAmount(o.getPrice() * o.getNum());//商品总金额
  400. //设置订单商品的默认应付税费(只有默认的时候应付税费才等于应收税费)
  401. if (o.getShouldPayTotalTax() == null) {
  402. o.setSingleShouldPayTotalTax(o.getAddedValueTax());
  403. o.setShouldPayTotalTax(o.getTotalAddedValueTax());
  404. }
  405. o.setPresentNum(0);
  406. o.setNotOutStore(o.getNum());
  407. o.setStatus(0);//订单商品待付款
  408. if (o.getPayStatus() == null) {
  409. o.setPayStatus("0"); //默认值为未付款(0 未进账 1 待财务审核 2 已进账)
  410. }
  411. orderProductList.add(o);
  412. String productCategory = o.getProductCategory();
  413. if (StringUtils.equals(productCategory, "2")) {
  414. isSecondHandOrder = true;
  415. }
  416. } else {
  417. if (null == o.getSkuId()) {
  418. List<Integer> skuIdByPromotionsId = productDao.findSkuIdByPromotionsId(o.getPromotionsId());
  419. //赠品
  420. for (Integer sku : skuIdByPromotionsId) {
  421. o.setSkuId(sku);
  422. String productCategory = o.getProductCategory();
  423. if (StringUtils.equals(productCategory, "2")) {
  424. isSecondHandOrder = true;
  425. }
  426. }
  427. }
  428. o.setPreferential(0d);
  429. o.setDiscount(100d);
  430. o.setDiscountFee(0d);
  431. o.setTotalAmount(0d);
  432. o.setShouldPayFee(0d);
  433. o.setSingleShouldPayTotalTax(0d);
  434. o.setShouldPayTotalTax(0d);
  435. o.setCmFee(0d);
  436. o.setTotalFee(0d);
  437. o.setTotalAddedValueTax(0d);
  438. o.setAddedValueTax(0d);
  439. o.setTaxRate(0d);
  440. o.setPresentNum(0);
  441. o.setNotOutStore(o.getNum());
  442. o.setStatus(0);//订单商品待付款
  443. if (o.getPayStatus() == null) {
  444. o.setPayStatus("0"); //默认值为未付款(0 未进账 1 待财务审核 2 已进账)
  445. }
  446. orderProductList.add(o);
  447. String productCategory = o.getProductCategory();
  448. if (StringUtils.equals(productCategory, "2")) {
  449. isSecondHandOrder = true;
  450. }
  451. }
  452. }
  453. }
  454. if (CollectionUtils.isNotEmpty(orderProductList)) {
  455. newOrder.setOrderProduct(orderProductList);
  456. }
  457. }
  458. Date date = new Date();
  459. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  460. String time = sdf.format(date);
  461. if (isSecondHandOrder) {
  462. newOrder.setSecondHandOrderFlag("1");
  463. } else {
  464. newOrder.setSecondHandOrderFlag("0");
  465. }
  466. //后台添加订单状态为0;待确认
  467. if (StringUtils.isEmpty(newOrder.getStatus())) {
  468. newOrder.setStatus("0");
  469. }
  470. if (newOrder.getPayableAmount() == 0 && newOrder.getPayTotalFee() == 0) {
  471. // 订单状态
  472. newOrder.setStatus("31");
  473. newOrder.setReceiptStatus("3");
  474. newOrder.setPayFlag("1");
  475. newOrder.setConfirmFlag("1");//标记为确认订单
  476. newOrder.setConfirmTime(time);
  477. }
  478. //后台添加订单订单提交类型;后台提交4
  479. if (StringUtils.isEmpty(newOrder.getOrderSubmitType())) {
  480. newOrder.setOrderSubmitType("4");
  481. }
  482. //如果是[5:外单]类型则订单状态直接为交易完成
  483. if (StringUtils.equals("5", newOrder.getOrderSource())) {
  484. newOrder.setConfirmFlag("1");//标记为确认订单
  485. newOrder.setConfirmTime(time);
  486. }
  487. if (StringUtils.equals("1", newOrder.getCooFreeFlag())) {
  488. //如果是分期订单
  489. newOrder.setCooFreeFlag("0");
  490. newOrder.setCooFreeRate(0);
  491. newOrder.setCooFreeAmount(0.00d);
  492. }
  493. if (newOrder.getOrderID() == null) {
  494. // lwt 订单的下单时间和单号 都再订单保存后再展示
  495. newOrder.setOrderNo(OrderUtil.geneAdminOrderNo());
  496. newOrder.setOrderType("0"); // 订单类型 协销订单 0 普通订单 1
  497. newOrder.setOrderSubmitType("4");
  498. newOrder.setSplitFlag("1"); //订单可拆分
  499. }
  500. if (newOrder.getClauseID() == null) {
  501. newOrder.setClauseID(1); //没有选择条款的话 默认就是无条款
  502. }
  503. BpClause clause = bpClauseService.get(newOrder.getClauseID().toString());
  504. newOrder.setClauseContent(clause.getContent());
  505. newOrder.setClauseName(clause.getName());
  506. //保存订单
  507. newOrderService.save(newOrder);
  508. if (newOrder.getOrderID() != null) {
  509. //订单重新保存后则修改订单商品需供应商确认
  510. newOrderProductService.updateShopConfigFlag(newOrder.getOrderID());
  511. }
  512. addMessage(redirectAttributes, "保存订单成功");
  513. if ("1".equals(newOrder.getSecondHandOrderFlag())) {
  514. return "redirect:" + Global.getAdminPath() + "/order/secondhandOrderList";
  515. } else {
  516. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  517. }
  518. }
  519. @RequiresPermissions("order:order:edit")
  520. @RequestMapping("printOrder")
  521. public String printOrder(Integer orderID, Integer shopOrderID, Model model) {
  522. if (shopOrderID != null) {
  523. NewShopOrder shopOrder = newShopOrderService.findByShopOrderID(shopOrderID);
  524. NewOrder order = newOrderService.findByOrderID(shopOrder.getOrderID());
  525. String payWay = order.getPayWay();
  526. if (payWay != null) {
  527. for (NewPayWay type : NewPayWay.values()) {
  528. if (payWay.contains(type.getCode() + ""))
  529. payWay = payWay.replaceAll(type.getCode() + "", type.getDesc());
  530. }
  531. order.setPayWay(payWay);
  532. } else {
  533. order.setPayWay("-");
  534. }
  535. OrderUserInfo orderUserInfo = orderUserInfoService.findByOrderID(order.getOrderID());
  536. model.addAttribute("shopOrder", shopOrder);
  537. model.addAttribute("order", order);
  538. model.addAttribute("orderUserInfo", orderUserInfo);
  539. return "modules/order/printSubOrder";
  540. }
  541. if (orderID != null) {
  542. NewOrder order = newOrderService.get(orderID + "");
  543. order.getOrderProduct().forEach(o -> {
  544. if (o.getOrderPromotionsId() != null) {
  545. CmPromotion promotions = cmPromotionDao.findOrderPromotions(o.getOrderPromotionsId());
  546. if (promotions != null && "1".equals(promotions.getMode())) {
  547. //取对应sku的优惠价
  548. Double price = productDao.getTouchPriceBySku(o.getSkuId());
  549. o.setDiscountPrice(price);
  550. }
  551. }
  552. });
  553. order.getNewShopOrders().removeIf(so -> so.getPostFeeCos().equals("1"));
  554. model.addAttribute("order", order);
  555. return "modules/order/printOrder";
  556. }
  557. return "modules/order/printOrder";
  558. }
  559. /**
  560. * 普通订单商品修改
  561. *
  562. * @param model
  563. * @return
  564. */
  565. @RequiresPermissions("order:order:edit")
  566. @RequestMapping("modifyProduct")
  567. public String modifyProduct(Model model, Integer orderID) {
  568. NewOrder order = newOrderService.get(orderID.toString());
  569. model.addAttribute("order", order);
  570. return "modules/order/modifyProduct";
  571. }
  572. /**
  573. * 协销订单确认
  574. *
  575. * @param model
  576. * @return
  577. */
  578. @RequiresPermissions("order:order:confirmOrder")
  579. @RequestMapping("confirmOrder")
  580. public String confirmOrder(Integer orderID, Integer shopOrderID, Model model, RedirectAttributes redirectAttributes) {
  581. NewOrder order = newOrderService.get(orderID + "");
  582. //过滤子订单
  583. List<NewShopOrder> newShopOrders= order.getNewShopOrders().stream().filter(newShopOrder -> newShopOrder.getShopOrderID().equals(shopOrderID)).collect(Collectors.toList());
  584. order.setNewShopOrders(newShopOrders);
  585. // if (StringUtils.isNotEmpty(order.getStatus()) && Integer.parseInt(order.getStatus()) > 0) {
  586. // addMessage(redirectAttributes, "订单状态异常,请刷新后重试!");
  587. // return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
  588. // }
  589. // if (newShopOrders.get(0).getStatus()!=null && newShopOrders.get(0).getStatus() > 0) {
  590. // addMessage(redirectAttributes, "订单状态异常,请刷新后重试!");
  591. // return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
  592. // }
  593. //优惠券确认消耗
  594. CmCouponOrderRecord orderRecord = order.getCouponOrderRecord();
  595. if (order.getCouponAmount() > 0 && orderRecord != null) {
  596. Boolean isCoupon = newOrderService.updateClubCoupon(orderRecord.getClubCouponId(), orderID);
  597. if (!isCoupon) {
  598. addMessage(redirectAttributes, "订单内优惠券已被使用");
  599. return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
  600. }
  601. }
  602. //确认订单时处理买家商品价格库信息
  603. final Integer userID;
  604. if ("6".equals(order.getOrderSubmitType())) {
  605. userID = order.getUserID();
  606. } else {
  607. // Integer clubId = order.getClubID();
  608. Integer clubId = newShopOrders.get(0).getClubID();
  609. ClubModel clubByUserId = clubDao.getClubByUserId(Integer.parseInt(clubId.toString()));
  610. userID = clubByUserId.getUserID();
  611. }
  612. // List<NewOrderProduct> orderProduct = order.getOrderProduct();
  613. List<NewOrderProduct> orderProduct = order.getNewShopOrders().get(0).getNewOrderProducts();
  614. if (CollectionUtils.isNotEmpty(orderProduct) && orderProduct.size() > 0) {
  615. for (NewOrderProduct op : orderProduct) {
  616. String isActProduct = op.getIsActProduct();
  617. Integer svipPriceFlag = op.getSvipPriceFlag();
  618. Integer ladderPriceFlag = op.getLadderPriceFlag();
  619. //活动商品和阶梯商品和超级会员价不写入价格库
  620. if (StringUtil.equals("0", isActProduct) && 0 == svipPriceFlag && 0 == ladderPriceFlag) {
  621. String buyAgainFlag = op.getBuyAgainFlag();
  622. //对于可以复购的商品添加买家商品价格,提供再次购买商品使用(如果不存在没有改买家商品价格则不能购买该商品)
  623. if (StringUtils.isNotEmpty(buyAgainFlag) && StringUtils.equals("1", buyAgainFlag)) {
  624. Product product = productDao.get(op.getProductID().toString());
  625. if (null != product) {
  626. String costPrice = product.getCostPrice();//成本价
  627. Double buyPrice = op.getDiscountPrice(); //该商品的购买价
  628. CmUser u = cmUserService.get(userID + "");
  629. Integer clubID = null;
  630. Integer uID = null;
  631. if (UserType.isClub(u.getRegisterUserTypeID())) {
  632. clubID = StringUtils.isEmpty(u.getClubID()) ? null : Integer.valueOf(u.getClubID());
  633. } else {
  634. uID = u.getUserID();
  635. }
  636. // 当前购买价格与成本价比较
  637. String costCheckFlag = product.getCostCheckFlag();//成本价选中标志:1固定成本 2比例成本
  638. if ("2".equals(costCheckFlag)) {
  639. costPrice = MathUtil.div(MathUtil.mul(product.getPrice(), product.getShopPercent()), 100).toString();
  640. if ("0".equals(costPrice)) costPrice = op.getCostPrice().toString();
  641. }
  642. //购买价大于成本价,采美赚钱 就写入复购价格库
  643. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  644. String strDate = formatter.format(new Date());
  645. String flag = "0";
  646. if (StringUtils.isNotBlank(costPrice) && buyPrice > Double.valueOf(costPrice)) {
  647. // 查询复购价格库 比较复购价格库中的购买价格与这一次的购买价格
  648. RepeatPurchasePrice p = repeatPurchasePriceService.getLastBuyPrice(clubID, uID, op.getSkuId());
  649. if (p == null) {
  650. NewCmShop shop = newCmShopService.get(product.getShopID().toString());
  651. p = new RepeatPurchasePrice();
  652. p.setSkuId(product.getSkuId());
  653. p.setClubId(clubID);
  654. p.setUserId(u.getUserID());
  655. p.setCurrentPrice(buyPrice.toString());
  656. p.setCreateTime(strDate);
  657. p.setProductId(product.getProductID());
  658. p.setOrderId(orderID.toString());
  659. p.setShopId(shop == null ? null : shop.getShopID());
  660. p.setShopName(shop == null ? "" : shop.getName());
  661. p.setTaxRate(String.valueOf(op.getTaxRate()));
  662. repeatPurchasePriceService.insert(p);
  663. } else if (StringUtils.isNotBlank(p.getCurrentPrice()) && buyPrice < Double.valueOf(p.getCurrentPrice())) { // 这一次的购买价格小于复购价格库中的价格
  664. p.setCurrentPrice(buyPrice.toString());
  665. p.setOrderId(orderID.toString());
  666. p.setTaxRate(String.valueOf(op.getTaxRate()));
  667. repeatPurchasePriceService.update(p);
  668. }
  669. flag = "1";
  670. }
  671. RepeatPurchasePriceHistory r = new RepeatPurchasePriceHistory();
  672. r.setClubId(clubID);
  673. r.setSkuId(op.getSkuId());
  674. r.setUserId(u.getUserID());
  675. r.setPrice(buyPrice.toString());
  676. r.setOrderId(orderID);
  677. r.setCurrentCostPrice(costPrice);
  678. r.setCreateTime(strDate);
  679. r.setProductId(product.getProductID());
  680. r.setValid(flag);
  681. repeatPurchasePriceHistoryService.insert(r);
  682. }
  683. }
  684. }
  685. // 二手商品确认商品如果是二手仪器则需要把该二手商品置为已售
  686. if (StringUtils.equals(op.getSecondHandType(), "1") && StringUtils.equals("2", op.getProductCategory())) {
  687. cmSecondHandDetailService.updatSecondHnadproductSold(op.getProductID());
  688. }
  689. }
  690. }
  691. CmMessage msg = new CmMessage();
  692. msg.setAddTime(com.caimei.utils.DateUtils.getDateTime());
  693. msg.setContent("您有一笔订单等待支付,快去订单列表进行支付。");
  694. msg.setTitle("订单确认结果");
  695. msg.setToUserID(order.getUserID());
  696. msg.setMessageTypeID("1");
  697. msg.setReadFlag("0");
  698. cmMessageService.save(msg);
  699. newOrderService.confirmOrder(orderID,shopOrderID);
  700. //确认订单的时候将用户余额修改为抵扣之后金额(协销下单,后台下单--待确认订单)注意用户自己下单的时候直接则两个金额同时减少,取消同时回滚
  701. // Double balancePayFee = order.getBalancePayFee();
  702. Double balancePayFee = order.getNewShopOrders().get(0).getAccountAmount();
  703. CmUser u = cmUserService.get(userID + "");
  704. if (null != u && null != balancePayFee) {
  705. Double userMoney = u.getUserMoney();
  706. if (null != userMoney) {
  707. u.setUserMoney(userMoney - balancePayFee);
  708. cmUserDao.updateMoney(u);
  709. }
  710. }
  711. addMessage(redirectAttributes, "确认订单成功");
  712. return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
  713. }
  714. /**
  715. * 取消订单
  716. *
  717. * @return
  718. */
  719. @RequiresPermissions("order:order:edit")
  720. @RequestMapping("cancelOrder")
  721. public String cancelOrder(Integer orderID, RedirectAttributes redirectAttributes) {
  722. newOrderService.cancelOrder(orderID);
  723. addMessage(redirectAttributes, "取消订单成功");
  724. return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
  725. }
  726. /**
  727. * 确认收货
  728. *
  729. * @param shopOrderID
  730. * @param redirectAttributes
  731. * @return
  732. */
  733. @RequiresPermissions("order:order:edit")
  734. @RequestMapping("confirmReceipt")
  735. public String confirmReceipt(Integer shopOrderID, RedirectAttributes redirectAttributes) {
  736. newShopOrderService.confirmReceipt(shopOrderID);
  737. addMessage(redirectAttributes, "确认收货成功");
  738. return "redirect:" + Global.getAdminPath() + "/order/detailPage/?shopOrderID=" + shopOrderID;
  739. }
  740. /**
  741. * 去子订单orderProduct页面
  742. *
  743. * @return
  744. */
  745. @RequiresPermissions("order:order:edit")
  746. @RequestMapping("toDeliveryPage")
  747. public String toDeliveryPage(NewOrder order, Model model) {
  748. List<NewOrderProduct> orderProduct = order.getOrderProduct();
  749. if (CollectionUtils.isNotEmpty(orderProduct))
  750. orderProduct.removeIf(p -> p.getProductID().intValue() == 999);
  751. for (NewOrderProduct newOrderProduct : orderProduct) {
  752. Integer cancelNum = newOrderProductDao.getActualCancelNum(newOrderProduct.getOrderProductID());
  753. cancelNum = cancelNum == null ? 0 : cancelNum;
  754. //统计未发货数量
  755. newOrderProduct.setNotOutStore(newOrderProduct.getNotOutStore() - cancelNum);
  756. }
  757. model.addAttribute("order", order);
  758. return "modules/order/ship";
  759. }
  760. @RequestMapping(value = "/shipDataVerification")
  761. @ResponseBody
  762. public Map<String,Object> shipData(Integer orderID,String firstClubType) {
  763. Map<String, Object> map = new HashMap<>();
  764. String mes = newOrderService.productDataVerification(orderID, firstClubType);
  765. if (mes != null) {
  766. map.put("code",1);
  767. map.put("mes",mes);
  768. } else {
  769. map.put("code",-1);
  770. }
  771. return map;
  772. }
  773. /**
  774. * 填写物流信息页面
  775. *
  776. * @param params key = orderProdductID value = 发货数量
  777. * @return
  778. */
  779. @RequiresPermissions("order:order:edit")
  780. @RequestMapping("addLogisticsInfo")
  781. @ResponseBody
  782. public Map<String, Object> addLogisticsInfo(Model model, @RequestBody Map<String, String> params) {
  783. Map<String, Object> r = new HashMap<>();
  784. // 参数转换
  785. List<NewOrderProduct> orderProductList = new ArrayList<>();
  786. for (Map.Entry<String, String> entry : params.entrySet()) {
  787. NewOrderProduct orderProduct = newOrderProductService.get(entry.getKey());
  788. orderProduct.setDeliveryNum(Integer.valueOf(entry.getValue()));
  789. orderProductList.add(orderProduct);
  790. }
  791. model.addAttribute("orderProductList", orderProductList);
  792. r.put("data", orderProductList);
  793. return r;
  794. }
  795. @RequestMapping("toShipLogistic")
  796. public String toShipLogistic(Integer orderID, Model model) {
  797. model.addAttribute("orderID", orderID);
  798. return "modules/order/shipLogistic";
  799. }
  800. private String setImagePath(String path) {
  801. //获取文件服务器地址
  802. String photoServer = Global.getConfig("photoServer");
  803. ImageUploadInfo saveImageSerivce = new ImageUploadInfo();
  804. if (StringUtils.isNotBlank(path) && !path.startsWith("http:") && !path.startsWith("https:")) {
  805. path = Encodes.urlDecode(path);
  806. String realPath = UploadImageUtils.getAbsolutePath(path);
  807. int pointerIndex = realPath.lastIndexOf(".");
  808. try {
  809. saveImageSerivce = UploadUtils.saveImageSerivce(realPath, pointerIndex, realPath);
  810. return photoServer + saveImageSerivce.getSource();
  811. } catch (Exception e) {
  812. return path;
  813. }
  814. }
  815. return path;
  816. }
  817. /**
  818. * 发货
  819. *
  820. * @param params 参数 包含 shopOrderID子订单ID, key = orderProductID value = 发货数量 物流单号信息 key = 物流公司 value = 快递单号
  821. * @return
  822. */
  823. @RequiresPermissions("order:order:edit")
  824. @RequestMapping("delivery")
  825. @ResponseBody
  826. public Map<String, Object> delivery(@RequestBody Map<String, Object> params) {
  827. logger.info("delivery params===== " + params);
  828. Map<Integer, Integer> orderProductMap = new HashMap<>();
  829. Map<Integer, List<NewOrderProduct>> deliveryData = new HashMap<>(); //eg: {shopOrderID : [orderProductList], }
  830. Map<String, List<String>> logisticsInfo = new HashMap<>();
  831. String remarks = null;
  832. String[] images = new String[0];
  833. // 参数转换
  834. for (Map.Entry<String, Object> entry : params.entrySet()) {
  835. if (entry.getKey().contains("orderProductID")) {
  836. orderProductMap.put(Integer.valueOf(entry.getKey().split("_")[1]), Integer.valueOf(entry.getValue().toString()));
  837. }
  838. if (entry.getKey().contains("logisticsInfo")) {
  839. List<String> logisticsNus = Arrays.asList(entry.getValue().toString().split("_"));
  840. logisticsInfo.put(entry.getKey().split("_")[1], logisticsNus);
  841. }
  842. if (entry.getKey().contains("remarks")) {
  843. remarks = entry.getValue().toString();
  844. }
  845. if (entry.getKey().contains("remarkImages")) {
  846. images = entry.getValue().toString().split("##");
  847. }
  848. }
  849. String[] imgPath = new String[images.length];
  850. if (images.length > 0) {
  851. for (int i = 0; i < imgPath.length; i++) {
  852. imgPath[i] = setImagePath(images[i]);
  853. }
  854. }
  855. String remarkImage = StringUtils.join(imgPath, "##");
  856. Map<String, Object> result = new HashMap<>();
  857. List<NewOrderProduct> orderProducts = new ArrayList<>();
  858. for (Map.Entry<Integer, Integer> entry : orderProductMap.entrySet()) {
  859. NewOrderProduct o = newOrderProductService.get(String.valueOf(entry.getKey()));
  860. if (o.getNotOutStore() - entry.getValue() < 0) {
  861. result.put("success", false);
  862. result.put("msg", "发货数量异常");
  863. return result;
  864. }
  865. o.setNotOutStore(o.getNotOutStore() - entry.getValue());
  866. o.setThisTimePostNum(entry.getValue()); //这一次的发货数量
  867. if (o.getNotOutStore().intValue() == 0) {
  868. // 订单商品 已经发完
  869. o.setStatus(3);
  870. } else {
  871. // 订单商品 还没发完
  872. o.setStatus(4);
  873. }
  874. orderProducts.add(o);
  875. if (deliveryData.get(o.getShopOrderID()) == null) {
  876. List<NewOrderProduct> ops = new ArrayList<>();
  877. deliveryData.put(o.getShopOrderID(), ops);
  878. ops.add(o);
  879. } else {
  880. List<NewOrderProduct> ops = deliveryData.get(o.getShopOrderID());
  881. ops.add(o);
  882. }
  883. }
  884. //物流批次id
  885. String logisticsBatchId;
  886. try {
  887. logisticsBatchId = newOrderService.delivery(deliveryData, orderProducts, orderProductMap, logisticsInfo, remarks, remarkImage);
  888. } catch (Exception e) {
  889. logger.info(e.toString(), e);
  890. result.put("success", false);
  891. result.put("msg", e.getMessage());
  892. return result;
  893. }
  894. result.put("success", true);
  895. result.put("logisticsBatchId", logisticsBatchId);
  896. return result;
  897. }
  898. // /**
  899. // * 订单拆分
  900. // *
  901. // * @return
  902. // */
  903. // @RequiresPermissions("order:order:edit")
  904. // @RequestMapping("splitOrder")
  905. // @ResponseBody
  906. // public Map<String, Object> splitOrder(@RequestBody Map<String, Map<String, String>> p) {
  907. // Map<String, Object> map = new HashMap<>();
  908. // try {
  909. // for (Map.Entry<String, Map<String, String>> b : p.entrySet()) {
  910. // Map<String, String> params = new HashMap<>();
  911. // params.put("shopOrderID", b.getKey().split("_")[1]);
  912. // for (Map.Entry<String, String> e : b.getValue().entrySet()) {
  913. // params.put(e.getKey(), e.getValue());
  914. // }
  915. // //子订单ID
  916. // Integer shopOrderID = null;
  917. // Map<Integer, Integer> orderProductMap = new HashMap<>();
  918. // for (Map.Entry<String, String> entry : params.entrySet()) {
  919. // if ("shopOrderID".equals(entry.getKey()))
  920. // shopOrderID = Integer.valueOf(entry.getValue());
  921. // if (entry.getKey().contains("orderProductID"))
  922. // orderProductMap.put(Integer.valueOf(entry.getKey().split("_")[1]), Integer.valueOf(entry.getValue()));
  923. // }
  924. // if (shopOrderID == null) {
  925. // logger.info("参数错误shopOrderID == null了");
  926. // map.put("success", false);
  927. // map.put("msg", "参数错误");
  928. // return map;
  929. // }
  930. // // 无收款记录的订单可对该订单下的商品可根据数量拆成一个订单
  931. // // 还需要加上有无收款记录的判断
  932. // List<Integer> receiptID = cmDiscernReceiptService.getReceiptRecords(shopOrderID);
  933. // if (CollectionUtils.isNotEmpty(receiptID)) {
  934. // //查到了收款记录仪 不能进行拆单操作了
  935. // logger.info("收款记录ID ----->" + StringUtil.join(receiptID, ","));
  936. // map.put("success", false);
  937. // map.put("msg", "订单进行过收款操作, 无法拆分");
  938. // return map;
  939. // }
  940. // List<NewOrderProduct> oldOrderProductList = new ArrayList<>();
  941. // List<NewOrderProduct> newOrderProductList = new ArrayList<>();
  942. // List<NewCmFinanceReceipts> cfrBakList = new ArrayList<>();
  943. // for (Map.Entry<Integer, Integer> entry : orderProductMap.entrySet()) {
  944. // if (entry.getValue() == null || entry.getValue() == 0) {
  945. // continue;// 拆分数量为零则跳过
  946. // }
  947. // NewOrderProduct dbOrderProduct = newOrderProductService.get(entry.getKey() + "");
  948. // // 商品订单里面的总的商品数量(不含赠品)
  949. // double productNum = dbOrderProduct.getNum().doubleValue();
  950. // NewOrderProduct newOrderProduct = newOrderProductService.get(entry.getKey() + "");
  951. // newOrderProduct.setOrderProductID(null);
  952. // newOrderProduct.setShopOrderID(null);
  953. // newOrderProduct.setShopOrderNo(null);
  954. // if (entry.getValue() >= dbOrderProduct.getNum()) {
  955. // // 购买数量(含赠品)数量拆分
  956. // // 拆分数量 >= 购买数量(不含赠品)
  957. // newOrderProduct.setNum(dbOrderProduct.getNum());
  958. // newOrderProduct.setPresentNum(entry.getValue() - dbOrderProduct.getNum());
  959. // int dbOrderProductNum = dbOrderProduct.getNum();
  960. // dbOrderProduct.setNum(0);
  961. // dbOrderProduct.setPresentNum(dbOrderProduct.getPresentNum() - (entry.getValue() - dbOrderProductNum));
  962. // if (dbOrderProduct.getNum().intValue() == 0 && dbOrderProduct.getPresentNum().intValue() == 0) {
  963. // dbOrderProduct.setDelFlag("1");
  964. // List<NewOrderProduct> orderProducts = newOrderProductService.findListByShopOrderID(shopOrderID); //子订单商品
  965. // if (CollectionUtils.isNotEmpty(orderProducts) && orderProducts.size() == 1) { // 子订单里面只有一类订单商品
  966. // // 别把商品全部拆走啦
  967. // map.put("success", false);
  968. // map.put("msg", "别把商品全部拆走啦");
  969. // return map;
  970. // }
  971. // }
  972. // } else {
  973. // newOrderProduct.setNum(entry.getValue());
  974. // newOrderProduct.setPresentNum(0);
  975. // dbOrderProduct.setNum(dbOrderProduct.getNum() - entry.getValue());
  976. // }
  977. // dbOrderProduct.setNotOutStore(dbOrderProduct.getNotOutStore() - entry.getValue()); //未发货数量
  978. // newOrderProduct.setNotOutStore(entry.getValue()); //未发货数量
  979. //
  980. // //总税费 TotalAddedValueTax
  981. // Double oldAddedValueTax = dbOrderProduct.getTotalAddedValueTax();
  982. // Double newAddedValueTax = newOrderProduct.getTotalAddedValueTax();
  983. // dbOrderProduct.setTotalAddedValueTax(oldAddedValueTax * (dbOrderProduct.getNum() / productNum)); //单个税费 * 购买数量(不含赠品)
  984. // newOrderProduct.setTotalAddedValueTax(newAddedValueTax * (newOrderProduct.getNum() / productNum)); //单个税费 * 购买数量(不含赠品)
  985. //
  986. // //总应付税费 shouldPayTotalTax---获取老的应付税费(不能使用单个计算,因为单个税费不包含经理折扣)
  987. // Double oldshouldPayTotalTax = dbOrderProduct.getShouldPayTotalTax();
  988. // Double NewhouldPayTotalTax = newOrderProduct.getShouldPayTotalTax();
  989. // dbOrderProduct.setShouldPayTotalTax(oldshouldPayTotalTax * (dbOrderProduct.getNum() / productNum)); //单个税费 * 购买数量(不含赠品)
  990. // newOrderProduct.setShouldPayTotalTax(NewhouldPayTotalTax * (newOrderProduct.getNum() / productNum)); //单个税费 * 购买数量(不含赠品)
  991. //
  992. // // 总价 totalFee
  993. // dbOrderProduct.setTotalFee(dbOrderProduct.getDiscountPrice() * dbOrderProduct.getNum() + (dbOrderProduct.getAddedValueTax() * dbOrderProduct.getNum())); //折后单价 * 购买数量(不含赠品) + 税费
  994. // newOrderProduct.setTotalFee(newOrderProduct.getDiscountPrice() * newOrderProduct.getNum() + (newOrderProduct.getAddedValueTax() * newOrderProduct.getNum())); //折后单价 * 购买数量(不含赠品)+ 税费
  995. // //todo 5.0.0 经理折扣在订单商品中移除
  996. // // 经理折扣 discountFee
  997. // dbOrderProduct.setDiscountFee(dbOrderProduct.getDiscountFee() * (MathUtil.div(dbOrderProduct.getNum(), productNum).doubleValue())); // 按拆单前后购买数量的比例来分经理折扣
  998. //// cfrOld.setDeductionAmount(dbOrderProduct.getDiscountFee().toString());
  999. // newOrderProduct.setDiscountFee(newOrderProduct.getDiscountFee() * (MathUtil.div(newOrderProduct.getNum(), productNum).doubleValue())); // 按拆单前后购买数量的比例来分经理折扣
  1000. //// cfrNew.setDeductionAmount(newOrderProduct.getDiscountFee().toString());
  1001. // // 优惠 preferential
  1002. // dbOrderProduct.setPreferential((dbOrderProduct.getPrice() - dbOrderProduct.getDiscountPrice()) * dbOrderProduct.getNum()); // 优惠 (price - discountPrice) * num
  1003. // newOrderProduct.setPreferential((newOrderProduct.getPrice() - newOrderProduct.getDiscountPrice()) * newOrderProduct.getNum()); // 优惠 (price - discountPrice) * num
  1004. // // 应付金额
  1005. // dbOrderProduct.setShouldPayFee(dbOrderProduct.getTotalFee() - dbOrderProduct.getDiscountFee()); //应付金额 = totalFee - discountFee'
  1006. //// cfrOld.setShouldPayAmount(dbOrderProduct.getShouldPayFee().toString());
  1007. // newOrderProduct.setShouldPayFee(newOrderProduct.getTotalFee() - newOrderProduct.getDiscountFee()); //应付金额 = totalFee - discountFee'
  1008. //// cfrNew.setShouldPayAmount(newOrderProduct.getShouldPayFee().toString());
  1009. // // 应付供应商
  1010. // dbOrderProduct.setShopFee(dbOrderProduct.getSingleShopFee() * (dbOrderProduct.getNum() + dbOrderProduct.getPresentNum()));
  1011. // newOrderProduct.setShopFee(newOrderProduct.getSingleShopFee() * (newOrderProduct.getNum() + newOrderProduct.getPresentNum())); // 后台拆单后订单有采美 发货 应付金额全部给采美
  1012. // // 应付第三方(不能使用单个计算,因为单个税费不包含经理折扣)
  1013. // Double oldOtherFee = dbOrderProduct.getOtherFee();
  1014. // Double newOtherFee = newOrderProduct.getOtherFee();
  1015. // dbOrderProduct.setOtherFee((oldOtherFee / productNum) * dbOrderProduct.getNum());
  1016. // newOrderProduct.setOtherFee((newOtherFee / productNum) * newOrderProduct.getNum()); // 后台拆单后订单有采美 发货 应付金额全部给采美
  1017. // // 应付采美
  1018. // Double oldCmFee = dbOrderProduct.getCmFee();
  1019. // Double newCmFee = newOrderProduct.getCmFee();
  1020. // dbOrderProduct.setCmFee((oldCmFee / productNum) * dbOrderProduct.getNum());
  1021. // newOrderProduct.setCmFee((newCmFee / productNum) * newOrderProduct.getNum());
  1022. // //重新计算orderProduct总价
  1023. // dbOrderProduct.setTotalAmount(dbOrderProduct.getNum() * dbOrderProduct.getPrice());
  1024. //// cfrOld.setTotalAmount(dbOrderProduct.getTotalAmount().toString());
  1025. // newOrderProduct.setTotalAmount(newOrderProduct.getNum() * newOrderProduct.getPrice());
  1026. //// cfrNew.setTotalAmount(newOrderProduct.getTotalAmount().toString());
  1027. // newOrderProduct.setShopID(1000); // shopID = 1000 数据库固定数据表示采美
  1028. // oldOrderProductList.add(dbOrderProduct);
  1029. // newOrderProductList.add(newOrderProduct);
  1030. // }
  1031. // NewShopOrder dbShopOrder = newShopOrderService.findByShopOrderID(shopOrderID);
  1032. // // 我要把没有参与拆单的订单商品 添加到oldOrderProductList 里面重新统计订单金额
  1033. // loopA:
  1034. // for (NewOrderProduct nop : dbShopOrder.getNewOrderProducts()) {
  1035. // loopB:
  1036. // for (NewOrderProduct old : oldOrderProductList) {
  1037. // if (old.getOrderProductID().intValue() == nop.getOrderProductID().intValue()) {
  1038. // continue loopA;
  1039. // }
  1040. // }
  1041. // oldOrderProductList.add(nop); // looB 正常结束 说明这个nop没有参与拆单
  1042. // }
  1043. // newOrderService.splitOrder(shopOrderID, oldOrderProductList, newOrderProductList, cfrBakList);
  1044. // }
  1045. // map.put("success", true);
  1046. // } catch (Exception e) {
  1047. // logger.debug(e.toString(), e);
  1048. // map.put("success", false);
  1049. // map.put("msg", "拆分失败");
  1050. // }
  1051. // return map;
  1052. // }
  1053. /**
  1054. * 获取子订单所有的发货记录
  1055. *
  1056. * @param shopOrderID
  1057. * @return
  1058. */
  1059. @RequiresPermissions("order:order:edit")
  1060. @RequestMapping("logisticsList")
  1061. public String logisticsList(Integer shopOrderID, Model model) {
  1062. List<List<NewOrderProduct>> logisticsList = newOrderProductService.logisticsList(shopOrderID);
  1063. model.addAttribute("logisticsList", logisticsList);
  1064. return "modules/order/addLogistics";
  1065. }
  1066. /**
  1067. * 发货完成以后去追加物流信息的页面,并且展示已有的物流单号
  1068. *
  1069. * @param logisticsBatchID 发货批次ID
  1070. * @return
  1071. */
  1072. @RequiresPermissions("order:order:edit")
  1073. @RequestMapping("toAppendLogisticsInfo")
  1074. public String toAppendLogisticsInfo(String logisticsBatchID, Model model) {
  1075. List<NewOrderProduct> opInfo = newShopOrderService.getBatchInfo(logisticsBatchID);
  1076. Map<String, List<String>> loInfo = newShopOrderService.getLogisticsInfo(logisticsBatchID);
  1077. model.addAttribute("opInfo", opInfo);
  1078. model.addAttribute("loInfo", loInfo);
  1079. model.addAttribute("logisticsBatchID", logisticsBatchID);
  1080. return "modules/order/appendShipLogistic";
  1081. }
  1082. /**
  1083. * 已经发货后追加物流信息
  1084. * params = {logisticsBatchID : 发货批次, remarks: 备注, logisticsInfo_快递公司名称: 单号_单号_.... }
  1085. *
  1086. * @return
  1087. */
  1088. @RequiresPermissions("order:order:edit")
  1089. @RequestMapping("appendLogisticsInfo")
  1090. @ResponseBody
  1091. public Map<String, Object> appendLogisticsInfo(@RequestBody Map<String, String> params) {
  1092. Map<String, Object> result = new HashMap<>();
  1093. String logisticsBatchID = null;
  1094. String remarks = null;
  1095. Map<String, List<String>> logisticsInfo = new HashMap<>();//物流编码
  1096. // 参数转换
  1097. for (Map.Entry<String, String> entry : params.entrySet()) {
  1098. if ("logisticsBatchID".equals(entry.getKey()))
  1099. logisticsBatchID = entry.getValue();
  1100. if ("remarks".equals(entry.getKey()))
  1101. remarks = entry.getValue();
  1102. if (entry.getKey().contains("logisticsInfo")) {
  1103. List<String> logisticsNus = Arrays.asList(entry.getValue().split("_"));
  1104. logisticsInfo.put(entry.getKey().split("_")[1], logisticsNus);
  1105. }
  1106. }
  1107. try {
  1108. Integer shopOrderID = newShopOrderService.appendLogisticsInfo(logisticsBatchID, logisticsInfo, remarks);
  1109. result.put("shopOrderID", shopOrderID);
  1110. result.put("success", true);
  1111. } catch (Exception e) {
  1112. result.put("success", false);
  1113. logger.debug(e.toString(), e);
  1114. result.put("msg", "数据异常");
  1115. }
  1116. return result;
  1117. }
  1118. /**
  1119. * 根据订单类型以及状态去不同的详情页
  1120. * (这是5.0.0以前的订单详情页面)
  1121. *
  1122. * @param order
  1123. * @return
  1124. */
  1125. @RequiresPermissions("order:order:edit")
  1126. @RequestMapping("detailPage")
  1127. public String detailPage(NewOrder order, Integer shopOrderID, Model model) {
  1128. if (order.getOrderID() != null) {
  1129. model.addAttribute("orderID", order.getOrderID());
  1130. model.addAttribute("orderProducts", order.getOrderProduct());
  1131. } else {
  1132. model.addAttribute("shopOrderID", shopOrderID);
  1133. }
  1134. NewShopOrder shopOrder = null;
  1135. if (shopOrderID != null) {
  1136. shopOrder = newShopOrderService.findByShopOrderID(shopOrderID);
  1137. order = newOrderService.get(shopOrder.getOrderID().toString());
  1138. model.addAttribute("orderProducts", shopOrder.getNewOrderProducts());
  1139. model.addAttribute("snOrderProducts", shopOrder.getSnOrderProducts());
  1140. }
  1141. String payWay = order.getPayWay();
  1142. if (payWay != null) {
  1143. for (NewPayWay type : NewPayWay.values()) {
  1144. if (payWay.contains(type.getCode() + ""))
  1145. payWay = payWay.replaceAll(type.getCode() + "", type.getDesc());
  1146. }
  1147. order.setPayWay(payWay);
  1148. } else {
  1149. order.setPayWay("-");
  1150. }
  1151. model.addAttribute("orderUserInfo", order.getBpOrderUserinfo());
  1152. model.addAttribute("shopOrder", shopOrder);
  1153. model.addAttribute("order", order);
  1154. if ("0".equals(order.getOrderType())) {
  1155. // 协销订单
  1156. return "modules/order/bpOrderDetail";
  1157. } else {
  1158. // 普通订单
  1159. return "modules/order/normalOrderDetail";
  1160. }
  1161. }
  1162. /**
  1163. * 订单详情页 5.0.0版本 x
  1164. * 这个是新改的协销订单的详情页面
  1165. *
  1166. * @param order
  1167. * @return
  1168. */
  1169. @RequiresPermissions("order:order:view")
  1170. @RequestMapping("detail")
  1171. public String detail(NewOrder order, Model model) {
  1172. if(order.getShopOrderID()!=null){
  1173. List<NewShopOrder> newShopOrders= order.getNewShopOrders().stream().filter(newShopOrder -> newShopOrder.getShopOrderID().equals(order.getShopOrderID())).collect(Collectors.toList());
  1174. order.setNewShopOrders(newShopOrders);
  1175. }
  1176. BpClause bpClause = new BpClause();
  1177. bpClause.setEnabledStatus("1");
  1178. List<BpClause> bpClauses = bpClauseService.findList(bpClause);
  1179. model.addAttribute("bpClauses", bpClauses);
  1180. //获取订单是否可以申请付款
  1181. List<Integer> oId = new ArrayList<>();
  1182. oId.add(order.getOrderID());
  1183. List<Integer> orderIdsInApplyReturn = cmReturnedPurchaseDao.findOrderIDsInApplyReturnFlag(oId);
  1184. if (CollectionUtils.isNotEmpty(orderIdsInApplyReturn) && orderIdsInApplyReturn.size() > 0) {
  1185. order.setApplyReturnedPurchaseFlag("0");
  1186. } else {
  1187. order.setApplyReturnedPurchaseFlag("1");
  1188. }
  1189. //判断是否有在收款审核的订单
  1190. List<Integer> ids = cmReceiptOrderRelationDao.toAudit(order.getOrderID());
  1191. if (ids != null && ids.size() > 0) {
  1192. order.setToAudit("1");
  1193. }
  1194. if (order.getProductCount() == null) {
  1195. order.setProductCount(1);
  1196. }
  1197. //是否抹平支付过(抹平最多只允许存在一次)
  1198. CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findSmoothoutInfo(order.getOrderID().toString());
  1199. if (null != cmDiscernReceipt) {
  1200. order.setAssociationType(cmDiscernReceipt.getAssociationType());
  1201. String confirmType = cmDiscernReceipt.getConfirmType();
  1202. order.setConfirmType(confirmType);
  1203. // 是否是一比款收了多个订单
  1204. if (StringUtils.equals(confirmType, "1") || StringUtils.equals(confirmType, "2") || StringUtils.equals(confirmType, "3")) {
  1205. List<CmReceiptOrderRelation> byReceiptList = cmReceiptOrderRelationService.findByReceiptID(cmDiscernReceipt.getId());
  1206. if (CollectionUtils.isNotEmpty(byReceiptList) && byReceiptList.size() > 1) {
  1207. order.setReceiptOrderFlag(true);
  1208. }
  1209. }
  1210. }
  1211. // 判断订单关闭环境
  1212. if (StringUtils.isNotBlank(order.getCloseReason())) {
  1213. if (order.getCloseReason().contains("超时")) {
  1214. order.setCloseReason("超时关闭");
  1215. } else if (order.getCloseReason().contains("后台手动关闭")) {
  1216. order.setCloseReason("后台手动关闭");
  1217. } else if (order.getCloseReason().contains("用户主动取消订单")) {
  1218. order.setCloseReason("客户主动关闭");
  1219. } else if (order.getCloseReason().contains("协销帮用户取消订单")) {
  1220. order.setCloseReason("协销关闭");
  1221. } else {
  1222. order.setCloseReason("未知");
  1223. }
  1224. }
  1225. // 订单已收款才会出现抹平或者多收退余额,(已收再退款或者撤销退款订单即使存在抹平也需要当未抹平重新计算付款)
  1226. String receiptStatus = order.getReceiptStatus();
  1227. if (StringUtils.equals("3", receiptStatus)) {
  1228. if (null != cmDiscernReceipt) {
  1229. String confirmType = cmDiscernReceipt.getConfirmType();
  1230. order.setConfirmType(confirmType);
  1231. double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(order.getOrderID()));
  1232. order.setOrderReceivedAmount(associateAmount);
  1233. //大额退余额
  1234. if (StringUtils.equals("3", confirmType)) {
  1235. String id = cmDiscernReceipt.getId();
  1236. double returnBalanceAmount = cmDiscernReceiptDao.getReturnBalanceAmount(id);
  1237. order.setReturnBalanceAmount(returnBalanceAmount);
  1238. }
  1239. }
  1240. }
  1241. //一个子订单只有一个商品时,不可拆分
  1242. int count = 0;
  1243. for (NewShopOrder newShopOrder : order.getNewShopOrders()) {
  1244. if (newShopOrder.getShopID() != 998) {
  1245. count++;
  1246. }
  1247. }
  1248. if (order.getProductCount() <= count) {
  1249. order.setSplitFlag("0");
  1250. }
  1251. model.addAttribute("order", order);
  1252. if ("0".equals(order.getStatus())) {
  1253. try {
  1254. NewOrderConfig confirmOverTime = newOrderConfigService.getValueByKey("confirmOverTime");
  1255. Double value = confirmOverTime.getValue(); //待确认超过 value 小时自动取消订单
  1256. GregorianCalendar gc = new GregorianCalendar();
  1257. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1258. Date orderTime = sdf.parse(order.getOrderTime());
  1259. gc.setTime(orderTime);
  1260. gc.add(Calendar.HOUR, value.intValue());
  1261. Date time = gc.getTime();
  1262. String ot = sdf.format(time);
  1263. if (time.after(new Date()))
  1264. model.addAttribute("time", ot);
  1265. } catch (Exception e) {
  1266. e.printStackTrace();
  1267. }
  1268. }
  1269. CmReturnedPurchase cmReturnedPurchase = new CmReturnedPurchase();
  1270. cmReturnedPurchase.setStatus("2");
  1271. cmReturnedPurchase.setOrderID(order.getOrderID());
  1272. List<CmReturnedPurchase> dataList = cmReturnedPurchaseService.getReturnedPurchaseList(cmReturnedPurchase);
  1273. Double returnedPurchaseFee = 0D; //退款(退货)总金额
  1274. Double refundFee = 0D; //退款总额(给买家)
  1275. for (CmReturnedPurchase bean : dataList) {
  1276. if (!bean.getStatus().equals("3")) {
  1277. returnedPurchaseFee += bean.getReturnedPurchaseFee();
  1278. refundFee += bean.getRefundFee();
  1279. }
  1280. }
  1281. double returnValue = 0d; //退货价值
  1282. if (order.getDiscountFee() != null) {
  1283. if (order.getDiscountFee() >= returnedPurchaseFee) {
  1284. returnValue = 0d; //如果经理折扣大于退款(退货)总金额之和 那么先抵扣经理折扣 退款价值为0
  1285. } else {
  1286. returnValue = returnedPurchaseFee - order.getDiscountFee(); //抵用完经理折扣后才是真实价值
  1287. }
  1288. }
  1289. //订单已收金额
  1290. Double brokerage = cmUtilsDao.selectPayTotalFees(order.getOrderID());
  1291. model.addAttribute("brokerage", brokerage);
  1292. Double receiptAmount = cmDiscernReceiptService.findOrderReceipt(order.getOrderID());
  1293. model.addAttribute("returnValue", returnValue);
  1294. model.addAttribute("receiptAmount", receiptAmount == null ? 0 : receiptAmount);
  1295. model.addAttribute("returnedPurchaseFee", returnedPurchaseFee);
  1296. return "modules/order/orderDetail";
  1297. }
  1298. /**
  1299. * 去拆分订单详情页 5.0.0版本
  1300. *
  1301. * @param order
  1302. * @return
  1303. */
  1304. @RequiresPermissions("order:order:edit")
  1305. @RequestMapping("toSplit")
  1306. public String toSplit(NewOrder order, Model model) {
  1307. BpClause bpClause = new BpClause();
  1308. bpClause.setEnabledStatus("1");
  1309. List<BpClause> bpClauses = bpClauseService.findList(bpClause);
  1310. model.addAttribute("bpClauses", bpClauses);
  1311. model.addAttribute("order", order);
  1312. return "modules/order/splitPage";
  1313. }
  1314. /**
  1315. * 普通订单修改
  1316. *
  1317. * @param order
  1318. * @param model
  1319. * @return
  1320. */
  1321. @RequiresPermissions("order:order:edit")
  1322. @RequestMapping("normalOrderModify")
  1323. public String normalOrderModify(NewOrder order, Model model) {
  1324. model.addAttribute("order", order);
  1325. return "modules/order/modifyProduct";
  1326. }
  1327. /**
  1328. * 更新普通订单
  1329. *
  1330. * @param newOrder
  1331. * @param model
  1332. * @return
  1333. */
  1334. @RequiresPermissions("order:order:edit")
  1335. @RequestMapping("updateNormalOrder")
  1336. public String updateNormalOrder(NewOrder newOrder, Model model) {
  1337. if (!beanValidator(model, newOrder)) {
  1338. return normalOrderModify(newOrder, model);
  1339. }
  1340. if (CollectionUtils.isEmpty(newOrder.getOrderProduct())) {
  1341. model.addAttribute("message", "保存失败商品不能为空");
  1342. return normalOrderModify(newOrder, model);
  1343. } else {
  1344. List<NewOrderProduct> orderProductList = Lists.newArrayList();
  1345. for (NewOrderProduct newOrderProduct : newOrder.getOrderProduct()) {
  1346. if (StringUtils.isNotEmpty(newOrderProduct.getEnabledStatus())) {
  1347. NewOrderProduct o = (NewOrderProduct) JsonMapper.fromJsonString(newOrderProduct.getEnabledStatus(), NewOrderProduct.class);
  1348. Integer presentNum = o.getPresentNum() != null ? o.getPresentNum() : 0;
  1349. o.setPreferential((o.getPrice() - o.getDiscountPrice()) * o.getNum());//折扣
  1350. o.setDiscountFee(o.getTotalFee() - o.getShouldPayFee());//经理折扣
  1351. o.setTotalAmount(o.getPrice() * o.getNum());//商品总金额
  1352. o.setNotOutStore(o.getNum() + presentNum);
  1353. orderProductList.add(o);
  1354. }
  1355. }
  1356. if (CollectionUtils.isNotEmpty(orderProductList)) {
  1357. newOrder.setOrderProduct(orderProductList);
  1358. }
  1359. }
  1360. //更新订单
  1361. newOrderService.updateNormalOrder(newOrder);
  1362. return "redirect:" + Global.getAdminPath() + "/order/detailPage/?id=" + newOrder.getOrderID();
  1363. }
  1364. /**
  1365. * 物流详情展示
  1366. * <p>
  1367. * // * @param shopOrderID
  1368. *
  1369. * @param model
  1370. * @return
  1371. */
  1372. @RequiresPermissions("order:order:edit")
  1373. @RequestMapping("logisticsDetails")
  1374. public String logisticsDetails(Integer orderID,@RequestParam(required = false) Integer shopOrderID , String logisticsBatchID, Model model, Integer orderType) {
  1375. List<LogisticsInfoVo> logisticsInfoVos = new ArrayList<>();
  1376. logisticsInfoVos = newShopOrderService.logisticsDetails(orderID, shopOrderID , logisticsBatchID);
  1377. model.addAttribute("orderID", orderID);
  1378. model.addAttribute("orderType", orderType);
  1379. model.addAttribute("logisticsInfoVos", logisticsInfoVos);
  1380. return "modules/order/logisticsDetails";
  1381. }
  1382. /**
  1383. * 删除订单
  1384. *
  1385. * @return
  1386. */
  1387. @RequiresPermissions("order:order:delete")
  1388. @RequestMapping("deleteOrder")
  1389. public String deleteOrder(NewOrder order, Integer shopOrderID) {
  1390. if (order.getOrderID() != null) {
  1391. newOrderService.deleteOrder(order);
  1392. } else if (shopOrderID != null) {
  1393. newShopOrderService.deleteOrder(shopOrderID);
  1394. }
  1395. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  1396. }
  1397. // 保存订单条款信息
  1398. @RequestMapping(value = "editclausecontent")
  1399. public String editclausecontent(NewOrder order, Model model) {
  1400. model.addAttribute("order", order);
  1401. return "modules/order/orderClause";
  1402. }
  1403. /**
  1404. * 置为已收款已付款
  1405. *
  1406. * @param orderId
  1407. * @return
  1408. */
  1409. @RequestMapping("toChangePay")
  1410. public String changePay(Integer orderId) {
  1411. newOrderService.changePay(orderId);
  1412. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  1413. }
  1414. @RequestMapping(value = "saveClause")
  1415. public String saveClause(NewOrder order, RedirectAttributes redirectAttributes, HttpServletRequest request) {
  1416. String clauseContent = request.getParameter("clauseContent");
  1417. String clauseName = request.getParameter("clauseName");
  1418. order.setClauseContent(clauseContent);
  1419. order.setClauseName(clauseName);
  1420. newOrderService.updateClauseContent(order);
  1421. if (order.getOrderID() == null) {
  1422. //订单重新保存后则修改订单商品需供应商确认
  1423. newOrderProductService.updateShopConfigFlag(order.getOrderID());
  1424. }
  1425. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  1426. }
  1427. /**
  1428. * 导出订单信息
  1429. *
  1430. * @param contractOrder
  1431. * @param shopOrderID
  1432. * @return
  1433. */
  1434. @RequiresPermissions("order:order:export")
  1435. @RequestMapping(value = "exportOrderInfo")
  1436. public void exportOrderInfo(NewOrder contractOrder, Integer shopOrderID, RedirectAttributes redirectAttributes, HttpServletResponse response) {
  1437. //获取订单数据
  1438. String fileName = contractOrder.getOrderID() + "-" + contractOrder.getBpOrderUserinfo().getName() + "-采美365网购订单.xls";
  1439. String template = Global.getConfig("export.template");
  1440. String templateFileName = template + "/new_bpstages_template.xls";
  1441. try {
  1442. List<NewOrderProduct> products = newOrderProductService.findWithOrderID(contractOrder.getOrderID());
  1443. for (NewOrderProduct orderProduct2 : products) {
  1444. //如果 =0 则设置为 0 方便页面判断
  1445. BigDecimal totalPay = new BigDecimal(orderProduct2.getTotalFee());
  1446. if (totalPay.compareTo(BigDecimal.ZERO) == 0) {
  1447. orderProduct2.setTotalFee(0D);
  1448. }
  1449. //设置税费
  1450. if (null == orderProduct2.getAddedValueTax() || "".equals(orderProduct2.getAddedValueTax()) || new BigDecimal(orderProduct2.getAddedValueTax()).compareTo(BigDecimal.ZERO) == 0) {
  1451. orderProduct2.setAddedValueTax(0D);
  1452. }
  1453. String image = orderProduct2.getImage();
  1454. //设置图片完整路径
  1455. orderProduct2.setImage(AppUtils.getProductImageURL(image, 0, Global.getConfig("wwwServer")));
  1456. }
  1457. List<NewOrderProduct> products1 = newOrderProductService.findByOrderIdGroupByShopId(contractOrder.getOrderID());
  1458. StringBuffer shopNameInfo = new StringBuffer();
  1459. //设置供应商信息
  1460. for (NewOrderProduct orderProduct1 : products1) {
  1461. shopNameInfo.append(orderProduct1.getShopName() + "、");
  1462. }
  1463. shopNameInfo.setLength(shopNameInfo.length() - 1);
  1464. contractOrder.setShopNameInfo(shopNameInfo.toString());
  1465. //设置订单商品信息
  1466. contractOrder.setOrderProduct(products);
  1467. BigDecimal stagesTotalFee = new BigDecimal(0);
  1468. StringBuffer buffer = new StringBuffer();
  1469. //设置list数据
  1470. List<NewOrder> list = Lists.newArrayList();
  1471. contractOrder.setClauseContent(StringUtils.replaceHtml(contractOrder.getClauseContent()));
  1472. list.add(contractOrder);
  1473. new ExcelUtil().createExcel(templateFileName, list, fileName, response);
  1474. } catch (Exception e) {
  1475. addMessage(redirectAttributes, "订单信息导出失败!" + e.getMessage());
  1476. e.printStackTrace();
  1477. }
  1478. }
  1479. public void excel(HttpServletResponse response, List<NewReceiptList> excelList) {
  1480. //创建一个webbook,对应一个Excel文件
  1481. HSSFWorkbook wb = new HSSFWorkbook();
  1482. //在webbook中添加一个sheet,对应Excel文件中的sheet
  1483. HSSFSheet sheet = wb.createSheet("采美财务对账订单");
  1484. //创建单元格,并设置值表头 设置表头居中
  1485. HSSFCellStyle style = wb.createCellStyle();
  1486. style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直
  1487. style.setAlignment(HorizontalAlignment.CENTER);//水平
  1488. style.setFillForegroundColor(HSSFColor.ORANGE.index);
  1489. HSSFCellStyle textStyle = wb.createCellStyle();
  1490. // textStyle.setf
  1491. // textStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
  1492. // textStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
  1493. //设置列宽(第几列,宽度)receivedTotal
  1494. sheet.setColumnWidth(0, 1500);//订单ID
  1495. sheet.setColumnWidth(1, 4800);//订单编号
  1496. sheet.setColumnWidth(2, 4800);//订单日期
  1497. sheet.setColumnWidth(3, 4800);//收款日期
  1498. sheet.setColumnWidth(4, 5000);//支付方式
  1499. sheet.setColumnWidth(5, 5000);//客户(会所)
  1500. sheet.setColumnWidth(6, 3200);//订单实付金额
  1501. sheet.setColumnWidth(7, 3200);//已收总金额
  1502. sheet.setColumnWidth(8, 3200);//已收商品金额
  1503. sheet.setColumnWidth(9, 3200);//已收运费
  1504. sheet.setColumnWidth(10, 5000);//付款方式
  1505. sheet.setColumnWidth(11, 3200);//应付税费
  1506. sheet.setColumnWidth(12, 3200);//应付供应商
  1507. sheet.setColumnWidth(13, 6000);//供应商名称
  1508. sheet.setColumnWidth(14, 3200);//支付类型
  1509. sheet.setColumnWidth(15, 3200);//已付金额
  1510. sheet.setColumnWidth(16, 3200);//应付第三方
  1511. sheet.setColumnWidth(17, 3200);//应付采美
  1512. sheet.setDefaultRowHeight((short) 0x270);//设置行高----貌似没有效果,所以下面每行独立设置行高
  1513. //第一行(表头)
  1514. String[] head = new String[]{"订单ID", "订单编号", "订单日期", "收款日期", "支付方式", "客户(会所)", "订单实付金额", "已收总金额", "已收商品金额", "已收运费", "付款方式", "应付税费", "应付供应商", "供应商名称", "支付类型", "已付金额", "应付第三方", "应付采美"};//在excel中的第4行每列的参数
  1515. HSSFCell cell;
  1516. HSSFRow row = sheet.createRow(0);
  1517. for (int i = 0; i < head.length; i++) {
  1518. cell = row.createCell(i);
  1519. row.setHeight((short) 0x270);
  1520. cell.setCellValue(head[i]);
  1521. cell.setCellStyle(style);
  1522. }
  1523. Integer currentUseRow = 1;//当前已使用行号(表头存在一行从1开始)
  1524. Integer currentMergeStartRow = 1;//开始合并行号
  1525. //循环遍历所有集合数据
  1526. if (CollectionUtils.isNotEmpty(excelList)) {
  1527. for (NewReceiptList rp : excelList) {
  1528. List<NewOrderShop> newOrderShopList = rp.getNewOrderShopList();
  1529. if (CollectionUtils.isNotEmpty(newOrderShopList)) {
  1530. int size = newOrderShopList.size() * 2;
  1531. for (int i = 0; i < newOrderShopList.size() * 2; i++) {
  1532. String shopName = "";
  1533. //String shopFees = newOrderShopList.get(i).getShopFees();//已付供应商金额
  1534. //1、首先求解本次遍历的i原始值是多少(列如:i=0[0/1],i=1[2/3],i=2[4/5]当为[]中的值时i的原始值如i)(相邻两行需相同,合并所需)
  1535. //1.1、求解公式集合原始i的值【为基数时:遍历i的值 减 1 除 2 、为偶数时:遍历i的值 除 2】
  1536. if (0 == i) {
  1537. shopName = newOrderShopList.get(i).getShopName();
  1538. } else {
  1539. int valuei = i;
  1540. boolean isEven = false;//是否是偶数,默认基数
  1541. isEven = i % 2 == 0 ? true : false;//是否是偶数
  1542. if (isEven) {//偶数
  1543. valuei = i / 2;
  1544. } else {//基数
  1545. valuei = (i - 1) / 2;
  1546. }
  1547. shopName = newOrderShopList.get(valuei).getShopName();
  1548. }
  1549. HSSFRow row2 = sheet.createRow(currentUseRow);
  1550. row2.setHeight((short) 0x270);
  1551. //创建订单ID列
  1552. cell = row2.createCell(0);
  1553. cell.setCellValue(rp.getOrderId());
  1554. cell.setCellStyle(textStyle);
  1555. //创建订单编号列
  1556. cell = row2.createCell(1);
  1557. cell.setCellValue(rp.getOrderNo());
  1558. cell.setCellStyle(textStyle);
  1559. //创建订单日期列
  1560. cell = row2.createCell(2);
  1561. String createTime = "———————";
  1562. if (null != rp.getCreateDate()) {
  1563. createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(rp.getCreateDate());
  1564. }
  1565. cell.setCellValue(createTime);
  1566. cell.setCellStyle(textStyle);
  1567. //创建收款日期列
  1568. cell = row2.createCell(3);
  1569. String PayTime = "———————";
  1570. if (null != rp.getPayTime()) {
  1571. PayTime = rp.getPayTime();
  1572. }
  1573. cell.setCellValue(PayTime);
  1574. cell.setCellStyle(textStyle);
  1575. //创建支付方式列
  1576. cell = row2.createCell(4);
  1577. String payWay = "———————";
  1578. if (StringUtils.isNotEmpty(rp.getPayWay())) {
  1579. payWay = rp.getPayWay();
  1580. }
  1581. cell.setCellValue(payWay);
  1582. cell.setCellStyle(textStyle);
  1583. //创建客户(会所)列
  1584. cell = row2.createCell(5);
  1585. cell.setCellValue(rp.getName());
  1586. cell.setCellStyle(textStyle);
  1587. //创建订单实付金额列
  1588. cell = row2.createCell(6);
  1589. String payTotalFee = "0";
  1590. if (null != rp.getReceived()) {
  1591. payTotalFee = String.format("%.2f", Double.parseDouble(rp.getPayTotalFee()));
  1592. }
  1593. String postageFlag = rp.getPostageFlag();//该订单是否包含99元包邮劵商品:0不是,1是99包邮劵
  1594. if (StringUtils.equals("1", postageFlag)) {
  1595. payTotalFee = payTotalFee + "(含99元包邮劵)";
  1596. }
  1597. cell.setCellValue(payTotalFee);
  1598. cell.setCellStyle(textStyle);
  1599. //创建已收总金额列
  1600. cell = row2.createCell(7);
  1601. String receivedTotal = "0";
  1602. if (null != rp.getReceivedTotal()) {
  1603. receivedTotal = String.format("%.2f", Double.parseDouble(rp.getReceivedTotal()));
  1604. }
  1605. cell.setCellValue(receivedTotal);
  1606. cell.setCellStyle(textStyle);
  1607. //创建已收商品金额列
  1608. cell = row2.createCell(8);
  1609. String received = "0";
  1610. if (null != rp.getReceived()) {
  1611. received = String.format("%.2f", Double.parseDouble(rp.getReceived()));
  1612. }
  1613. cell.setCellValue(received);
  1614. cell.setCellStyle(textStyle);
  1615. //创建已收运费列
  1616. cell = row2.createCell(9);
  1617. String freight = "0";//默认运费
  1618. String status = rp.getStatus();//状态:0, "待付款" 1,"待确认" 2, "已付款" "6, "交易关闭
  1619. String freePostFlag = rp.getFreePostFlag();//免邮标志 运费:-1到付,0包邮,1需要运费
  1620. //没区分协销或者普通订单,因为协销订单运费默认为0不影响
  1621. if (StringUtils.equals(status, "2")) {//已付款
  1622. if (StringUtils.equals(freePostFlag, "-1")) {//-1到付
  1623. freight = "到付";
  1624. } else if (StringUtils.equals(freePostFlag, "0")) {//0包邮
  1625. freight = "包邮";
  1626. } else if (StringUtils.equals(freePostFlag, "1")) {//运费
  1627. freight = rp.getFreight();
  1628. }
  1629. } else {//未付款
  1630. if (StringUtils.equals(freePostFlag, "-1")) {//-1到付
  1631. freight = "到付";
  1632. } else if (StringUtils.equals(freePostFlag, "0")) {//0包邮
  1633. freight = "包邮";
  1634. } else if (StringUtils.equals(freePostFlag, "1")) {//运费
  1635. freight = "0";
  1636. }
  1637. }
  1638. cell.setCellValue(freight);
  1639. cell.setCellStyle(textStyle);
  1640. //创建付款方式列
  1641. cell = row2.createCell(10);
  1642. String transactionType = "———————";
  1643. if (null != rp.getTransactionType()) {
  1644. transactionType = rp.getTransactionType();
  1645. }
  1646. cell.setCellValue(transactionType);
  1647. cell.setCellStyle(textStyle);
  1648. //创建应付税费列
  1649. cell = row2.createCell(11);
  1650. String taxFee = "0";
  1651. if (null != rp.getTaxFee()) {
  1652. taxFee = String.format("%.2f", Double.parseDouble(rp.getTaxFee()));
  1653. }
  1654. cell.setCellValue(taxFee);
  1655. cell.setCellStyle(textStyle);
  1656. //创建应付供应商列
  1657. cell = row2.createCell(12);
  1658. String shopFee = "0";
  1659. if (null != rp.getShopFee()) {
  1660. shopFee = String.format("%.2f", Double.parseDouble(rp.getShopFee()));
  1661. }
  1662. cell.setCellValue(shopFee);
  1663. cell.setCellStyle(textStyle);
  1664. //11创建动态已收供应商列
  1665. cell = row2.createCell(13);//供应商名称
  1666. cell.setCellValue(shopName);
  1667. //公式解析等同上解释---(每个供应商存在两个账:公、私账)---遍历对应公私账的列数
  1668. if (0 == i) {//公账
  1669. cell = row2.createCell(14);//支付类型
  1670. cell.setCellValue("公账");
  1671. String publicAccount = newOrderShopList.get(i).getPublicAccount();
  1672. if (StringUtils.isEmpty(publicAccount)) {
  1673. publicAccount = "0";
  1674. }
  1675. cell = row2.createCell(15);//已付金额
  1676. cell.setCellValue(publicAccount);
  1677. } else {
  1678. int valuei = i;
  1679. boolean isEven = false;//是否是偶数,默认基数
  1680. isEven = i % 2 == 0 ? true : false;//是否是偶数
  1681. if (isEven) {//偶数(公账)
  1682. valuei = i / 2;
  1683. cell = row2.createCell(14);//支付类型
  1684. cell.setCellValue("公账");
  1685. String publicAccount = newOrderShopList.get(valuei).getPublicAccount();
  1686. if (StringUtils.isEmpty(publicAccount)) {
  1687. publicAccount = "0";
  1688. }
  1689. cell = row2.createCell(15);//已付金额
  1690. cell.setCellValue(publicAccount);
  1691. } else {//基数(私账)
  1692. valuei = (i - 1) / 2;
  1693. cell = row2.createCell(14);//支付类型
  1694. cell.setCellValue("私账");
  1695. String privateAccount = newOrderShopList.get(valuei).getPrivateAccount();
  1696. if (StringUtils.isEmpty(privateAccount)) {
  1697. privateAccount = "0";
  1698. }
  1699. cell = row2.createCell(15);//已付金额
  1700. cell.setCellValue(privateAccount);
  1701. }
  1702. }
  1703. //创建应付三方
  1704. cell = row2.createCell(16);//应付三方
  1705. String otherFee = "0";
  1706. if (null != rp.getOtherFee()) {
  1707. otherFee = String.format("%.2f", Double.parseDouble(rp.getOtherFee()));
  1708. }
  1709. cell.setCellValue(otherFee);
  1710. cell.setCellStyle(textStyle);
  1711. //创建应付采美
  1712. cell = row2.createCell(17);
  1713. String cmFee = "0";
  1714. if (null != rp.getCmFee()) {
  1715. cmFee = String.format("%.2f", Double.parseDouble(rp.getCmFee()));
  1716. }
  1717. cell.setCellValue(cmFee);
  1718. cell.setCellStyle(textStyle);
  1719. currentUseRow += 1;//供应商大小*2决定的存在的行数(累计统计)
  1720. }
  1721. //合并订单数据(除供应商名称和已付金额外都合并)
  1722. for (int j = currentMergeStartRow; j < currentUseRow; j++) {
  1723. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 0, 0));//起始行号,终止行号, 起始列号,终止列号
  1724. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 1, 1));//起始行号,终止行号, 起始列号,终止列号
  1725. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 2, 2));//起始行号,终止行号, 起始列号,终止列号
  1726. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 3, 3));//起始行号,终止行号, 起始列号,终止列号
  1727. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 4, 4));//起始行号,终止行号, 起始列号,终止列号
  1728. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 5, 5));//起始行号,终止行号, 起始列号,终止列号
  1729. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 6, 6));//起始行号,终止行号, 起始列号,终止列号
  1730. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 7, 7));//起始行号,终止行号, 起始列号,终止列号
  1731. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 8, 8));//起始行号,终止行号, 起始列号,终止列号
  1732. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 9, 9));//起始行号,终止行号, 起始列号,终止列号
  1733. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 10, 10));//起始行号,终止行号, 起始列号,终止列号
  1734. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 11, 11));//起始行号,终止行号, 起始列号,终止列号
  1735. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 12, 12));//起始行号,终止行号, 起始列号,终止列号
  1736. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 16, 16));//起始行号,终止行号, 起始列号,终止列号
  1737. sheet.addMergedRegion(new CellRangeAddress(j, currentUseRow - 1, 17, 17));//起始行号,终止行号, 起始列号,终止列号
  1738. }
  1739. currentMergeStartRow += size;//提供下一个订单出账合并使用
  1740. }
  1741. }
  1742. }
  1743. try {
  1744. ByteArrayOutputStream os = new ByteArrayOutputStream();
  1745. wb.write(os);
  1746. //调用浏览器自带的下载器,要先将数据转成byte流
  1747. String fileName = "采美订单对账列表.xls";
  1748. byte[] content = os.toByteArray();
  1749. response.setContentType("application/x-download");
  1750. response.setHeader("Content-disposition", "attachment; filename=" + Encodes.urlEncode(fileName));
  1751. response.getOutputStream().write(content);
  1752. response.getOutputStream().flush();
  1753. response.getOutputStream().close();
  1754. os.flush();
  1755. os.close();
  1756. } catch (Exception e) {
  1757. e.printStackTrace();
  1758. }
  1759. }
  1760. /**
  1761. * date 2019-1-28
  1762. * 最新的导出功能 以子订单来导出
  1763. * 导出子订单信息
  1764. *
  1765. * @param shopOrderID
  1766. * @return
  1767. */
  1768. @RequiresPermissions("order:order:export")
  1769. @RequestMapping(value = "exportSubOrder")
  1770. public void exportSubOrder(Integer shopOrderID, RedirectAttributes redirectAttributes, HttpServletResponse response) {
  1771. //获取订单数据
  1772. if (shopOrderID != null) {
  1773. NewShopOrder shopOrder = newShopOrderService.findByShopOrderID(shopOrderID);
  1774. if (shopOrder == null) {
  1775. addMessage(redirectAttributes, "参数异常, 订单信息导出失败!");
  1776. return;
  1777. }
  1778. NewOrder order = newOrderService.get(shopOrder.getOrderID().toString());
  1779. String fileName = order.getOrderID() + "-" + order.getBpOrderUserinfo().getName() + "-采美365网购订单.xls";
  1780. String template = Global.getConfig("export.template");
  1781. String templateFileName = template + "/shopOrder_template.xls";
  1782. OrderUserInfo orderUserInfo = orderUserInfoService.findByOrderID(order.getOrderID());
  1783. Map data = new HashMap<String, Object>();
  1784. data.put("shopOrder", shopOrder);
  1785. data.put("order", order);
  1786. data.put("orderUserInfo", orderUserInfo);
  1787. new ExcelUtil().createExcel(templateFileName, data, fileName, response);
  1788. } else {
  1789. addMessage(redirectAttributes, "参数异常, 订单信息导出失败!");
  1790. return;
  1791. }
  1792. }
  1793. /**
  1794. * 导出订单信息
  1795. *
  1796. * @param order
  1797. * @return
  1798. */
  1799. @RequiresPermissions("order:order:export")
  1800. @RequestMapping(value = "exportOrder")
  1801. public void exportOrder(NewOrder order, RedirectAttributes redirectAttributes, HttpServletResponse response) {
  1802. //获取订单数据
  1803. String fileName = order.getOrderID() + "-" + order.getBpOrderUserinfo().getName() + "-采美365网购订单.xls";
  1804. String template = Global.getConfig("export.template");
  1805. String templateFileName = template + "/order_info_template.xls";
  1806. try {
  1807. //freight 运费要算一下 ,totalAddedValueTax
  1808. Map data = new HashMap<String, Object>();
  1809. data.put("order", order);
  1810. new ExcelUtil().createExcel(templateFileName, data, fileName, response);
  1811. } catch (Exception e) {
  1812. addMessage(redirectAttributes, "订单信息导出失败!" + e.getMessage());
  1813. e.printStackTrace();
  1814. }
  1815. }
  1816. /**
  1817. * @return
  1818. */
  1819. @RequiresPermissions("order:order:postageOrderForm")
  1820. @RequestMapping(value = "postageOrderForm")
  1821. public String postageOrderForm(NewOrder newOrder, Model model) {
  1822. newOrder.setFreight(10D);
  1823. model.addAttribute("order", newOrder);
  1824. return "modules/order/postageOrderForm";
  1825. }
  1826. @RequiresPermissions("order:order:edit")
  1827. @RequestMapping(value = "postageOrderSave")
  1828. public String postageOrderSave(NewOrder newOrder, Model model, RedirectAttributes redirectAttributes, HttpServletRequest request) {
  1829. if (!beanValidator(model, newOrder)) {
  1830. return form(newOrder, model, request);
  1831. }
  1832. //保存订单
  1833. newOrderService.postageOrderSave(newOrder);
  1834. addMessage(redirectAttributes, "保存订单成功");
  1835. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  1836. }
  1837. /**
  1838. * 编辑经理折扣
  1839. */
  1840. @RequiresPermissions("order:order:edit")
  1841. @RequestMapping(value = "DiscountFee")
  1842. public String editDiscountFee(NewOrder newOrder, Model model, RedirectAttributes redirectAttributes) {
  1843. NewOrder order = newOrderService.editDiscountFee(newOrder);
  1844. model.addAttribute("order", order);
  1845. return "modules/order/newOrderEdit";
  1846. }
  1847. /**
  1848. * 编辑返佣服务费
  1849. */
  1850. @RequiresPermissions("order:order:edit")
  1851. @RequestMapping(value = "RebateFee")
  1852. public String editRebateFee(NewOrder newOrder, Model model, RedirectAttributes redirectAttributes) {
  1853. NewOrder order = newOrderService.editRebateFee(newOrder);
  1854. model.addAttribute("order", order);
  1855. return "modules/order/rebateFeeEdit";
  1856. }
  1857. /**
  1858. * 保存返佣服务费
  1859. */
  1860. @RequiresPermissions("order:order:edit")
  1861. @ResponseBody
  1862. @RequestMapping(value = "saveRebateFee")
  1863. public Map<String, Object> saveRebateFee(NewOrder newOrder) {
  1864. Map<String, Object> map = new HashMap();
  1865. try {
  1866. newOrderService.saveRebateFee(newOrder);
  1867. map.put("success", true);
  1868. map.put("msg", "修改返佣服务费成功");
  1869. } catch (Exception e) {
  1870. map.put("success", false);
  1871. map.put("msg", "修改返佣服务费失败");
  1872. }
  1873. return map;
  1874. }
  1875. /**
  1876. * 保存经理折扣
  1877. */
  1878. @RequiresPermissions("order:order:edit")
  1879. @ResponseBody
  1880. @RequestMapping(value = "saveDiscountFee")
  1881. public Map<String, Object> saveDiscountFee(NewOrder newOrder) {
  1882. Map<String, Object> map = new HashMap();
  1883. try {
  1884. newOrderService.saveDiscountFee(newOrder);
  1885. map.put("success", true);
  1886. map.put("msg", "修改经理折扣成功");
  1887. } catch (Exception e) {
  1888. map.put("success", false);
  1889. map.put("msg", "修改经理折扣失败");
  1890. }
  1891. return map;
  1892. }
  1893. /**
  1894. * 供应商订单二维码
  1895. */
  1896. @ResponseBody
  1897. @RequestMapping("/shopOrderLink")
  1898. public Map<String, Object> shopOrderLink(Integer shopOrderId) {
  1899. Map<String, Object> map = new HashMap<>();
  1900. if (null == shopOrderId) {
  1901. map.put("success", false);
  1902. map.put("msg", "参数异常");
  1903. return map;
  1904. }
  1905. return newOrderService.shopOrderLink(shopOrderId);
  1906. }
  1907. /**
  1908. * 抹平收款数据显示
  1909. */
  1910. @ResponseBody
  1911. @RequestMapping("/gatheringData")
  1912. public Map<String, Object> gatheringData(Integer orderId) {
  1913. Map<String, Object> map = new HashMap<>();
  1914. if (null == orderId) {
  1915. map.put("success", false);
  1916. map.put("msg", "参数异常");
  1917. return map;
  1918. }
  1919. return newOrderService.gatheringData(orderId);
  1920. }
  1921. /**
  1922. * 抹平收款
  1923. */
  1924. @RequestMapping("/smoothOutCollection")
  1925. public void smoothOutCollection(CmDiscernReceipt discernReceipt) {
  1926. newOrderService.smoothOutCollection(discernReceipt);
  1927. }
  1928. /**
  1929. * 余额抵扣
  1930. */
  1931. @RequestMapping("balanceDeduction")
  1932. public String balanceDeduction(Integer orderID, RedirectAttributes redirectAttributes) {
  1933. newOrderService.balanceDeduction(orderID);
  1934. addMessage(redirectAttributes, "余额抵扣成功");
  1935. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  1936. }
  1937. /**
  1938. * 转为返佣订单
  1939. */
  1940. @RequestMapping("modifyRebate")
  1941. public String modifyRebate(Integer orderId) {
  1942. newOrderService.modifyRebate(orderId);
  1943. //1二手 0非二手
  1944. Integer secondHandOrderFlag = cmUtilsDao.findOrderIsSecond(orderId);
  1945. if (1 == secondHandOrderFlag) {
  1946. return "redirect:" + Global.getAdminPath() + "/order/secondhandOrderList";
  1947. }
  1948. return "redirect:" + Global.getAdminPath() + "/order/orderList";
  1949. }
  1950. /**
  1951. * 商品资质列表
  1952. */
  1953. @RequestMapping("qualificationList")
  1954. public String qualificationList(Integer logisticsBatchId, Model model) {
  1955. List<LogisticsRecord> logisticsRecords = newOrderService.qualificationList(logisticsBatchId);
  1956. model.addAttribute("logisticsRecords", logisticsRecords);
  1957. Integer orderId = 0;
  1958. if (logisticsRecords != null && logisticsRecords.size() > 0) {
  1959. orderId = logisticsRecords.get(0).getOrderID();
  1960. }
  1961. model.addAttribute("orderId", orderId);
  1962. return "modules/order/qualification";
  1963. }
  1964. /**
  1965. * 商品资质编辑页面
  1966. */
  1967. @RequestMapping("qualificationForm")
  1968. public String qualificationForm(Integer recordId, Model model) {
  1969. LogisticsRecord logisticsRecord = newOrderService.qualificationForm(recordId);
  1970. model.addAttribute("logisticsRecord", logisticsRecord);
  1971. model.addAttribute("recordId", recordId);
  1972. return "modules/order/qualificationForm";
  1973. }
  1974. /**
  1975. * 商品资质保存
  1976. */
  1977. @RequestMapping("saveQualification")
  1978. public String saveQualification(LogisticsRecord logisticsRecord, RedirectAttributes redirectAttributes) {
  1979. newOrderService.saveQualification(logisticsRecord);
  1980. addMessage(redirectAttributes, "上传商品资质成功");
  1981. return "redirect:" + Global.getAdminPath() + "/order/qualificationList?logisticsBatchId=" + logisticsRecord.getLogisticsBatchID();
  1982. }
  1983. /**
  1984. * 查看商品资质
  1985. */
  1986. @RequestMapping("qualificationInfo")
  1987. public String qualificationInfo(Integer logisticsBatchId, Integer orderId, Model model) {
  1988. List<LogisticsRecord> recordList = newOrderService.qualificationInfo(logisticsBatchId);
  1989. model.addAttribute("recordList", recordList);
  1990. if (recordList != null && recordList.size() > 0) {
  1991. model.addAttribute("shopName", recordList.get(0).getShopName());
  1992. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1993. String uploadTime = format.format(recordList.get(0).getUploadTime());
  1994. model.addAttribute("uploadTime", uploadTime);
  1995. }
  1996. model.addAttribute("logisticsBatchId", logisticsBatchId);
  1997. model.addAttribute("orderId", orderId);
  1998. return "modules/order/qualificationInfo";
  1999. }
  2000. /**
  2001. * 获取当前机构下所有已领取优惠券
  2002. */
  2003. @ResponseBody
  2004. @RequestMapping("clubCouponList")
  2005. public Map<String, Object> clubCouponList(Integer userId) {
  2006. Map<String, Object> map = new HashMap<>();
  2007. if (null == userId) {
  2008. map.put("code", -1);
  2009. map.put("msg", "参数异常");
  2010. return map;
  2011. }
  2012. return newOrderService.clubCouponList(userId);
  2013. }
  2014. }