OrderServiceImpl.java 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372
  1. package com.goafanti.order.service.impl;
  2. import java.lang.reflect.InvocationTargetException;
  3. import java.math.BigDecimal;
  4. import java.text.ParseException;
  5. import java.util.ArrayList;
  6. import java.util.Date;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.UUID;
  11. import org.apache.commons.beanutils.BeanUtils;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import com.goafanti.common.bo.Error;
  17. import com.goafanti.common.constant.AFTConstants;
  18. import com.goafanti.common.constant.ErrorConstants;
  19. import com.goafanti.common.dao.ContractMapper;
  20. import com.goafanti.common.dao.OrganizationManagementMapper;
  21. import com.goafanti.common.dao.TOrderBillMapper;
  22. import com.goafanti.common.dao.TOrderDetailMapper;
  23. import com.goafanti.common.dao.TOrderMapper;
  24. import com.goafanti.common.enums.DeleteStatus;
  25. import com.goafanti.common.error.BusinessException;
  26. import com.goafanti.common.model.Admin;
  27. import com.goafanti.common.model.Contract;
  28. import com.goafanti.common.model.ContractTask;
  29. import com.goafanti.common.model.OrganizationManagement;
  30. import com.goafanti.common.model.TOrder;
  31. import com.goafanti.common.model.TOrderBill;
  32. import com.goafanti.common.model.TOrderDetail;
  33. import com.goafanti.common.model.User;
  34. import com.goafanti.common.utils.BeanUtilsExt;
  35. import com.goafanti.common.utils.DateUtils;
  36. import com.goafanti.core.mybatis.BaseMybatisDao;
  37. import com.goafanti.core.mybatis.JDBCIdGenerator;
  38. import com.goafanti.core.mybatis.page.Pagination;
  39. import com.goafanti.core.shiro.token.TokenManager;
  40. import com.goafanti.order.bo.BillDetailBo;
  41. import com.goafanti.order.bo.BillListBo;
  42. import com.goafanti.order.bo.CommodityDetailBo;
  43. import com.goafanti.order.bo.OperatorActive;
  44. import com.goafanti.order.bo.OrderListBo;
  45. import com.goafanti.order.bo.ServiceOrderDetailBo;
  46. import com.goafanti.order.bo.C2BOrderDetailBo;
  47. import com.goafanti.order.bo.C2COrderDetailBo;
  48. import com.goafanti.order.enums.ActiveState;
  49. import com.goafanti.order.enums.ApprovalState;
  50. import com.goafanti.order.enums.AuditState;
  51. import com.goafanti.order.enums.CommodityType;
  52. import com.goafanti.order.enums.LiquidationState;
  53. import com.goafanti.order.enums.OrderAction;
  54. import com.goafanti.order.enums.OrderChannel;
  55. import com.goafanti.order.enums.OrderStage;
  56. import com.goafanti.order.enums.OrderState;
  57. import com.goafanti.order.enums.PayChannel;
  58. import com.goafanti.order.enums.ProjectStage;
  59. import com.goafanti.order.enums.TransactionMode;
  60. import com.goafanti.order.enums.TransactionSubject;
  61. import com.goafanti.order.service.OrderService;
  62. import com.goafanti.techproject.enums.TaskState;
  63. @Service
  64. public class OrderServiceImpl extends BaseMybatisDao<TOrderMapper> implements OrderService {
  65. @Autowired
  66. private TOrderMapper tOrderMapper;
  67. @Autowired
  68. private TOrderDetailMapper tOrderDetailMapper;
  69. @Autowired
  70. private JDBCIdGenerator idGenerator;
  71. @Autowired
  72. private TOrderBillMapper tOrderBillMapper;
  73. @Autowired
  74. private OrganizationManagementMapper organizationManagementMapper;
  75. @Autowired
  76. private ContractMapper contractMapper;
  77. private final BigDecimal DEFAULT_FIRST_PAYMENT = new BigDecimal(0);// 默认首付价格
  78. private final BigDecimal DEFAULT_COMMODITY_PRICE = new BigDecimal(0);// 默认单价
  79. private final String DEFAULT_PLATFORM_ID = "0";// 平台默认id
  80. private final double DEFAULT_BROKERAGE_PROPORTION = 0; //佣金比例
  81. private final double DEFAULT_COMMODITY_DISCOUNT = 1; //折扣比例
  82. private final String DEFAULT_COMMODITY_MODE = "NO_MODE"; //暂无规格
  83. private final String DEFAULT_CREATER = "PLATFORM";//平台方
  84. /*
  85. * -------------------------------------------------- APP管理端 --------------------------------------------------------
  86. */
  87. @Override
  88. public C2COrderDetailBo selectCommodityDetail(String commodityId, Integer commodityType) {
  89. C2COrderDetailBo bo = new C2COrderDetailBo();
  90. CommodityDetailBo cdb = tOrderMapper.selectCommodityDetail(commodityId,commodityType);
  91. try {
  92. BeanUtils.copyProperties(bo, cdb);
  93. bo.setOrderNo(String.valueOf(idGenerator.generateId()));
  94. bo.setCreateTime(DateUtils.formatDate(new Date(),AFTConstants.YYYYMMDDHHMMSS));
  95. bo.setCommodityType(commodityType);
  96. if(bo.getCommodityPrice().equals("0"))
  97. bo.setCommodityPrice("面议");
  98. else
  99. bo.setCommodityPrice(bo.getCommodityPrice()+" 万");
  100. if(StringUtils.isBlank(bo.getFirstPayment()))
  101. bo.setFirstPayment("面议");
  102. else
  103. bo.setFirstPayment(bo.getFirstPayment()+" 万");
  104. } catch (IllegalAccessException | InvocationTargetException e) {
  105. e.printStackTrace();
  106. }
  107. return bo;
  108. }
  109. /**
  110. * to update 18
  111. * 后期规则:自营服务订单 、需求订单、其他订单不能同时加入购物车
  112. */
  113. @Override
  114. public int addIntention(String orderNo, String commodityId, String commodityMode, Integer commodityQuantity,Integer commodityType,
  115. String createTime,String remarks) throws ParseException {
  116. CommodityDetailBo bo = tOrderMapper.selectCommodityDetail(commodityId,commodityType);
  117. BigDecimal commodityPrice = StringUtils.isBlank(bo.getCommodityPrice()) ? DEFAULT_COMMODITY_PRICE
  118. : new BigDecimal(Double.valueOf(bo.getCommodityPrice()));
  119. BigDecimal commodityFirstPayment = StringUtils.isBlank(bo.getCommodityFirstPayment()) ? DEFAULT_FIRST_PAYMENT
  120. : new BigDecimal(Double.valueOf(bo.getCommodityFirstPayment()));
  121. BigDecimal discountPrice = commodityPrice.multiply(new BigDecimal(DEFAULT_COMMODITY_DISCOUNT));
  122. BigDecimal discountFirstPayment = commodityFirstPayment.multiply(new BigDecimal(DEFAULT_COMMODITY_DISCOUNT));
  123. BigDecimal orderAmount = discountPrice.multiply(new BigDecimal(commodityQuantity));
  124. TOrder tOrder = new TOrder();
  125. tOrder.setOrderNo(orderNo);
  126. tOrder.setCreater(DEFAULT_CREATER);
  127. tOrder.setCreateTime(DateUtils.parseDate(createTime, AFTConstants.YYYYMMDDHHMMSS));
  128. if(commodityType == CommodityType.DEMAND.getTypeCode()){
  129. tOrder.setBuyerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId());
  130. tOrder.setSellerId(TokenManager.getUserId());
  131. }else{
  132. tOrder.setBuyerId(TokenManager.getUserId());
  133. tOrder.setSellerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId());
  134. }
  135. tOrder.setBrokerageAmount(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION)));
  136. tOrder.setFirstPayment(DEFAULT_FIRST_PAYMENT);
  137. tOrder.setOrderAmount(orderAmount);
  138. tOrder.setOrderRemarks(remarks);
  139. tOrder.setDeleteSign(ActiveState.NORMAL.getCode());
  140. tOrder.setOrderChannel(OrderChannel.APP.getCode());
  141. setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false);
  142. TOrderDetail tOrderDetail = new TOrderDetail();
  143. tOrderDetail.setId(UUID.randomUUID().toString());
  144. tOrderDetail.setOrderNo(orderNo);
  145. tOrderDetail.setCommodityId(commodityId);
  146. tOrderDetail.setCommodityName(bo.getCommodityName());
  147. tOrderDetail.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE: commodityMode);
  148. tOrderDetail.setCommodityType(commodityType);
  149. tOrderDetail.setCommodityQuantity(commodityQuantity);
  150. tOrderDetail.setCommodityPrice(commodityPrice);
  151. tOrderDetail.setCommodityFirstPayment(commodityFirstPayment);
  152. tOrderDetail.setDiscountPrice(discountPrice);
  153. tOrderDetail.setDiscountFirstPayment(discountFirstPayment);
  154. tOrderDetailMapper.insert(tOrderDetail);
  155. tOrderMapper.insert(tOrder);
  156. return 1;
  157. }
  158. /**
  159. *
  160. * 订单状态流转
  161. * @param orderStatus
  162. * @param intentionStatus
  163. * @param tradingStatus
  164. * @param paymentStatus
  165. * @param liquidationStatus
  166. * @param actionType
  167. */
  168. public void setOrderState(OrderAction orderAction,BigDecimal changeAmount,TOrder tOrder,boolean confrim){
  169. BigDecimal initial = new BigDecimal(0);
  170. checkOrder(tOrder);
  171. if(orderAction == OrderAction.ADD_INTENTION){ //添加意向订单
  172. tOrder.setOrderStatus(OrderState.WAIT_FOR_CONFIRM.getCode());
  173. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  174. tOrder.setOrderStage(OrderStage.INTENTION.getCode());
  175. tOrder.setProjectStage(ProjectStage.NOT_SATISFY_CONDITION.getCode());
  176. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  177. tOrder.setSignFirstPayment(initial);
  178. tOrder.setActuallyFirstPayment(initial);
  179. tOrder.setSignBrokerageAmount(initial);
  180. tOrder.setActuallyBrokerageAmount(initial);
  181. tOrder.setSignTotalAmount(initial);
  182. tOrder.setActuallyTotalAmount(initial);
  183. tOrder.setSignWithdrawAmount(initial);
  184. tOrder.setActuallyWithdrawAmount(initial);
  185. }else if(orderAction == OrderAction.CONFIRM_INTENTION){ //确认意向订单 (用户确认)
  186. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()){
  187. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认意向订单"));
  188. }
  189. if (confrim) {
  190. tOrder.setOrderStatus(OrderState.WAIT_FOR_SIGN.getCode()); // 卖家同意
  191. tOrder.setOrderStage(OrderStage.FOLLOWING.getCode());
  192. } else {
  193. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()); // 买家拒绝
  194. }
  195. }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_FIRST){ // 支付首付(审核流水)
  196. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()
  197. || tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  198. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,""));
  199. }
  200. int boundary = tOrder.getActuallyFirstPayment().add(changeAmount).compareTo(tOrder.getFirstPayment());
  201. if(boundary == 1){
  202. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付首付款"));
  203. }else if(boundary == -1){ //首付待付清
  204. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  205. tOrder.setActuallyFirstPayment(tOrder.getActuallyFirstPayment().add(changeAmount));
  206. }else if(boundary == 0){ //首付已结清
  207. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  208. tOrder.setActuallyFirstPayment(tOrder.getActuallyFirstPayment().add(changeAmount));
  209. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  210. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  211. }
  212. }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_LAST){ //支付尾款 (审核流水)
  213. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()
  214. || tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()){
  215. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付尾款"));
  216. }
  217. int boundary = tOrder.getActuallyTotalAmount().add(changeAmount).compareTo(tOrder.getOrderAmount());
  218. if(boundary == 1){
  219. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付尾款"));
  220. }else if(boundary == -1){
  221. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  222. }else if(boundary == 0){
  223. tOrder.setOrderStatus(OrderState.ALREADY_SIGN.getCode());
  224. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  225. tOrder.setLiquidationStatus(LiquidationState.ALREADY_PAY.getCode());
  226. }
  227. }else if(orderAction == OrderAction.APPLY_FOR_WITHDRAW){ //提现申请
  228. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  229. && tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode()
  230. && tOrder.getActuallyTotalAmount().doubleValue() > 0){
  231. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"等待提现"));
  232. }
  233. tOrder.setLiquidationStatus(LiquidationState.WAIT_FOR_WITHDRAW.getCode());
  234. }else if(orderAction == OrderAction.CONFIRM_WITHDRAW){ //提现确认 (审核员先审核流水)
  235. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  236. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_WITHDRAW.getCode()
  237. && tOrder.getActuallyTotalAmount().doubleValue() > 0){
  238. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认提现"));
  239. }
  240. tOrder.setLiquidationStatus(LiquidationState.ALREADY_WITHDRAW.getCode());
  241. tOrder.setActuallyWithdrawAmount(tOrder.getActuallyWithdrawAmount().add(changeAmount));
  242. }else if(orderAction == OrderAction.APPLY_FOR_CANCEL){ //取消订单
  243. boolean flag = true;
  244. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()
  245. || tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  246. flag = false;
  247. }
  248. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  249. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  250. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  251. flag = false;
  252. }
  253. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单"));
  254. if(TokenManager.getToken() instanceof Admin){
  255. if(!tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID))
  256. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单"));
  257. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  258. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  259. if( tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode())
  260. tOrder.setOrderStatus(OrderState.SELLER_CANCEL_AFTER_SIGN.getCode());
  261. }else if(TokenManager.getToken() instanceof User){
  262. if(TokenManager.getUserId().equals(tOrder.getSellerId())){
  263. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  264. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  265. if( tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode())
  266. tOrder.setOrderStatus(OrderState.SELLER_CANCEL_AFTER_SIGN.getCode());
  267. }else if(TokenManager.getUserId().equals(tOrder.getBuyerId())){
  268. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  269. tOrder.setOrderStatus(OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode());
  270. if( tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode())
  271. tOrder.setOrderStatus(OrderState.BUYER_CANCEL_AFTER_SIGN.getCode());
  272. }
  273. }
  274. }else if(orderAction == OrderAction.APPLY_FOR_REFUND){ //退款申请
  275. boolean flag = true;
  276. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  277. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  278. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  279. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  280. flag = false;
  281. }
  282. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode()
  283. || tOrder.getLiquidationStatus() == LiquidationState.REFUSE_REFUND.getCode()
  284. || tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  285. || tOrder.getLiquidationStatus() == LiquidationState.COMPLETE_REFUND.getCode()){
  286. flag = false;
  287. }
  288. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  289. flag = false;
  290. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"申请退款"));
  291. tOrder.setLiquidationStatus(LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode());
  292. }else if(orderAction == OrderAction.CONFIRM_REFUND){ //退款确认
  293. boolean flag = true;
  294. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  295. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  296. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  297. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  298. flag = false;
  299. }
  300. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  301. flag = false;
  302. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  303. flag = false;
  304. if(confrim) {
  305. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"同意退款"));
  306. tOrder.setLiquidationStatus(LiquidationState.AGREE_REFUND.getCode());
  307. }else{
  308. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"拒绝退款"));
  309. tOrder.setLiquidationStatus(LiquidationState.REFUSE_REFUND.getCode());
  310. }
  311. }else if(orderAction == OrderAction.COMPLETE_REFUND){ //完成退款
  312. boolean flag = true;
  313. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  314. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  315. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  316. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  317. flag = false;
  318. }
  319. if(tOrder.getLiquidationStatus() != LiquidationState.AGREE_REFUND.getCode())
  320. flag = false;
  321. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  322. flag = false;
  323. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"申请退款"));
  324. tOrder.setLiquidationStatus(LiquidationState.COMPLETE_REFUND.getCode());
  325. }
  326. }
  327. /**
  328. * 设置按钮状态
  329. * @param tOrder
  330. * @return
  331. */
  332. private OperatorActive setOperatorActive(TOrder tOrder){
  333. OperatorActive active = new OperatorActive();
  334. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  335. return active;
  336. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode()) {
  337. active.setApplyUnLock(true);
  338. return active;
  339. }
  340. if (TokenManager.getToken() instanceof User) {
  341. active.setConfirmPayForFirst(false);
  342. active.setConfirmPayForLast(false);
  343. active.setConfirmWithdraw(false);
  344. active.setCompleteRefund(false);
  345. active.setApplyLock(false);
  346. active.setApplyUnLock(false);
  347. active.setApplyRevoke(false);
  348. active.setApplySign(false);
  349. if (TokenManager.getUserId().equals(tOrder.getBuyerId())) { // 买方
  350. active.setApplyForWithdraw(false);
  351. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  352. /** 需求订单 开始 **/
  353. if (tOrder.getOrderType() == CommodityType.DEMAND.getTypeCode()) {
  354. active.setConfirmIntention(true);
  355. active.setRefuseIntention(true);
  356. } else {
  357. active.setConfirmIntention(false);
  358. active.setRefuseIntention(false);
  359. }
  360. /** 需求订单 结束 **/
  361. } else {
  362. active.setConfirmIntention(false);
  363. active.setRefuseIntention(false);
  364. }
  365. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  366. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()) {
  367. active.setPayForFirst(true); //支付首付
  368. } else {
  369. active.setPayForFirst(false); //支付首付
  370. }
  371. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  372. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()) {
  373. active.setPayForLast(true); //支付尾款
  374. } else {
  375. active.setPayForLast(false); //支付尾款
  376. }
  377. boolean flag = true;
  378. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()
  379. && tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  380. flag = false;
  381. }
  382. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  383. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  384. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  385. flag = false;
  386. }
  387. active.setApplyForCancel(flag); //申请取消
  388. flag = true;
  389. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  390. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  391. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  392. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  393. flag = false;
  394. }
  395. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode()
  396. || tOrder.getLiquidationStatus() == LiquidationState.REFUSE_REFUND.getCode()
  397. || tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  398. || tOrder.getLiquidationStatus() == LiquidationState.COMPLETE_REFUND.getCode()){
  399. flag = false;
  400. }
  401. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  402. flag = false;
  403. active.setApplyForRefund(flag); //申请退款
  404. }else if(TokenManager.getUserId().equals(tOrder.getSellerId())){ //卖方
  405. active.setPayForFirst(false);
  406. active.setPayForLast(false);
  407. active.setApplyForRefund(false);
  408. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  409. /** 需求订单 开始 **/
  410. if (tOrder.getOrderType() == CommodityType.DEMAND.getTypeCode()) {
  411. active.setConfirmIntention(false);
  412. active.setRefuseIntention(false);
  413. } else {
  414. active.setConfirmIntention(true);
  415. active.setRefuseIntention(true);
  416. }
  417. /** 需求订单 结束 **/
  418. } else {
  419. active.setConfirmIntention(false);
  420. active.setRefuseIntention(false);
  421. }
  422. boolean flag = true;
  423. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  424. flag = false;
  425. }
  426. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  427. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  428. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  429. flag = false;
  430. }
  431. active.setApplyForCancel(flag); //申请取消
  432. flag = true;
  433. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  434. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  435. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  436. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  437. flag = false;
  438. }
  439. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  440. flag = false;
  441. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  442. flag = false;
  443. active.setAgreeRefund(flag); //同意退款
  444. active.setRefuseRefund(flag); //拒绝退款
  445. if (tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  446. && tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode()
  447. && tOrder.getActuallyTotalAmount().doubleValue() > 0) {
  448. active.setApplyForWithdraw(true); //申请提现
  449. } else {
  450. active.setApplyForWithdraw(false); //申请提现
  451. }
  452. }else{
  453. active.setPayForFirst(false);
  454. active.setPayForLast(false);
  455. active.setConfirmIntention(false);
  456. active.setRefuseIntention(false);
  457. active.setApplyForCancel(false);
  458. active.setApplyForRefund(false);
  459. active.setAgreeRefund(false);
  460. active.setRefuseRefund(false);
  461. active.setApplyForWithdraw(false);
  462. }
  463. }
  464. if (TokenManager.getToken() instanceof Admin) {
  465. active.setPayForFirst(false);
  466. active.setPayForLast(false);
  467. active.setApplyForWithdraw(false);
  468. active.setApplyForRefund(false);
  469. if (tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID)) { // 平台作为卖方
  470. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  471. active.setConfirmIntention(true);
  472. active.setRefuseIntention(true);
  473. } else {
  474. active.setConfirmIntention(false);
  475. active.setRefuseIntention(false);
  476. }
  477. boolean flag = true;
  478. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  479. flag = false;
  480. }
  481. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  482. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  483. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  484. flag = false;
  485. }
  486. active.setApplyForCancel(flag); //申请取消
  487. flag = true;
  488. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  489. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  490. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  491. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  492. flag = false;
  493. }
  494. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  495. flag = false;
  496. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  497. flag = false;
  498. active.setAgreeRefund(flag); //同意退款
  499. active.setRefuseRefund(flag); //拒绝退款
  500. } else {
  501. active.setConfirmIntention(false); //确认意向
  502. active.setRefuseIntention(false); //拒绝意向
  503. active.setApplyForCancel(false); //申请取消
  504. active.setAgreeRefund(false); //同意退款
  505. active.setRefuseRefund(false); //拒绝退款
  506. }
  507. }
  508. //平台方作为中间方 确认首付 - 尾款 - 提现 - 退款
  509. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  510. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  511. active.setConfirmPayForFirst(true);
  512. }else{
  513. active.setConfirmPayForFirst(false);
  514. }
  515. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  516. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  517. active.setConfirmPayForLast(true);
  518. }else{
  519. active.setConfirmPayForLast(false);
  520. }
  521. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  522. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_WITHDRAW.getCode()){
  523. active.setConfirmWithdraw(true);
  524. }else{
  525. active.setConfirmWithdraw(false);
  526. }
  527. boolean flag = true;
  528. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  529. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  530. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  531. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  532. flag = false;
  533. }
  534. if(flag && tOrder.getActuallyTotalAmount().doubleValue() == 0){
  535. active.setApplyRevoke(true); //作废
  536. }else{
  537. active.setApplyRevoke(false); //作废
  538. }
  539. if(tOrder.getLiquidationStatus() != LiquidationState.AGREE_REFUND.getCode())
  540. flag = false;
  541. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  542. flag = false;
  543. active.setCompleteRefund(flag); //完成退款
  544. flag = true;
  545. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode())
  546. flag = false;
  547. active.setApplySign(flag);
  548. return active;
  549. }
  550. /**
  551. * 添加流水记录
  552. * @param orderNo 订单编号
  553. * @param creater 创建人
  554. * @param payeeId 收款人
  555. * @param payerId 付款人
  556. * @param remarks 附言
  557. * @param transactionSubject 交易科目
  558. * @param payChannel 支付渠道
  559. * @param transactionMode 支付方式
  560. * @param FundAudit 流水审核
  561. * @return
  562. */
  563. public int addFundRecord(String orderNo,String creater,String payeeId,String payerId,String remarks,TransactionSubject transactionSubject,PayChannel payChannel,
  564. BigDecimal transactionAmount,TransactionMode transactionMode,AuditState auditState){
  565. TOrderBill bill = new TOrderBill();
  566. bill.setBillNo(UUID.randomUUID().toString().replace("-", ""));
  567. bill.setConfirmSign(auditState.getCode());
  568. bill.setCreater(creater);
  569. bill.setDeleteSign(Boolean.FALSE);
  570. bill.setOrderNo(orderNo);
  571. bill.setTransactionAmount(transactionAmount);
  572. bill.setPayeeId(payeeId);
  573. bill.setPayerId(payerId);
  574. bill.setRemarks(remarks);
  575. bill.setTransactionAmount(transactionAmount);
  576. bill.setTransactionMode(transactionMode.getCode());
  577. bill.setTransactionSubject(transactionSubject.getCode());
  578. bill.setTransactionChannel(payChannel.getCode());
  579. bill.setCreateTime(new Date());
  580. return tOrderBillMapper.insert(bill);
  581. }
  582. @Override
  583. public int updatePayForFirst(String orderNo, BigDecimal fundAmount,String remarks) {
  584. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  585. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks,
  586. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  587. tOrder.setUpdateTime(new Date());
  588. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  589. return 1;
  590. }
  591. @Override
  592. public int updatePayForLast(String orderNo, BigDecimal fundAmount, String remarks) {
  593. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  594. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks,
  595. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  596. tOrder.setUpdateTime(new Date());
  597. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  598. return 1;
  599. }
  600. @SuppressWarnings("unchecked")
  601. @Override
  602. //to update 18
  603. public Pagination<C2BOrderDetailBo> selectOrderList(boolean confirm,Integer pageNo,Integer pageSize) {
  604. Map<String, Object> params = new HashMap<String, Object>();
  605. Pagination<C2BOrderDetailBo> result = new Pagination<C2BOrderDetailBo>();
  606. //if(!confirm) params.put("intentionStatus", IntentionSate.WAIT_SELLER_CONFIRM.getCode()); //购买意向
  607. params.put("uid", TokenManager.getUserId());
  608. Pagination<TOrder> data = (Pagination<TOrder>)findPage("selectOrderListByPage", "selectOrderListCount", params, pageNo, pageSize);
  609. List<TOrder> list = (List<TOrder>)data.getList();
  610. C2BOrderDetailBo bo = null;
  611. List<C2BOrderDetailBo> boList = new ArrayList<C2BOrderDetailBo>();
  612. List<CommodityDetailBo> commoditys = null;
  613. CommodityDetailBo cdb = null;
  614. if(list.size()>0){
  615. for(TOrder t:list){
  616. bo = new C2BOrderDetailBo();
  617. commoditys = new ArrayList<CommodityDetailBo>();
  618. bo.setOrderNo(String.valueOf(t.getOrderNo()));
  619. bo.setOrderRemarks(t.getOrderRemarks());
  620. bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc());
  621. bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS));
  622. bo.setOrderAmount(String.valueOf(t.getOrderAmount()).equals("0")?"面议":String.valueOf(t.getOrderAmount())+" 万");
  623. bo.setFirstPayment(String.valueOf(t.getFirstPayment()).equals("0")?"面议":String.valueOf(t.getFirstPayment())+" 万");
  624. bo.setOperatorActive(setOperatorActive(t));
  625. List<TOrderDetail> tdList = tOrderMapper.selectOrderCommodity(String.valueOf(t.getOrderNo()));
  626. for(TOrderDetail tod : tdList ){
  627. cdb = new CommodityDetailBo();
  628. cdb.setCommodityPrice(String.valueOf(tod.getCommodityPrice()).equals("0")?"面议":String.valueOf(tod.getCommodityPrice())+" 万");
  629. cdb.setDiscountPrice(String.valueOf(tod.getDiscountPrice()).equals("0")?"面议":String.valueOf(tod.getDiscountPrice())+" 万");
  630. cdb.setCommodityId(tod.getCommodityId());
  631. cdb.setCommodityName(tod.getCommodityName());
  632. cdb.setCommodityMode(tod.getCommodityMode());
  633. cdb.setCommodityType(tod.getCommodityType());
  634. cdb.setCommodityQuantity(tod.getCommodityQuantity());
  635. commoditys.add(cdb);
  636. }
  637. bo.setCommoditys(commoditys);
  638. boList.add(bo);
  639. }
  640. }
  641. result.setList(boList);
  642. result.setPageNo(data.getPageNo());
  643. result.setPageSize(data.getPageSize());
  644. result.setTotalCount(data.getTotalCount());
  645. result.setFilterNo(data.getFilterNo());
  646. return result;
  647. }
  648. @Override
  649. public C2BOrderDetailBo selectOrderDetail(String orderNo) {
  650. TOrder t = tOrderMapper.selectByPrimaryKey(orderNo);
  651. C2BOrderDetailBo bo = new C2BOrderDetailBo();
  652. bo.setOrderNo(String.valueOf(t.getOrderNo()));
  653. bo.setOrderRemarks(t.getOrderRemarks());
  654. bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc());
  655. bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS));
  656. bo.setOrderAmount(String.valueOf(t.getOrderAmount()).equals("0")?"面议":String.valueOf(t.getOrderAmount())+" 万");
  657. bo.setFirstPayment(String.valueOf(t.getFirstPayment()).equals("0")?"面议":String.valueOf(t.getFirstPayment())+" 万");
  658. bo.setOperatorActive(setOperatorActive(t));
  659. List<CommodityDetailBo> commoditys = new ArrayList<CommodityDetailBo>();
  660. CommodityDetailBo cdb = null;
  661. List<TOrderDetail> tdList = tOrderMapper.selectOrderCommodity(String.valueOf(t.getOrderNo()));
  662. for(TOrderDetail tod : tdList ){
  663. cdb = new CommodityDetailBo();
  664. cdb.setCommodityPrice(String.valueOf(tod.getCommodityPrice()).equals("0")?"面议":String.valueOf(tod.getCommodityPrice())+" 万");
  665. cdb.setDiscountPrice(String.valueOf(tod.getDiscountPrice()).equals("0")?"面议":String.valueOf(tod.getDiscountPrice())+" 万");
  666. cdb.setCommodityId(tod.getCommodityId());
  667. cdb.setCommodityName(tod.getCommodityName());
  668. cdb.setCommodityMode(tod.getCommodityMode());
  669. cdb.setCommodityType(tod.getCommodityType());
  670. cdb.setCommodityQuantity(tod.getCommodityQuantity());
  671. commoditys.add(cdb);
  672. }
  673. bo.setCommoditys(commoditys);
  674. return bo;
  675. }
  676. @SuppressWarnings("unchecked")
  677. @Override
  678. public Pagination<BillListBo> selectOrderBillList(String orderNo,Integer pageNo,Integer pageSize) {
  679. Map<String, Object> params = new HashMap<String, Object>();
  680. if(orderNo != null) params.put("orderNo", orderNo);
  681. params.put("uid", TokenManager.getUserId());
  682. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectOrderBillByPage","selectOrderBillCount", params, pageNo, pageSize);
  683. List<BillListBo> list = (List<BillListBo>)data.getList();
  684. if(list.size()>0){
  685. for(BillListBo bo:list){
  686. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  687. }
  688. }
  689. data.setList(list);
  690. return data;
  691. }
  692. @Override
  693. @Transactional
  694. public int updateApplyForWithdraw(String orderNo,String remarks) {
  695. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  696. BigDecimal transactionAmount = tOrder.getActuallyTotalAmount().subtract(tOrder.getActuallyBrokerageAmount());
  697. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), TokenManager.getUserId(), DEFAULT_PLATFORM_ID, remarks,
  698. TransactionSubject.SUPPLY_COLLECT, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  699. setOrderState(OrderAction.APPLY_FOR_WITHDRAW, new BigDecimal(0), tOrder, false);
  700. tOrder.setUpdateTime(new Date());
  701. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  702. return 1;
  703. }
  704. @Override
  705. @Transactional
  706. //to update 18
  707. public int updateApplyForCancel(String orderNo) {
  708. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  709. setOrderState(OrderAction.APPLY_FOR_CANCEL, new BigDecimal(0), tOrder, false);
  710. if(true){ //退款
  711. BigDecimal transactionAmount = tOrder.getActuallyTotalAmount().subtract(tOrder.getActuallyBrokerageAmount());
  712. addFundRecord(orderNo, "平台方", DEFAULT_PLATFORM_ID,TokenManager.getUserId(), "买家取消订单",
  713. TransactionSubject.REFUND, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  714. }
  715. tOrder.setUpdateTime(new Date());
  716. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  717. return 1;
  718. }
  719. /**
  720. *
  721. * @param transactionSubject 交易科目
  722. * @param transactionAmount 交易金额
  723. * @param payeeId 收款人
  724. * @param payerId 付款人
  725. * @return
  726. */
  727. private String setBusinessDesc(Integer transactionSubject,BigDecimal transactionAmount){
  728. String result = "";
  729. if(transactionSubject == TransactionSubject.SUPPLY_COLLECT.getCode() || transactionSubject == TransactionSubject.REFUND.getCode()){
  730. result = "收入-"+transactionAmount;
  731. }else if(transactionSubject == TransactionSubject.SUPPLY_PAY.getCode()){
  732. result = "支出-"+transactionAmount;
  733. }
  734. return result;
  735. }
  736. @Override
  737. public int updateConfirmIntention(String orderNo, boolean confirm) {
  738. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  739. setOrderState(OrderAction.CONFIRM_INTENTION, new BigDecimal(0), tOrder, confirm);
  740. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  741. return 1;
  742. }
  743. /*
  744. * -------------------------------------------------- 后台管理端 --------------------------------------------------------
  745. */
  746. @SuppressWarnings("unchecked")
  747. @Override
  748. public Pagination<OrderListBo> selectServiceOrder(OrderListBo bo,String startDate,String endDate,Integer intention,Integer formal,
  749. Integer pageNo, Integer pageSize) {
  750. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  751. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN))
  752. params.put("salesmanId", TokenManager.getAdminId());
  753. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  754. params.put("intention", intention);
  755. params.put("formal", formal);
  756. }else if(0 == intention && 0 == formal){
  757. return new Pagination<OrderListBo>();
  758. }
  759. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  760. params, pageNo, pageSize);
  761. TOrder tOrder = null;
  762. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  763. for(OrderListBo olb:list){
  764. tOrder = new TOrder();
  765. try {
  766. BeanUtilsExt.copyProperties(tOrder, olb);
  767. tOrder.setActuallyTotalAmount(new BigDecimal(olb.getActuallyTotalAmount()));
  768. } catch (InvocationTargetException | IllegalAccessException e) {
  769. e.printStackTrace();
  770. }
  771. olb.setActive(setOperatorActive(tOrder));
  772. }
  773. data.setList(list);
  774. return data;
  775. }
  776. private Map<String,Object> disposeParams(OrderListBo bo,String startDate,String endDate){
  777. Map<String,Object> params = new HashMap<>();
  778. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  779. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate +" 00:00:00");
  780. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate + "23:59:59");
  781. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  782. if(bo.getLiquidationStatus() != null) params.put("liquidationStatus", bo.getLiquidationStatus());
  783. if(bo.getProjectStage() != null) params.put("projectStage", bo.getProjectStage());
  784. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  785. return params;
  786. }
  787. @Override
  788. public ServiceOrderDetailBo selectServiceOrderDetail(String orderNo) {
  789. ServiceOrderDetailBo bo = tOrderMapper.selectServiceOrderDetail(orderNo);
  790. TOrder tOrder = new TOrder();
  791. try {
  792. BeanUtilsExt.copyProperties(tOrder, bo);
  793. tOrder.setActuallyTotalAmount(new BigDecimal(bo.getActuallyTotalAmount()));
  794. bo.setActive(setOperatorActive(tOrder));
  795. } catch (IllegalAccessException | InvocationTargetException e) {
  796. e.printStackTrace();
  797. }
  798. return tOrderMapper.selectServiceOrderDetail(orderNo);
  799. }
  800. @Override
  801. public int updateServiceOrder(String orderNo, String signFirstPayment,
  802. String signTotalAmount, String orderRemarks) {
  803. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  804. checkOrder(tOrder);
  805. boolean flag = false;
  806. if (new BigDecimal(signFirstPayment).compareTo(tOrder.getSignFirstPayment()) != 0)
  807. flag = true;
  808. if (new BigDecimal(signTotalAmount).compareTo(tOrder.getSignTotalAmount()) != 0)
  809. flag = true;
  810. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode() && flag) {
  811. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  812. }
  813. tOrder.setSignFirstPayment(new BigDecimal(signFirstPayment));
  814. tOrder.setSignTotalAmount(new BigDecimal(signTotalAmount));
  815. tOrder.setOrderRemarks(orderRemarks);
  816. tOrder.setUpdateTime(new Date());
  817. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  818. return 1;
  819. }
  820. @Override
  821. public int updateSignServiceOrder(String orderNo, String signFirstPayment, String signTotalAmount,
  822. String approval,String orderRemarks) {
  823. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  824. checkOrder(tOrder);
  825. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  826. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo, ""));
  827. } else {
  828. tOrder.setSignFirstPayment(new BigDecimal(signFirstPayment));
  829. tOrder.setSignTotalAmount(new BigDecimal(signTotalAmount));
  830. tOrder.setOrderStage(OrderStage.SIGNED.getCode());
  831. tOrder.setOrderStatus(OrderState.ALREADY_SIGN.getCode());
  832. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  833. tOrder.setApproval(Integer.valueOf(approval));
  834. tOrder.setUpdateTime(new Date());
  835. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  836. }
  837. return 1;
  838. }
  839. @Override
  840. public int updateRevokeOrder(String orderNo) {
  841. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  842. boolean flag = true;
  843. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  844. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  845. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  846. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  847. flag = false;
  848. }
  849. if(flag && tOrder.getActuallyTotalAmount().doubleValue() == 0){
  850. tOrder.setDeleteSign(ActiveState.ABOLISH.getCode());
  851. }else{
  852. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"作废"));
  853. }
  854. tOrder.setUpdateTime(new Date());
  855. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  856. return 1;
  857. }
  858. public void checkOrder(TOrder tOrder){
  859. if(tOrder == null)
  860. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  861. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  862. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, tOrder.getOrderNo(),""));
  863. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode())
  864. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, tOrder.getOrderNo(),""));
  865. }
  866. @Override
  867. @Transactional
  868. public int addOrderCommodity(String orderNo, String commodityId,String commodityName, String commodityMode, Integer commodityQuantity,Integer commodityType,
  869. String commodityPrice, String discountPrice,String commodityFirstPayment,String discountFirstPayment, String remarks) {
  870. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  871. checkOrder(tOrder);
  872. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  873. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo,""));
  874. }else{
  875. TOrderDetail detail = new TOrderDetail();
  876. detail.setId(UUID.randomUUID().toString());
  877. detail.setOrderNo(orderNo);
  878. detail.setCommodityId(commodityId);
  879. detail.setCommodityName(commodityName);
  880. detail.setCommodityQuantity(commodityQuantity);
  881. detail.setCommodityType(commodityType);
  882. detail.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE:commodityMode);
  883. detail.setCommodityPrice(new BigDecimal(commodityPrice));
  884. detail.setDiscountPrice(new BigDecimal(discountPrice));
  885. detail.setCommodityFirstPayment(new BigDecimal(commodityFirstPayment));
  886. detail.setDiscountFirstPayment(new BigDecimal(discountFirstPayment));
  887. detail.setRemarks(remarks);
  888. detail.setCreateTime(new Date());
  889. tOrderDetailMapper.insert(detail);
  890. //订单市场价总额
  891. BigDecimal totalAmountChange = new BigDecimal(commodityPrice).multiply(new BigDecimal(commodityQuantity));
  892. //订单市场价首付金额
  893. BigDecimal firstPaymentChange = new BigDecimal(commodityFirstPayment).multiply(new BigDecimal(commodityQuantity));
  894. //订单签单总额
  895. BigDecimal signTotalAmountChange = new BigDecimal(discountPrice).multiply(new BigDecimal(commodityQuantity));
  896. //订单签单首付金额
  897. BigDecimal signFirstPaymentChange = new BigDecimal(discountFirstPayment).multiply(new BigDecimal(commodityQuantity));
  898. tOrder.setOrderAmount(tOrder.getOrderAmount().add(totalAmountChange));
  899. tOrder.setFirstPayment(tOrder.getFirstPayment().add(firstPaymentChange));
  900. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().add(signTotalAmountChange));
  901. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().add(signFirstPaymentChange));
  902. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  903. }
  904. return 1;
  905. }
  906. @Override
  907. @Transactional
  908. public int updateOrderCommodity(String detailId,String commodityId, String commodityName,String commodityMode, Integer commodityQuantity,Integer commodityType,
  909. String commodityPrice, String discountPrice,String commodityFirstPayment,String discountFirstPayment,String remarks) {
  910. TOrderDetail oldDetail = tOrderDetailMapper.selectByPrimaryKey(detailId);
  911. TOrder tOrder = tOrderMapper.selectByPrimaryKey(oldDetail.getOrderNo());
  912. checkOrder(tOrder);
  913. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  914. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, oldDetail.getOrderNo(), ""));
  915. } else {
  916. TOrderDetail detail = new TOrderDetail();
  917. detail.setId(detailId);
  918. detail.setOrderNo(oldDetail.getOrderNo());
  919. detail.setCommodityId(commodityId);
  920. detail.setCommodityQuantity(commodityQuantity);
  921. detail.setCommodityType(commodityType);
  922. detail.setCommodityMode(StringUtils.isBlank(commodityMode) ? DEFAULT_COMMODITY_MODE : commodityMode);
  923. detail.setCommodityPrice(new BigDecimal(commodityPrice));
  924. detail.setDiscountPrice(new BigDecimal(discountPrice));
  925. detail.setCommodityFirstPayment(new BigDecimal(commodityFirstPayment));
  926. detail.setDiscountFirstPayment(new BigDecimal(discountFirstPayment));
  927. detail.setRemarks(remarks);
  928. tOrderDetailMapper.insert(detail);
  929. new BigDecimal(discountFirstPayment).multiply(new BigDecimal(commodityQuantity)).subtract(
  930. oldDetail.getDiscountFirstPayment().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  931. // 订单市场价总额
  932. BigDecimal totalAmountChange = new BigDecimal(commodityPrice).multiply(new BigDecimal(commodityQuantity))
  933. .subtract(oldDetail.getCommodityPrice().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  934. // 订单市场价首付金额
  935. BigDecimal firstPaymentChange = new BigDecimal(commodityFirstPayment)
  936. .multiply(new BigDecimal(commodityQuantity)).subtract(oldDetail.getCommodityFirstPayment()
  937. .multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  938. // 订单签单总额
  939. BigDecimal signTotalAmountChange = new BigDecimal(discountPrice).multiply(new BigDecimal(commodityQuantity))
  940. .subtract(oldDetail.getDiscountPrice().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  941. // 订单签单首付金额
  942. BigDecimal signFirstPaymentChange = new BigDecimal(discountFirstPayment)
  943. .multiply(new BigDecimal(commodityQuantity)).subtract(oldDetail.getDiscountFirstPayment()
  944. .multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  945. tOrder.setOrderAmount(tOrder.getOrderAmount().add(totalAmountChange));
  946. tOrder.setFirstPayment(tOrder.getFirstPayment().add(firstPaymentChange));
  947. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().add(signTotalAmountChange));
  948. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().add(signFirstPaymentChange));
  949. tOrder.setUpdateTime(new Date());
  950. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  951. }
  952. return 1;
  953. }
  954. @Override
  955. public int deleteOrderCommodity(String detailId) {
  956. TOrderDetail detail = tOrderDetailMapper.selectByPrimaryKey(detailId);
  957. TOrder tOrder = tOrderMapper.selectByPrimaryKey(detail.getOrderNo());
  958. checkOrder(tOrder);
  959. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  960. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, detail.getOrderNo(), ""));
  961. } else {
  962. BigDecimal totalAmountChange = detail.getCommodityPrice()
  963. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  964. BigDecimal firstPaymentChange = detail.getCommodityFirstPayment()
  965. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  966. BigDecimal signTotalAmountChange = detail.getDiscountPrice()
  967. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  968. BigDecimal signFirstPaymentChange = detail.getCommodityFirstPayment()
  969. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  970. tOrder.setOrderAmount(tOrder.getOrderAmount().subtract(totalAmountChange));
  971. tOrder.setFirstPayment(tOrder.getFirstPayment().subtract(firstPaymentChange));
  972. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().subtract(signTotalAmountChange));
  973. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().subtract(signFirstPaymentChange));
  974. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  975. tOrderDetailMapper.deleteByPrimaryKey(detailId);
  976. }
  977. return 1;
  978. }
  979. @Override
  980. public List<OrganizationManagement> selectMyDeps(){
  981. if(TokenManager.hasRole(AFTConstants.SUPERADMIN) || TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  982. return organizationManagementMapper.selectAllDeps();
  983. else
  984. return selectCurrentDep(TokenManager.getAdminId());
  985. }
  986. private List<OrganizationManagement> selectSubDeps(List<OrganizationManagement> allData,List<OrganizationManagement> superData){
  987. List<OrganizationManagement> subData = new ArrayList<>();
  988. String superIds = "";
  989. for(OrganizationManagement om : superData){
  990. if(!om.getId().equals(om.getSuperId())){
  991. superIds += om.getId() + ",";
  992. }
  993. }
  994. if(StringUtils.isNotBlank(superIds)) subData = organizationManagementMapper.selectSubDeps(superIds.substring(0, superIds.length()-1));
  995. if(subData != null && subData.size()>0) {
  996. allData.addAll(subData);
  997. selectSubDeps(allData,subData);
  998. }
  999. return allData;
  1000. }
  1001. private List<OrganizationManagement> selectCurrentDep(String managerId){
  1002. List<OrganizationManagement> allData = new ArrayList<OrganizationManagement>();
  1003. List<OrganizationManagement> superData = organizationManagementMapper.selectCurrentDeps(managerId);
  1004. if(superData != null && superData.size()>0){
  1005. allData.addAll(superData);
  1006. }
  1007. selectSubDeps(allData,superData);
  1008. return allData;
  1009. }
  1010. @SuppressWarnings("unchecked")
  1011. @Override
  1012. public Pagination<OrderListBo> selectDepServiceOrder(OrderListBo bo, String startDate, String endDate,
  1013. Integer intention, Integer formal, String depIds,Integer pageNo, Integer pageSize) {
  1014. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  1015. if(StringUtils.isNotBlank(depIds)) {
  1016. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
  1017. params.put("depIds","'" + depIds.replace(",", "','") + "'");
  1018. }else{
  1019. if(!depIds.contains(",")) params.put("depIds","'" + depIds + "'");
  1020. }
  1021. }else{
  1022. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1023. return new Pagination<OrderListBo>();
  1024. }
  1025. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  1026. params.put("intention", intention);
  1027. params.put("formal", formal);
  1028. }else if(0 == intention && 0 == formal){
  1029. return new Pagination<OrderListBo>();
  1030. }
  1031. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  1032. params, pageNo, pageSize);
  1033. TOrder tOrder = null;
  1034. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  1035. for(OrderListBo olb:list){
  1036. tOrder = new TOrder();
  1037. try {
  1038. BeanUtilsExt.copyProperties(tOrder, olb);
  1039. tOrder.setActuallyTotalAmount(new BigDecimal(olb.getActuallyTotalAmount()));
  1040. } catch (InvocationTargetException | IllegalAccessException e) {
  1041. e.printStackTrace();
  1042. }
  1043. olb.setActive(setOperatorActive(tOrder));
  1044. }
  1045. data.setList(list);
  1046. return data;
  1047. }
  1048. @SuppressWarnings("unchecked")
  1049. @Override
  1050. public Pagination<OrderListBo> selectApprovalServiceOrder(OrderListBo bo, String startDate, String endDate,
  1051. String depIds,Integer approvalHistory, Integer pageNo, Integer pageSize) {
  1052. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  1053. if(StringUtils.isNotBlank(depIds)) {
  1054. params.put("depIds", depIds);
  1055. }else{
  1056. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1057. return new Pagination<OrderListBo>();
  1058. }
  1059. if(approvalHistory != null){
  1060. params.put("approvalHistory", approvalHistory);
  1061. }
  1062. return (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  1063. params, pageNo, pageSize);
  1064. }
  1065. @Override
  1066. public int createServiceOrder(String uid, Integer orderType) {
  1067. BigDecimal initial = new BigDecimal(0);
  1068. TOrder tOrder = new TOrder();
  1069. tOrder.setOrderType(orderType);
  1070. tOrder.setOrderNo(idGenerator.generateId().toString());
  1071. tOrder.setCreater(TokenManager.getAdminId());
  1072. tOrder.setCreateTime(new Date());
  1073. tOrder.setBuyerId(uid);
  1074. tOrder.setSellerId(DEFAULT_PLATFORM_ID);
  1075. tOrder.setSalesmanId(TokenManager.getAdminId());
  1076. tOrder.setBrokerageAmount(initial);
  1077. tOrder.setFirstPayment(initial);
  1078. tOrder.setOrderAmount(initial);
  1079. tOrder.setOrderChannel(OrderChannel.PORTAL.getCode());
  1080. tOrder.setOrderRemarks("");
  1081. tOrder.setDeleteSign(ActiveState.NORMAL.getCode());
  1082. tOrder.setApproval(ApprovalState.NORMAL.getCode());
  1083. setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false);
  1084. return tOrderMapper.insert(tOrder);
  1085. }
  1086. @SuppressWarnings("unchecked")
  1087. @Override
  1088. public Pagination<OrderListBo> listPublicOrder(Integer pageNo, Integer pageSize) {
  1089. return (Pagination<OrderListBo>)findPage("selectPublicOrderByPage","selectPublicOrderCount",
  1090. null, pageNo, pageSize);
  1091. }
  1092. @Override
  1093. public int updateAppointSalesman(String orderNo, String salesmanId) {
  1094. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1095. checkOrder(tOrder);
  1096. tOrder.setSalesmanId(salesmanId);
  1097. tOrder.setUpdateTime(new Date());
  1098. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1099. }
  1100. @SuppressWarnings("unchecked")
  1101. @Override
  1102. public Pagination<BillListBo> selectMySettlementList(String payeeName, String payerName, String depId,
  1103. String salesmanName, String orderNo, Integer pageNo, Integer pageSize) {
  1104. Map<String, Object> params = new HashMap<String, Object>();
  1105. if(StringUtils.isNotBlank(payerName)) params.put("payeeName", payeeName);
  1106. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1107. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1108. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1109. if(orderNo != null) params.put("orderNo", orderNo);
  1110. /** 特殊处理字段开始 **/
  1111. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  1112. params.put("isFinance", 1);
  1113. }
  1114. params.put("aid", TokenManager.getAdminId());
  1115. /** 特殊处理字段结束 **/
  1116. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1117. List<BillListBo> list = (List<BillListBo>)data.getList();
  1118. if(list.size()>0){
  1119. for(BillListBo bo:list){
  1120. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1121. }
  1122. }
  1123. data.setList(list);
  1124. return data;
  1125. }
  1126. @SuppressWarnings("unchecked")
  1127. @Override
  1128. public Pagination<BillListBo> selectMyBillList(String payeeName, String payerName, String depId,
  1129. String salesmanName,String orderNo, Integer pageNo, Integer pageSize) {
  1130. Map<String, Object> params = new HashMap<String, Object>();
  1131. if(StringUtils.isNotBlank(payerName)) params.put("payeeName", payeeName);
  1132. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1133. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1134. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1135. if(orderNo != null) params.put("orderNo", orderNo);
  1136. /** 特殊处理字段开始 **/
  1137. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  1138. params.put("isFinance", 0);
  1139. }
  1140. params.put("aid", TokenManager.getAdminId());
  1141. /** 特殊处理字段结束 **/
  1142. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1143. List<BillListBo> list = (List<BillListBo>)data.getList();
  1144. if(list.size()>0){
  1145. for(BillListBo bo:list){
  1146. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1147. }
  1148. }
  1149. data.setList(list);
  1150. return data;
  1151. }
  1152. @SuppressWarnings("unchecked")
  1153. @Override
  1154. public Pagination<BillListBo> selectAllBillList(String payeeName, String payerName, String depId,
  1155. String salesmanName ,String financeName, String orderNo, Integer pageNo, Integer pageSize) {
  1156. Map<String, Object> params = new HashMap<String, Object>();
  1157. if(StringUtils.isNotBlank(payerName)) params.put("payeeName", payeeName);
  1158. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1159. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1160. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1161. if(StringUtils.isNotBlank(financeName)) params.put("financeName", financeName);
  1162. if(orderNo != null) params.put("orderNo", orderNo);
  1163. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1164. List<BillListBo> list = (List<BillListBo>)data.getList();
  1165. if(list.size()>0){
  1166. for(BillListBo bo:list){
  1167. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1168. }
  1169. }
  1170. data.setList(list);
  1171. return data;
  1172. }
  1173. @Override
  1174. public BillDetailBo selectBillDetail(String billNo) {
  1175. return tOrderMapper.selectBillDetail(billNo);
  1176. }
  1177. @Override
  1178. @Transactional
  1179. public int updateBill(String billNo, String orderNo, Integer confrim,String financialPayNo,String financialPayTime,String remarks) {
  1180. TOrderBill bill = tOrderBillMapper.selectByPrimaryKey(billNo);
  1181. TOrder order = tOrderMapper.selectByPrimaryKey(orderNo);
  1182. if(bill != null && order != null){
  1183. bill.setBillNo(billNo);
  1184. bill.setFinancialPayNo(financialPayNo);
  1185. try {
  1186. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  1187. } catch (ParseException e) {
  1188. e.printStackTrace();
  1189. }
  1190. bill.setRemarks(remarks);
  1191. if(confrim == AFTConstants.YES){
  1192. bill.setConfirmSign(AuditState.AUDIT_SUCCESS.getCode());
  1193. checkOrder(order);
  1194. if(order.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode())
  1195. setOrderState(OrderAction.CONFIRM_PAY_FOR_FIRST, bill.getTransactionAmount(), order, false);
  1196. if(order.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode())
  1197. setOrderState(OrderAction.CONFIRM_PAY_FOR_LAST, bill.getTransactionAmount(), order, false);
  1198. order.setUpdateTime(new Date());
  1199. tOrderMapper.updateByPrimaryKeySelective(order);
  1200. }else if(confrim == AFTConstants.NO){
  1201. bill.setConfirmSign(AuditState.AUDIT_FAIL.getCode());
  1202. bill.setDeleteSign(Boolean.TRUE);
  1203. }
  1204. tOrderBillMapper.updateByPrimaryKey(bill);
  1205. }
  1206. return 1;
  1207. }
  1208. @Override
  1209. public int updateBill(String billNo, String financialPayNo, String financialPayTime, String remarks) {
  1210. TOrderBill bill = new TOrderBill();
  1211. bill.setBillNo(billNo);
  1212. bill.setFinancialPayNo(financialPayNo);
  1213. try {
  1214. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  1215. } catch (ParseException e) {
  1216. e.printStackTrace();
  1217. }
  1218. bill.setRemarks(remarks);
  1219. tOrderBillMapper.updateByPrimaryKey(bill);
  1220. return 1;
  1221. }
  1222. @Override
  1223. public int approvalServiceOrder(String orderNo, Integer confirm) {
  1224. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1225. checkOrder(tOrder);
  1226. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  1227. || tOrder.getOrderStage() != OrderStage.SIGNED.getCode()
  1228. || tOrder.getApproval() != ApprovalState.WAIT_AUDIT.getCode()){
  1229. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo , ""));
  1230. }
  1231. tOrder.setUpdateTime(new Date());
  1232. if(confirm == AFTConstants.YES){
  1233. tOrder.setApproval(ApprovalState.AUDIT_PASS.getCode());
  1234. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  1235. }else if(confirm == AFTConstants.NO){
  1236. tOrder.setApproval(ApprovalState.AUDIT_REFUSE.getCode());
  1237. }
  1238. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1239. return 1;
  1240. }
  1241. @SuppressWarnings("unchecked")
  1242. @Override
  1243. public Pagination<OrderListBo> listSetUpServiceOrder(String buyerName,String salesmanName, String financeName,
  1244. String depId,Integer approval, Integer pageNo, Integer pageSize) {
  1245. Map<String,Object> params = new HashMap<String,Object>();
  1246. if(StringUtils.isNotBlank(buyerName))
  1247. params.put("buyerName", buyerName);
  1248. if(StringUtils.isNotBlank(salesmanName))
  1249. params.put("salesmanName", salesmanName);
  1250. if(StringUtils.isNotBlank(financeName))
  1251. params.put("financeName",financeName);
  1252. if(StringUtils.isNotBlank(depId))
  1253. params.put("depId", depId);
  1254. if(approval != null)
  1255. params.put("approval", approval);
  1256. return (Pagination<OrderListBo>)findPage("selectSetUpServiceOrderByPage","selectSetUpServiceOrderCount",
  1257. params, pageNo, pageSize);
  1258. }
  1259. @Override
  1260. @Transactional
  1261. public int setUpProject(String orderNo, String signDate, String signComment) {
  1262. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1263. checkOrder(tOrder);
  1264. boolean flag = false;
  1265. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()){
  1266. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode())
  1267. flag = true;
  1268. if(tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode())
  1269. flag = true;
  1270. if(tOrder.getApproval() == ApprovalState.AUDIT_PASS.getCode())
  1271. flag = true;
  1272. }
  1273. if(!flag)
  1274. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1275. tOrder.setProjectStage(ProjectStage.ALREADY_SET_UP.getCode());
  1276. tOrder.setUpdateTime(new Date());
  1277. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1278. //-------------- 查询订单详情 --------------------------
  1279. List<TOrderDetail> detailList = tOrderMapper.selectOrderCommodity(orderNo);
  1280. List<ContractTask> taskList = new ArrayList<>();
  1281. ContractTask task = null;
  1282. Date createTime = new Date();
  1283. String contractId = UUID.randomUUID().toString(); //合同ID
  1284. Contract contract = new Contract();
  1285. contract.setId(contractId);
  1286. contract.setCreateTime(createTime);
  1287. contract.setType(tOrder.getOrderType());
  1288. contract.setSignDate(createTime);
  1289. contract.setOrderNo(orderNo);
  1290. contract.setStatus(ProjectStage.ALREADY_SET_UP.getCode());
  1291. contract.setUid(tOrder.getBuyerId());
  1292. contractMapper.insert(contract);
  1293. for(TOrderDetail orderDetail: detailList){
  1294. for(int i=0; i<orderDetail.getCommodityQuantity();i++){
  1295. task = new ContractTask();
  1296. task.setId(UUID.randomUUID().toString().replace("-", ""));
  1297. task.setCommodityId(orderDetail.getCommodityId());
  1298. task.setCommodityMode(orderDetail.getCommodityMode());
  1299. task.setCommodityName(orderDetail.getCommodityName());
  1300. task.setCommodityType(orderDetail.getCommodityType());
  1301. task.setCommodityQuantity(1);
  1302. task.setCreateTime(createTime);
  1303. task.setContractId(contractId);
  1304. task.setTaskStatus(TaskState.UN_DISTRIBUTION.getCode());
  1305. task.setDeleteSign(DeleteStatus.UNDELETE.getCode());
  1306. taskList.add(task);
  1307. }
  1308. }
  1309. contractMapper.batchInsertContractTask(taskList);
  1310. return 1;
  1311. }
  1312. @Override
  1313. public List<TOrderDetail> selectOrderCommodity(String orderNo) {
  1314. return tOrderMapper.selectOrderCommodity(orderNo);
  1315. }
  1316. }