OrderServiceImpl.java 63 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373
  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. tOrderBillMapper.insert(bill);
  581. return 1;
  582. }
  583. @Override
  584. public int updatePayForFirst(String orderNo, BigDecimal fundAmount,String remarks) {
  585. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  586. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks,
  587. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  588. tOrder.setUpdateTime(new Date());
  589. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  590. return 1;
  591. }
  592. @Override
  593. public int updatePayForLast(String orderNo, BigDecimal fundAmount, String remarks) {
  594. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  595. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks,
  596. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  597. tOrder.setUpdateTime(new Date());
  598. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  599. return 1;
  600. }
  601. @SuppressWarnings("unchecked")
  602. @Override
  603. //to update 18
  604. public Pagination<C2BOrderDetailBo> selectOrderList(boolean confirm,Integer pageNo,Integer pageSize) {
  605. Map<String, Object> params = new HashMap<String, Object>();
  606. Pagination<C2BOrderDetailBo> result = new Pagination<C2BOrderDetailBo>();
  607. //if(!confirm) params.put("intentionStatus", IntentionSate.WAIT_SELLER_CONFIRM.getCode()); //购买意向
  608. params.put("uid", TokenManager.getUserId());
  609. Pagination<TOrder> data = (Pagination<TOrder>)findPage("selectOrderListByPage", "selectOrderListCount", params, pageNo, pageSize);
  610. List<TOrder> list = (List<TOrder>)data.getList();
  611. C2BOrderDetailBo bo = null;
  612. List<C2BOrderDetailBo> boList = new ArrayList<C2BOrderDetailBo>();
  613. List<CommodityDetailBo> commoditys = null;
  614. CommodityDetailBo cdb = null;
  615. if(list.size()>0){
  616. for(TOrder t:list){
  617. bo = new C2BOrderDetailBo();
  618. commoditys = new ArrayList<CommodityDetailBo>();
  619. bo.setOrderNo(String.valueOf(t.getOrderNo()));
  620. bo.setOrderRemarks(t.getOrderRemarks());
  621. bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc());
  622. bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS));
  623. bo.setOrderAmount(String.valueOf(t.getOrderAmount()).equals("0")?"面议":String.valueOf(t.getOrderAmount())+" 万");
  624. bo.setFirstPayment(String.valueOf(t.getFirstPayment()).equals("0")?"面议":String.valueOf(t.getFirstPayment())+" 万");
  625. bo.setOperatorActive(setOperatorActive(t));
  626. List<TOrderDetail> tdList = tOrderMapper.selectOrderCommodity(String.valueOf(t.getOrderNo()));
  627. for(TOrderDetail tod : tdList ){
  628. cdb = new CommodityDetailBo();
  629. cdb.setCommodityPrice(String.valueOf(tod.getCommodityPrice()).equals("0")?"面议":String.valueOf(tod.getCommodityPrice())+" 万");
  630. cdb.setDiscountPrice(String.valueOf(tod.getDiscountPrice()).equals("0")?"面议":String.valueOf(tod.getDiscountPrice())+" 万");
  631. cdb.setCommodityId(tod.getCommodityId());
  632. cdb.setCommodityName(tod.getCommodityName());
  633. cdb.setCommodityMode(tod.getCommodityMode());
  634. cdb.setCommodityType(tod.getCommodityType());
  635. cdb.setCommodityQuantity(tod.getCommodityQuantity());
  636. commoditys.add(cdb);
  637. }
  638. bo.setCommoditys(commoditys);
  639. boList.add(bo);
  640. }
  641. }
  642. result.setList(boList);
  643. result.setPageNo(data.getPageNo());
  644. result.setPageSize(data.getPageSize());
  645. result.setTotalCount(data.getTotalCount());
  646. result.setFilterNo(data.getFilterNo());
  647. return result;
  648. }
  649. @Override
  650. public C2BOrderDetailBo selectOrderDetail(String orderNo) {
  651. TOrder t = tOrderMapper.selectByPrimaryKey(orderNo);
  652. C2BOrderDetailBo bo = new C2BOrderDetailBo();
  653. bo.setOrderNo(String.valueOf(t.getOrderNo()));
  654. bo.setOrderRemarks(t.getOrderRemarks());
  655. bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc());
  656. bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS));
  657. bo.setOrderAmount(String.valueOf(t.getOrderAmount()).equals("0")?"面议":String.valueOf(t.getOrderAmount())+" 万");
  658. bo.setFirstPayment(String.valueOf(t.getFirstPayment()).equals("0")?"面议":String.valueOf(t.getFirstPayment())+" 万");
  659. bo.setOperatorActive(setOperatorActive(t));
  660. List<CommodityDetailBo> commoditys = new ArrayList<CommodityDetailBo>();
  661. CommodityDetailBo cdb = null;
  662. List<TOrderDetail> tdList = tOrderMapper.selectOrderCommodity(String.valueOf(t.getOrderNo()));
  663. for(TOrderDetail tod : tdList ){
  664. cdb = new CommodityDetailBo();
  665. cdb.setCommodityPrice(String.valueOf(tod.getCommodityPrice()).equals("0")?"面议":String.valueOf(tod.getCommodityPrice())+" 万");
  666. cdb.setDiscountPrice(String.valueOf(tod.getDiscountPrice()).equals("0")?"面议":String.valueOf(tod.getDiscountPrice())+" 万");
  667. cdb.setCommodityId(tod.getCommodityId());
  668. cdb.setCommodityName(tod.getCommodityName());
  669. cdb.setCommodityMode(tod.getCommodityMode());
  670. cdb.setCommodityType(tod.getCommodityType());
  671. cdb.setCommodityQuantity(tod.getCommodityQuantity());
  672. commoditys.add(cdb);
  673. }
  674. bo.setCommoditys(commoditys);
  675. return bo;
  676. }
  677. @SuppressWarnings("unchecked")
  678. @Override
  679. public Pagination<BillListBo> selectOrderBillList(String orderNo,Integer pageNo,Integer pageSize) {
  680. Map<String, Object> params = new HashMap<String, Object>();
  681. if(orderNo != null) params.put("orderNo", orderNo);
  682. params.put("uid", TokenManager.getUserId());
  683. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectOrderBillByPage","selectOrderBillCount", params, pageNo, pageSize);
  684. List<BillListBo> list = (List<BillListBo>)data.getList();
  685. if(list.size()>0){
  686. for(BillListBo bo:list){
  687. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  688. }
  689. }
  690. data.setList(list);
  691. return data;
  692. }
  693. @Override
  694. @Transactional
  695. public int updateApplyForWithdraw(String orderNo,String remarks) {
  696. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  697. BigDecimal transactionAmount = tOrder.getActuallyTotalAmount().subtract(tOrder.getActuallyBrokerageAmount());
  698. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), TokenManager.getUserId(), DEFAULT_PLATFORM_ID, remarks,
  699. TransactionSubject.SUPPLY_COLLECT, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  700. setOrderState(OrderAction.APPLY_FOR_WITHDRAW, new BigDecimal(0), tOrder, false);
  701. tOrder.setUpdateTime(new Date());
  702. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  703. return 1;
  704. }
  705. @Override
  706. @Transactional
  707. //to update 18
  708. public int updateApplyForCancel(String orderNo) {
  709. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  710. setOrderState(OrderAction.APPLY_FOR_CANCEL, new BigDecimal(0), tOrder, false);
  711. if(true){ //退款
  712. BigDecimal transactionAmount = tOrder.getActuallyTotalAmount().subtract(tOrder.getActuallyBrokerageAmount());
  713. addFundRecord(orderNo, "平台方", DEFAULT_PLATFORM_ID,TokenManager.getUserId(), "买家取消订单",
  714. TransactionSubject.REFUND, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  715. }
  716. tOrder.setUpdateTime(new Date());
  717. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  718. return 1;
  719. }
  720. /**
  721. *
  722. * @param transactionSubject 交易科目
  723. * @param transactionAmount 交易金额
  724. * @param payeeId 收款人
  725. * @param payerId 付款人
  726. * @return
  727. */
  728. private String setBusinessDesc(Integer transactionSubject,BigDecimal transactionAmount){
  729. String result = "";
  730. if(transactionSubject == TransactionSubject.SUPPLY_COLLECT.getCode() || transactionSubject == TransactionSubject.REFUND.getCode()){
  731. result = "收入-"+transactionAmount;
  732. }else if(transactionSubject == TransactionSubject.SUPPLY_PAY.getCode()){
  733. result = "支出-"+transactionAmount;
  734. }
  735. return result;
  736. }
  737. @Override
  738. public int updateConfirmIntention(String orderNo, boolean confirm) {
  739. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  740. setOrderState(OrderAction.CONFIRM_INTENTION, new BigDecimal(0), tOrder, confirm);
  741. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  742. return 1;
  743. }
  744. /*
  745. * -------------------------------------------------- 后台管理端 --------------------------------------------------------
  746. */
  747. @SuppressWarnings("unchecked")
  748. @Override
  749. public Pagination<OrderListBo> selectServiceOrder(OrderListBo bo,String startDate,String endDate,Integer intention,Integer formal,
  750. Integer pageNo, Integer pageSize) {
  751. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  752. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN))
  753. params.put("salesmanId", TokenManager.getAdminId());
  754. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  755. params.put("intention", intention);
  756. params.put("formal", formal);
  757. }else if(0 == intention && 0 == formal){
  758. return new Pagination<OrderListBo>();
  759. }
  760. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  761. params, pageNo, pageSize);
  762. TOrder tOrder = null;
  763. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  764. for(OrderListBo olb:list){
  765. tOrder = new TOrder();
  766. try {
  767. BeanUtilsExt.copyProperties(tOrder, olb);
  768. tOrder.setActuallyTotalAmount(new BigDecimal(olb.getActuallyTotalAmount()));
  769. } catch (InvocationTargetException | IllegalAccessException e) {
  770. e.printStackTrace();
  771. }
  772. olb.setActive(setOperatorActive(tOrder));
  773. }
  774. data.setList(list);
  775. return data;
  776. }
  777. private Map<String,Object> disposeParams(OrderListBo bo,String startDate,String endDate){
  778. Map<String,Object> params = new HashMap<>();
  779. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  780. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate +" 00:00:00");
  781. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate + "23:59:59");
  782. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  783. if(bo.getLiquidationStatus() != null) params.put("liquidationStatus", bo.getLiquidationStatus());
  784. if(bo.getProjectStage() != null) params.put("projectStage", bo.getProjectStage());
  785. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  786. return params;
  787. }
  788. @Override
  789. public ServiceOrderDetailBo selectServiceOrderDetail(String orderNo) {
  790. ServiceOrderDetailBo bo = tOrderMapper.selectServiceOrderDetail(orderNo);
  791. TOrder tOrder = new TOrder();
  792. try {
  793. BeanUtilsExt.copyProperties(tOrder, bo);
  794. tOrder.setActuallyTotalAmount(new BigDecimal(bo.getActuallyTotalAmount()));
  795. bo.setActive(setOperatorActive(tOrder));
  796. } catch (IllegalAccessException | InvocationTargetException e) {
  797. e.printStackTrace();
  798. }
  799. return tOrderMapper.selectServiceOrderDetail(orderNo);
  800. }
  801. @Override
  802. public int updateServiceOrder(String orderNo, String signFirstPayment,
  803. String signTotalAmount, String orderRemarks) {
  804. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  805. checkOrder(tOrder);
  806. boolean flag = false;
  807. if (new BigDecimal(signFirstPayment).compareTo(tOrder.getSignFirstPayment()) != 0)
  808. flag = true;
  809. if (new BigDecimal(signTotalAmount).compareTo(tOrder.getSignTotalAmount()) != 0)
  810. flag = true;
  811. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode() && flag) {
  812. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  813. }
  814. tOrder.setSignFirstPayment(new BigDecimal(signFirstPayment));
  815. tOrder.setSignTotalAmount(new BigDecimal(signTotalAmount));
  816. tOrder.setOrderRemarks(orderRemarks);
  817. tOrder.setUpdateTime(new Date());
  818. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  819. return 1;
  820. }
  821. @Override
  822. public int updateSignServiceOrder(String orderNo, String signFirstPayment, String signTotalAmount,
  823. String approval,String orderRemarks) {
  824. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  825. checkOrder(tOrder);
  826. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  827. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo, ""));
  828. } else {
  829. tOrder.setSignFirstPayment(new BigDecimal(signFirstPayment));
  830. tOrder.setSignTotalAmount(new BigDecimal(signTotalAmount));
  831. tOrder.setOrderStage(OrderStage.SIGNED.getCode());
  832. tOrder.setOrderStatus(OrderState.ALREADY_SIGN.getCode());
  833. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  834. tOrder.setApproval(Integer.valueOf(approval));
  835. tOrder.setUpdateTime(new Date());
  836. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  837. }
  838. return 1;
  839. }
  840. @Override
  841. public int updateRevokeOrder(String orderNo) {
  842. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  843. boolean flag = true;
  844. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  845. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  846. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  847. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  848. flag = false;
  849. }
  850. if(flag && tOrder.getActuallyTotalAmount().doubleValue() == 0){
  851. tOrder.setDeleteSign(ActiveState.ABOLISH.getCode());
  852. }else{
  853. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"作废"));
  854. }
  855. tOrder.setUpdateTime(new Date());
  856. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  857. return 1;
  858. }
  859. public void checkOrder(TOrder tOrder){
  860. if(tOrder == null)
  861. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  862. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  863. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, tOrder.getOrderNo(),""));
  864. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode())
  865. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, tOrder.getOrderNo(),""));
  866. }
  867. @Override
  868. @Transactional
  869. public int addOrderCommodity(String orderNo, String commodityId,String commodityName, String commodityMode, Integer commodityQuantity,Integer commodityType,
  870. String commodityPrice, String discountPrice,String commodityFirstPayment,String discountFirstPayment, String remarks) {
  871. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  872. checkOrder(tOrder);
  873. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  874. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo,""));
  875. }else{
  876. TOrderDetail detail = new TOrderDetail();
  877. detail.setId(UUID.randomUUID().toString());
  878. detail.setOrderNo(orderNo);
  879. detail.setCommodityId(commodityId);
  880. detail.setCommodityName(commodityName);
  881. detail.setCommodityQuantity(commodityQuantity);
  882. detail.setCommodityType(commodityType);
  883. detail.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE:commodityMode);
  884. detail.setCommodityPrice(new BigDecimal(commodityPrice));
  885. detail.setDiscountPrice(new BigDecimal(discountPrice));
  886. detail.setCommodityFirstPayment(new BigDecimal(commodityFirstPayment));
  887. detail.setDiscountFirstPayment(new BigDecimal(discountFirstPayment));
  888. detail.setRemarks(remarks);
  889. detail.setCreateTime(new Date());
  890. tOrderDetailMapper.insert(detail);
  891. //订单市场价总额
  892. BigDecimal totalAmountChange = new BigDecimal(commodityPrice).multiply(new BigDecimal(commodityQuantity));
  893. //订单市场价首付金额
  894. BigDecimal firstPaymentChange = new BigDecimal(commodityFirstPayment).multiply(new BigDecimal(commodityQuantity));
  895. //订单签单总额
  896. BigDecimal signTotalAmountChange = new BigDecimal(discountPrice).multiply(new BigDecimal(commodityQuantity));
  897. //订单签单首付金额
  898. BigDecimal signFirstPaymentChange = new BigDecimal(discountFirstPayment).multiply(new BigDecimal(commodityQuantity));
  899. tOrder.setOrderAmount(tOrder.getOrderAmount().add(totalAmountChange));
  900. tOrder.setFirstPayment(tOrder.getFirstPayment().add(firstPaymentChange));
  901. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().add(signTotalAmountChange));
  902. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().add(signFirstPaymentChange));
  903. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  904. }
  905. return 1;
  906. }
  907. @Override
  908. @Transactional
  909. public int updateOrderCommodity(String detailId,String commodityId, String commodityName,String commodityMode, Integer commodityQuantity,Integer commodityType,
  910. String commodityPrice, String discountPrice,String commodityFirstPayment,String discountFirstPayment,String remarks) {
  911. TOrderDetail oldDetail = tOrderDetailMapper.selectByPrimaryKey(detailId);
  912. TOrder tOrder = tOrderMapper.selectByPrimaryKey(oldDetail.getOrderNo());
  913. checkOrder(tOrder);
  914. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  915. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, oldDetail.getOrderNo(), ""));
  916. } else {
  917. TOrderDetail detail = new TOrderDetail();
  918. detail.setId(detailId);
  919. detail.setOrderNo(oldDetail.getOrderNo());
  920. detail.setCommodityId(commodityId);
  921. detail.setCommodityQuantity(commodityQuantity);
  922. detail.setCommodityType(commodityType);
  923. detail.setCommodityMode(StringUtils.isBlank(commodityMode) ? DEFAULT_COMMODITY_MODE : commodityMode);
  924. detail.setCommodityPrice(new BigDecimal(commodityPrice));
  925. detail.setDiscountPrice(new BigDecimal(discountPrice));
  926. detail.setCommodityFirstPayment(new BigDecimal(commodityFirstPayment));
  927. detail.setDiscountFirstPayment(new BigDecimal(discountFirstPayment));
  928. detail.setRemarks(remarks);
  929. tOrderDetailMapper.insert(detail);
  930. new BigDecimal(discountFirstPayment).multiply(new BigDecimal(commodityQuantity)).subtract(
  931. oldDetail.getDiscountFirstPayment().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  932. // 订单市场价总额
  933. BigDecimal totalAmountChange = new BigDecimal(commodityPrice).multiply(new BigDecimal(commodityQuantity))
  934. .subtract(oldDetail.getCommodityPrice().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  935. // 订单市场价首付金额
  936. BigDecimal firstPaymentChange = new BigDecimal(commodityFirstPayment)
  937. .multiply(new BigDecimal(commodityQuantity)).subtract(oldDetail.getCommodityFirstPayment()
  938. .multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  939. // 订单签单总额
  940. BigDecimal signTotalAmountChange = new BigDecimal(discountPrice).multiply(new BigDecimal(commodityQuantity))
  941. .subtract(oldDetail.getDiscountPrice().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  942. // 订单签单首付金额
  943. BigDecimal signFirstPaymentChange = new BigDecimal(discountFirstPayment)
  944. .multiply(new BigDecimal(commodityQuantity)).subtract(oldDetail.getDiscountFirstPayment()
  945. .multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  946. tOrder.setOrderAmount(tOrder.getOrderAmount().add(totalAmountChange));
  947. tOrder.setFirstPayment(tOrder.getFirstPayment().add(firstPaymentChange));
  948. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().add(signTotalAmountChange));
  949. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().add(signFirstPaymentChange));
  950. tOrder.setUpdateTime(new Date());
  951. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  952. }
  953. return 1;
  954. }
  955. @Override
  956. public int deleteOrderCommodity(String detailId) {
  957. TOrderDetail detail = tOrderDetailMapper.selectByPrimaryKey(detailId);
  958. TOrder tOrder = tOrderMapper.selectByPrimaryKey(detail.getOrderNo());
  959. checkOrder(tOrder);
  960. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  961. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, detail.getOrderNo(), ""));
  962. } else {
  963. BigDecimal totalAmountChange = detail.getCommodityPrice()
  964. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  965. BigDecimal firstPaymentChange = detail.getCommodityFirstPayment()
  966. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  967. BigDecimal signTotalAmountChange = detail.getDiscountPrice()
  968. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  969. BigDecimal signFirstPaymentChange = detail.getCommodityFirstPayment()
  970. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  971. tOrder.setOrderAmount(tOrder.getOrderAmount().subtract(totalAmountChange));
  972. tOrder.setFirstPayment(tOrder.getFirstPayment().subtract(firstPaymentChange));
  973. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().subtract(signTotalAmountChange));
  974. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().subtract(signFirstPaymentChange));
  975. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  976. tOrderDetailMapper.deleteByPrimaryKey(detailId);
  977. }
  978. return 1;
  979. }
  980. @Override
  981. public List<OrganizationManagement> selectMyDeps(){
  982. if(TokenManager.hasRole(AFTConstants.SUPERADMIN) || TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  983. return organizationManagementMapper.selectAllDeps();
  984. else
  985. return selectCurrentDep(TokenManager.getAdminId());
  986. }
  987. private List<OrganizationManagement> selectSubDeps(List<OrganizationManagement> allData,List<OrganizationManagement> superData){
  988. List<OrganizationManagement> subData = new ArrayList<>();
  989. String superIds = "";
  990. for(OrganizationManagement om : superData){
  991. if(!om.getId().equals(om.getSuperId())){
  992. superIds += om.getId() + ",";
  993. }
  994. }
  995. if(StringUtils.isNotBlank(superIds)) subData = organizationManagementMapper.selectSubDeps(superIds.substring(0, superIds.length()-1));
  996. if(subData != null && subData.size()>0) {
  997. allData.addAll(subData);
  998. selectSubDeps(allData,subData);
  999. }
  1000. return allData;
  1001. }
  1002. private List<OrganizationManagement> selectCurrentDep(String managerId){
  1003. List<OrganizationManagement> allData = new ArrayList<OrganizationManagement>();
  1004. List<OrganizationManagement> superData = organizationManagementMapper.selectCurrentDeps(managerId);
  1005. if(superData != null && superData.size()>0){
  1006. allData.addAll(superData);
  1007. }
  1008. selectSubDeps(allData,superData);
  1009. return allData;
  1010. }
  1011. @SuppressWarnings("unchecked")
  1012. @Override
  1013. public Pagination<OrderListBo> selectDepServiceOrder(OrderListBo bo, String startDate, String endDate,
  1014. Integer intention, Integer formal, String depIds,Integer pageNo, Integer pageSize) {
  1015. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  1016. if(StringUtils.isNotBlank(depIds)) {
  1017. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
  1018. params.put("depIds","'" + depIds.replace(",", "','") + "'");
  1019. }else{
  1020. if(!depIds.contains(",")) params.put("depIds","'" + depIds + "'");
  1021. }
  1022. }else{
  1023. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1024. return new Pagination<OrderListBo>();
  1025. }
  1026. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  1027. params.put("intention", intention);
  1028. params.put("formal", formal);
  1029. }else if(0 == intention && 0 == formal){
  1030. return new Pagination<OrderListBo>();
  1031. }
  1032. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  1033. params, pageNo, pageSize);
  1034. TOrder tOrder = null;
  1035. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  1036. for(OrderListBo olb:list){
  1037. tOrder = new TOrder();
  1038. try {
  1039. BeanUtilsExt.copyProperties(tOrder, olb);
  1040. tOrder.setActuallyTotalAmount(new BigDecimal(olb.getActuallyTotalAmount()));
  1041. } catch (InvocationTargetException | IllegalAccessException e) {
  1042. e.printStackTrace();
  1043. }
  1044. olb.setActive(setOperatorActive(tOrder));
  1045. }
  1046. data.setList(list);
  1047. return data;
  1048. }
  1049. @SuppressWarnings("unchecked")
  1050. @Override
  1051. public Pagination<OrderListBo> selectApprovalServiceOrder(OrderListBo bo, String startDate, String endDate,
  1052. String depIds,Integer approvalHistory, Integer pageNo, Integer pageSize) {
  1053. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  1054. if(StringUtils.isNotBlank(depIds)) {
  1055. params.put("depIds", depIds);
  1056. }else{
  1057. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1058. return new Pagination<OrderListBo>();
  1059. }
  1060. if(approvalHistory != null){
  1061. params.put("approvalHistory", approvalHistory);
  1062. }
  1063. return (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  1064. params, pageNo, pageSize);
  1065. }
  1066. @Override
  1067. public int createServiceOrder(String uid, Integer orderType) {
  1068. BigDecimal initial = new BigDecimal(0);
  1069. TOrder tOrder = new TOrder();
  1070. tOrder.setOrderType(orderType);
  1071. tOrder.setOrderNo(idGenerator.generateId().toString());
  1072. tOrder.setCreater(TokenManager.getAdminId());
  1073. tOrder.setCreateTime(new Date());
  1074. tOrder.setBuyerId(uid);
  1075. tOrder.setSellerId(DEFAULT_PLATFORM_ID);
  1076. tOrder.setSalesmanId(TokenManager.getAdminId());
  1077. tOrder.setBrokerageAmount(initial);
  1078. tOrder.setFirstPayment(initial);
  1079. tOrder.setOrderAmount(initial);
  1080. tOrder.setOrderChannel(OrderChannel.PORTAL.getCode());
  1081. tOrder.setOrderRemarks("");
  1082. tOrder.setDeleteSign(ActiveState.NORMAL.getCode());
  1083. tOrder.setApproval(ApprovalState.NORMAL.getCode());
  1084. setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false);
  1085. return tOrderMapper.insert(tOrder);
  1086. }
  1087. @SuppressWarnings("unchecked")
  1088. @Override
  1089. public Pagination<OrderListBo> listPublicOrder(Integer pageNo, Integer pageSize) {
  1090. return (Pagination<OrderListBo>)findPage("selectPublicOrderByPage","selectPublicOrderCount",
  1091. null, pageNo, pageSize);
  1092. }
  1093. @Override
  1094. public int updateAppointSalesman(String orderNo, String salesmanId) {
  1095. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1096. checkOrder(tOrder);
  1097. tOrder.setSalesmanId(salesmanId);
  1098. tOrder.setUpdateTime(new Date());
  1099. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1100. }
  1101. @SuppressWarnings("unchecked")
  1102. @Override
  1103. public Pagination<BillListBo> selectMySettlementList(String payeeName, String payerName, String depId,
  1104. String salesmanName, String orderNo, Integer pageNo, Integer pageSize) {
  1105. Map<String, Object> params = new HashMap<String, Object>();
  1106. if(StringUtils.isNotBlank(payerName)) params.put("payeeName", payeeName);
  1107. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1108. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1109. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1110. if(orderNo != null) params.put("orderNo", orderNo);
  1111. /** 特殊处理字段开始 **/
  1112. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  1113. params.put("isFinance", 1);
  1114. }
  1115. params.put("aid", TokenManager.getAdminId());
  1116. /** 特殊处理字段结束 **/
  1117. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1118. List<BillListBo> list = (List<BillListBo>)data.getList();
  1119. if(list.size()>0){
  1120. for(BillListBo bo:list){
  1121. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1122. }
  1123. }
  1124. data.setList(list);
  1125. return data;
  1126. }
  1127. @SuppressWarnings("unchecked")
  1128. @Override
  1129. public Pagination<BillListBo> selectMyBillList(String payeeName, String payerName, String depId,
  1130. String salesmanName,String orderNo, Integer pageNo, Integer pageSize) {
  1131. Map<String, Object> params = new HashMap<String, Object>();
  1132. if(StringUtils.isNotBlank(payerName)) params.put("payeeName", payeeName);
  1133. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1134. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1135. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1136. if(orderNo != null) params.put("orderNo", orderNo);
  1137. /** 特殊处理字段开始 **/
  1138. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  1139. params.put("isFinance", 0);
  1140. }
  1141. params.put("aid", TokenManager.getAdminId());
  1142. /** 特殊处理字段结束 **/
  1143. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1144. List<BillListBo> list = (List<BillListBo>)data.getList();
  1145. if(list.size()>0){
  1146. for(BillListBo bo:list){
  1147. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1148. }
  1149. }
  1150. data.setList(list);
  1151. return data;
  1152. }
  1153. @SuppressWarnings("unchecked")
  1154. @Override
  1155. public Pagination<BillListBo> selectAllBillList(String payeeName, String payerName, String depId,
  1156. String salesmanName ,String financeName, String orderNo, Integer pageNo, Integer pageSize) {
  1157. Map<String, Object> params = new HashMap<String, Object>();
  1158. if(StringUtils.isNotBlank(payerName)) params.put("payeeName", payeeName);
  1159. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1160. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1161. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1162. if(StringUtils.isNotBlank(financeName)) params.put("financeName", financeName);
  1163. if(orderNo != null) params.put("orderNo", orderNo);
  1164. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1165. List<BillListBo> list = (List<BillListBo>)data.getList();
  1166. if(list.size()>0){
  1167. for(BillListBo bo:list){
  1168. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1169. }
  1170. }
  1171. data.setList(list);
  1172. return data;
  1173. }
  1174. @Override
  1175. public BillDetailBo selectBillDetail(String billNo) {
  1176. return tOrderMapper.selectBillDetail(billNo);
  1177. }
  1178. @Override
  1179. @Transactional
  1180. public int updateBill(String billNo, String orderNo, Integer confrim,String financialPayNo,String financialPayTime,String remarks) {
  1181. TOrderBill bill = tOrderBillMapper.selectByPrimaryKey(billNo);
  1182. TOrder order = tOrderMapper.selectByPrimaryKey(orderNo);
  1183. if(bill != null && order != null){
  1184. bill.setBillNo(billNo);
  1185. bill.setFinancialPayNo(financialPayNo);
  1186. try {
  1187. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  1188. } catch (ParseException e) {
  1189. e.printStackTrace();
  1190. }
  1191. bill.setRemarks(remarks);
  1192. if(confrim == AFTConstants.YES){
  1193. bill.setConfirmSign(AuditState.AUDIT_SUCCESS.getCode());
  1194. checkOrder(order);
  1195. if(order.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode())
  1196. setOrderState(OrderAction.CONFIRM_PAY_FOR_FIRST, bill.getTransactionAmount(), order, false);
  1197. if(order.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode())
  1198. setOrderState(OrderAction.CONFIRM_PAY_FOR_LAST, bill.getTransactionAmount(), order, false);
  1199. order.setUpdateTime(new Date());
  1200. tOrderMapper.updateByPrimaryKeySelective(order);
  1201. }else if(confrim == AFTConstants.NO){
  1202. bill.setConfirmSign(AuditState.AUDIT_FAIL.getCode());
  1203. bill.setDeleteSign(Boolean.TRUE);
  1204. }
  1205. tOrderBillMapper.updateByPrimaryKey(bill);
  1206. }
  1207. return 1;
  1208. }
  1209. @Override
  1210. public int updateBill(String billNo, String financialPayNo, String financialPayTime, String remarks) {
  1211. TOrderBill bill = new TOrderBill();
  1212. bill.setBillNo(billNo);
  1213. bill.setFinancialPayNo(financialPayNo);
  1214. try {
  1215. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  1216. } catch (ParseException e) {
  1217. e.printStackTrace();
  1218. }
  1219. bill.setRemarks(remarks);
  1220. tOrderBillMapper.updateByPrimaryKey(bill);
  1221. return 1;
  1222. }
  1223. @Override
  1224. public int approvalServiceOrder(String orderNo, Integer confirm) {
  1225. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1226. checkOrder(tOrder);
  1227. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  1228. || tOrder.getOrderStage() != OrderStage.SIGNED.getCode()
  1229. || tOrder.getApproval() != ApprovalState.WAIT_AUDIT.getCode()){
  1230. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo , ""));
  1231. }
  1232. tOrder.setUpdateTime(new Date());
  1233. if(confirm == AFTConstants.YES){
  1234. tOrder.setApproval(ApprovalState.AUDIT_PASS.getCode());
  1235. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  1236. }else if(confirm == AFTConstants.NO){
  1237. tOrder.setApproval(ApprovalState.AUDIT_REFUSE.getCode());
  1238. }
  1239. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1240. return 1;
  1241. }
  1242. @SuppressWarnings("unchecked")
  1243. @Override
  1244. public Pagination<OrderListBo> listSetUpServiceOrder(String buyerName,String salesmanName, String financeName,
  1245. String depId,Integer approval, Integer pageNo, Integer pageSize) {
  1246. Map<String,Object> params = new HashMap<String,Object>();
  1247. if(StringUtils.isNotBlank(buyerName))
  1248. params.put("buyerName", buyerName);
  1249. if(StringUtils.isNotBlank(salesmanName))
  1250. params.put("salesmanName", salesmanName);
  1251. if(StringUtils.isNotBlank(financeName))
  1252. params.put("financeName",financeName);
  1253. if(StringUtils.isNotBlank(depId))
  1254. params.put("depId", depId);
  1255. if(approval != null)
  1256. params.put("approval", approval);
  1257. return (Pagination<OrderListBo>)findPage("selectSetUpServiceOrderByPage","selectSetUpServiceOrderCount",
  1258. params, pageNo, pageSize);
  1259. }
  1260. @Override
  1261. @Transactional
  1262. public int setUpProject(String orderNo, String signDate, String signComment) {
  1263. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1264. checkOrder(tOrder);
  1265. boolean flag = false;
  1266. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()){
  1267. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode())
  1268. flag = true;
  1269. if(tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode())
  1270. flag = true;
  1271. if(tOrder.getApproval() == ApprovalState.AUDIT_PASS.getCode())
  1272. flag = true;
  1273. }
  1274. if(!flag)
  1275. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1276. tOrder.setProjectStage(ProjectStage.ALREADY_SET_UP.getCode());
  1277. tOrder.setUpdateTime(new Date());
  1278. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1279. //-------------- 查询订单详情 --------------------------
  1280. List<TOrderDetail> detailList = tOrderMapper.selectOrderCommodity(orderNo);
  1281. List<ContractTask> taskList = new ArrayList<>();
  1282. ContractTask task = null;
  1283. Date createTime = new Date();
  1284. String contractId = UUID.randomUUID().toString(); //合同ID
  1285. Contract contract = new Contract();
  1286. contract.setId(contractId);
  1287. contract.setCreateTime(createTime);
  1288. contract.setType(tOrder.getOrderType());
  1289. contract.setSignDate(createTime);
  1290. contract.setOrderNo(orderNo);
  1291. contract.setStatus(ProjectStage.ALREADY_SET_UP.getCode());
  1292. contract.setUid(tOrder.getBuyerId());
  1293. contractMapper.insert(contract);
  1294. for(TOrderDetail orderDetail: detailList){
  1295. for(int i=0; i<orderDetail.getCommodityQuantity();i++){
  1296. task = new ContractTask();
  1297. task.setId(UUID.randomUUID().toString().replace("-", ""));
  1298. task.setCommodityId(orderDetail.getCommodityId());
  1299. task.setCommodityMode(orderDetail.getCommodityMode());
  1300. task.setCommodityName(orderDetail.getCommodityName());
  1301. task.setCommodityType(orderDetail.getCommodityType());
  1302. task.setCommodityQuantity(1);
  1303. task.setCreateTime(createTime);
  1304. task.setContractId(contractId);
  1305. task.setTaskStatus(TaskState.UN_DISTRIBUTION.getCode());
  1306. task.setDeleteSign(DeleteStatus.LOCKING.getCode());
  1307. taskList.add(task);
  1308. }
  1309. }
  1310. contractMapper.batchInsertContractTask(taskList);
  1311. return 1;
  1312. }
  1313. @Override
  1314. public List<TOrderDetail> selectOrderCommodity(String orderNo) {
  1315. return tOrderMapper.selectOrderCommodity(orderNo);
  1316. }
  1317. }