OrderServiceImpl.java 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220
  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.text.SimpleDateFormat;
  6. import java.util.*;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9. import java.util.stream.Collectors;
  10. import com.alibaba.fastjson.JSONArray;
  11. import com.goafanti.common.dao.*;
  12. import com.goafanti.common.model.*;
  13. import com.goafanti.order.enums.*;
  14. import com.google.gson.JsonArray;
  15. import org.apache.commons.beanutils.BeanUtils;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import com.goafanti.common.bo.Error;
  22. import com.goafanti.common.constant.AFTConstants;
  23. import com.goafanti.common.constant.ErrorConstants;
  24. import com.goafanti.common.enums.DeleteStatus;
  25. import com.goafanti.common.enums.NoticeReadStatus;
  26. import com.goafanti.common.enums.NoticeStatus;
  27. import com.goafanti.common.enums.OrderFlowState;
  28. import com.goafanti.common.enums.UserLockReleaseStatus;
  29. import com.goafanti.common.error.BusinessException;
  30. import com.goafanti.common.utils.AsyncUtils;
  31. import com.goafanti.common.utils.BeanUtilsExt;
  32. import com.goafanti.common.utils.DateUtils;
  33. import com.goafanti.common.utils.MobileMessageUtils;
  34. import com.goafanti.core.mybatis.BaseMybatisDao;
  35. import com.goafanti.core.mybatis.JDBCIdGenerator;
  36. import com.goafanti.core.mybatis.page.Pagination;
  37. import com.goafanti.core.shiro.token.TokenManager;
  38. import com.goafanti.customer.bo.BusinessListBo;
  39. import com.goafanti.customer.bo.FollowBusinessBo;
  40. import com.goafanti.customer.bo.LockingReleaseBo;
  41. import com.goafanti.order.bo.BillDetailBo;
  42. import com.goafanti.order.bo.BillListBo;
  43. import com.goafanti.order.bo.CommodityDetailBo;
  44. import com.goafanti.order.bo.OperatorActive;
  45. import com.goafanti.order.bo.OrderChangeBo;
  46. import com.goafanti.order.bo.OrderListBo;
  47. import com.goafanti.order.bo.ServiceOrderDetailBo;
  48. import com.goafanti.order.bo.C2BOrderDetailBo;
  49. import com.goafanti.order.bo.C2COrderDetailBo;
  50. import com.goafanti.order.service.OrderService;
  51. import com.goafanti.techproject.enums.TaskState;
  52. @Service
  53. public class OrderServiceImpl extends BaseMybatisDao<TOrderMapper> implements OrderService {
  54. @Autowired
  55. private UserMapper userMapper;
  56. @Autowired
  57. private TOrderNewMapper tOrderNewMapper;
  58. @Autowired
  59. private TOrderBillMapper tOrderBillMapper;
  60. @Autowired
  61. private DepartmentMapper departmentMapper;
  62. @Autowired
  63. private ContractMapper contractMapper;
  64. @Autowired
  65. private ContractTaskMapper contractTaskMapper;
  66. @Autowired
  67. private TOrderChangeMapper tOrderChangeMapper;
  68. @Autowired
  69. private TmpTableMapper tmpTableMapper;
  70. @Autowired
  71. private AdminMapper adminMapper;
  72. @Autowired
  73. private AsyncUtils asyncUtils;
  74. @Autowired
  75. private ContractTaskLogMapper contractTaskLogMapper;
  76. @Autowired
  77. private BusinessProjectMapper businessProjectMapper;
  78. @Autowired
  79. private UserLockReleaseMapper userLockReleaseMapper;
  80. @Autowired
  81. UserRoleMapper userRoleMapper;
  82. @Autowired
  83. private UserBusinessMapper userBusinessMapper;
  84. @Autowired
  85. private UserFollowMapper userFollowMapper;
  86. @Autowired
  87. private UserFollowBusinessMapper userFollowBusinessMapper;
  88. @Value(value = "${mobileRemindCodeTemplate}")
  89. private String mobileRemindCodeTemplate = null;
  90. @Value(value = "${accessKey}")
  91. private String accessKey = null;
  92. @Value(value = "${accessSecret}")
  93. private String accessSecret = null;
  94. private final BigDecimal DEFAULT_FIRST_PAYMENT = new BigDecimal(0);//默认首付价格
  95. private final BigDecimal DEFAULT_COMMODITY_PRICE = new BigDecimal(0);//默认单价
  96. private final String DEFAULT_PLATFORM_ID = "0"; //平台默认id
  97. private final String DEFAULT_ADMIN_ID = "1"; //默认管理员
  98. private final double DEFAULT_BROKERAGE_PROPORTION = 0; //佣金比例
  99. private final double DEFAULT_COMMODITY_DISCOUNT = 1; //折扣比例
  100. private final String DEFAULT_COMMODITY_MODE = "NO_MODE"; //暂无规格
  101. private final String DEFUALT_SET_UP_COMMENT = "系统自动生产立项信息,请自行修改或补充";
  102. /**
  103. * 订单状态流转
  104. * @param orderAction
  105. * @param changeAmount
  106. * @param tOrder
  107. * @param confrim
  108. */
  109. public void setOrderState(OrderAction orderAction,BigDecimal changeAmount,TOrder tOrder,boolean confrim){
  110. BigDecimal initial = new BigDecimal(0);
  111. checkOrder(tOrder);
  112. if(orderAction == OrderAction.ADD_INTENTION){ //添加意向订单
  113. tOrder.setOrderStatus(OrderState.WAIT_FOR_CONFIRM.getCode());
  114. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  115. // tOrder.setOrderStage(OrderStage.INTENTION.getCode());
  116. /** 意向阶段 **/
  117. /** 跟单阶段 **/
  118. /** 合同阶段 **/
  119. /** 项目阶段 **/
  120. tOrder.setProjectStage(ProjectStage.NOT_SATISFY_CONDITION.getCode());
  121. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  122. tOrder.setActuallyFirstPayment(initial);
  123. tOrder.setActuallyBrokerageAmount(initial);
  124. tOrder.setActuallyTotalAmount(initial);
  125. tOrder.setActuallyWithdrawAmount(initial);
  126. }else if(orderAction == OrderAction.CONFIRM_INTENTION){ //确认意向订单 (用户确认)
  127. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()){
  128. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认意向订单"));
  129. }
  130. if (confrim) {
  131. tOrder.setOrderStatus(OrderState.WAIT_FOR_SIGN.getCode()); // 卖家同意
  132. // tOrder.setOrderStage(OrderStage.FOLLOWING.getCode());
  133. } else {
  134. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()); // 买家拒绝
  135. }
  136. }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_FIRST){ // 支付首付(审核流水)
  137. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  138. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,""));
  139. }
  140. int boundary = tOrder.getActuallyFirstPayment().add(changeAmount).compareTo(tOrder.getSignFirstPayment());
  141. int boundary2 = tOrder.getActuallyTotalAmount().add(changeAmount).compareTo(tOrder.getSignTotalAmount());
  142. if(boundary2 == 1){
  143. throw new BusinessException(new Error(ErrorConstants.PAY_BEYOND_SIGN,"支付首付款"));
  144. }else if(boundary2 == 0){ //全付清
  145. tOrder.setActuallyTotalAmount(tOrder.getSignTotalAmount());
  146. tOrder.setActuallyFirstPayment(tOrder.getSignFirstPayment());
  147. tOrder.setLiquidationStatus(LiquidationState.ALREADY_PAY.getCode());
  148. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  149. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  150. }else if(boundary == 1){ //超过首付未达尾款
  151. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  152. tOrder.setActuallyFirstPayment(tOrder.getSignFirstPayment());
  153. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  154. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  155. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  156. }else if(boundary == -1){ //首付待付清
  157. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  158. tOrder.setActuallyFirstPayment(tOrder.getActuallyFirstPayment().add(changeAmount));
  159. }else if(boundary == 0){ //首付已结清
  160. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  161. tOrder.setActuallyFirstPayment(tOrder.getSignFirstPayment());
  162. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  163. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  164. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  165. }
  166. }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_LAST){ //支付尾款 (审核流水)
  167. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()){
  168. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付尾款"));
  169. }
  170. int boundary = tOrder.getActuallyTotalAmount().add(changeAmount).compareTo(tOrder.getSignTotalAmount());
  171. if(boundary == 1){
  172. throw new BusinessException(new Error(ErrorConstants.PAY_BEYOND_SIGN,"支付尾款"));
  173. }else if(boundary == -1){
  174. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  175. }else if(boundary == 0){
  176. tOrder.setActuallyTotalAmount(tOrder.getSignTotalAmount());
  177. tOrder.setLiquidationStatus(LiquidationState.ALREADY_PAY.getCode());
  178. }
  179. }else if(orderAction == OrderAction.APPLY_FOR_WITHDRAW){ //提现申请
  180. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  181. || tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()
  182. || tOrder.getActuallyTotalAmount().doubleValue() <= 0){
  183. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"等待提现"));
  184. }
  185. tOrder.setLiquidationStatus(LiquidationState.WAIT_FOR_WITHDRAW.getCode());
  186. }else if(orderAction == OrderAction.CONFIRM_WITHDRAW){ //提现确认 (审核员先审核流水)
  187. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  188. || tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_WITHDRAW.getCode()
  189. || tOrder.getActuallyTotalAmount().doubleValue() <= 0){
  190. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认提现"));
  191. }
  192. tOrder.setLiquidationStatus(LiquidationState.ALREADY_WITHDRAW.getCode());
  193. tOrder.setActuallyWithdrawAmount(tOrder.getActuallyWithdrawAmount().add(changeAmount));
  194. }else if(orderAction == OrderAction.APPLY_FOR_CANCEL){ //取消订单
  195. boolean flag = true;
  196. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()
  197. && tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  198. flag = false;
  199. }
  200. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  201. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  202. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  203. flag = false;
  204. }
  205. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单"));
  206. if(TokenManager.getToken() instanceof Admin){
  207. if(!tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID))
  208. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单"));
  209. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  210. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  211. if( tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode())
  212. tOrder.setOrderStatus(OrderState.SELLER_CANCEL_AFTER_SIGN.getCode());
  213. }else if(TokenManager.getToken() instanceof User){
  214. if(TokenManager.getUserId().equals(tOrder.getSellerId())){
  215. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  216. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  217. if( tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  218. tOrder.setOrderStatus(OrderState.SELLER_CANCEL_AFTER_SIGN.getCode());
  219. }else if(TokenManager.getUserId().equals(tOrder.getBuyerId())){
  220. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  221. tOrder.setOrderStatus(OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode());
  222. if( tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  223. tOrder.setOrderStatus(OrderState.BUYER_CANCEL_AFTER_SIGN.getCode());
  224. }
  225. }
  226. }else if(orderAction == OrderAction.APPLY_FOR_REFUND){ //退款申请
  227. boolean flag = true;
  228. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  229. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  230. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  231. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  232. flag = false;
  233. }
  234. if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()) flag = true; // Add 2018/4/9 if normal order in changing can refund
  235. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode()
  236. || tOrder.getLiquidationStatus() == LiquidationState.REFUSE_REFUND.getCode()
  237. || tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  238. || tOrder.getLiquidationStatus() == LiquidationState.COMPLETE_REFUND.getCode()){
  239. flag = false;
  240. }
  241. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  242. flag = false;
  243. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"申请退款"));
  244. tOrder.setLiquidationStatus(LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode());
  245. }else if(orderAction == OrderAction.CONFIRM_REFUND){ //退款确认
  246. boolean flag = true;
  247. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  248. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  249. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  250. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  251. flag = false;
  252. }
  253. if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()) flag = true; // Add 2018/4/9 if normal order in changing can refund
  254. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  255. flag = false;
  256. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  257. flag = false;
  258. if(confrim) {
  259. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"同意退款"));
  260. tOrder.setLiquidationStatus(LiquidationState.AGREE_REFUND.getCode());
  261. }else{
  262. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"拒绝退款"));
  263. tOrder.setLiquidationStatus(LiquidationState.REFUSE_REFUND.getCode());
  264. }
  265. }else if(orderAction == OrderAction.COMPLETE_REFUND){ //完成退款
  266. boolean flag = true;
  267. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  268. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  269. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  270. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  271. flag = false;
  272. }
  273. if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()) flag = true; // Add 2018/4/9 if normal order in changing can refund
  274. if(tOrder.getLiquidationStatus() != LiquidationState.AGREE_REFUND.getCode())
  275. flag = false;
  276. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  277. flag = false;
  278. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"申请退款"));
  279. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  280. int boundary = tOrder.getActuallyTotalAmount().compareTo(tOrder.getSignTotalAmount());
  281. if(boundary == 0) {
  282. tOrder.setLiquidationStatus(LiquidationState.COMPLETE_REFUND.getCode()); //完成退款
  283. }else if(boundary == 1){
  284. tOrder.setLiquidationStatus(LiquidationState.AGREE_REFUND.getCode()); //需要再退款
  285. }else if(boundary == -1){
  286. throw new BusinessException(new Error(ErrorConstants.REFUND_BEYOND_SIGN,"退款")); //超过退款金额
  287. }
  288. }
  289. }
  290. /**
  291. * 设置按钮状态
  292. * @param tOrder
  293. * @return
  294. */
  295. private OperatorActive setOperatorActive(TOrder tOrder){
  296. OperatorActive active = new OperatorActive();
  297. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  298. return active;
  299. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode()) {
  300. active.setApplyUnLock(true);
  301. return active;
  302. }
  303. if (TokenManager.getToken() instanceof User) {
  304. active.setConfirmPayForFirst(false);
  305. active.setConfirmPayForLast(false);
  306. active.setConfirmWithdraw(false);
  307. active.setCompleteRefund(false);
  308. active.setApplyLock(false);
  309. active.setApplyUnLock(false);
  310. active.setApplyRevoke(false);
  311. active.setApplySign(false);
  312. if (TokenManager.getUserId().equals(tOrder.getBuyerId())) { // 买方
  313. active.setApplyForWithdraw(false);
  314. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  315. /** 需求订单 开始 **/
  316. if (tOrder.getOrderType() == CommodityType.DEMAND.getTypeCode()) {
  317. active.setConfirmIntention(true);
  318. active.setRefuseIntention(true);
  319. } else {
  320. active.setConfirmIntention(false);
  321. active.setRefuseIntention(false);
  322. }
  323. /** 需求订单 结束 **/
  324. } else {
  325. active.setConfirmIntention(false);
  326. active.setRefuseIntention(false);
  327. }
  328. if ((tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode() || tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  329. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()) {
  330. active.setPayForFirst(true); //支付首付
  331. } else {
  332. active.setPayForFirst(false); //支付首付
  333. }
  334. if ((tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode() || tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  335. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()) {
  336. active.setPayForLast(true); //支付尾款
  337. } else {
  338. active.setPayForLast(false); //支付尾款
  339. }
  340. boolean flag = true;
  341. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()
  342. && tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  343. flag = false;
  344. }
  345. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  346. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  347. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  348. flag = false;
  349. }
  350. active.setApplyForCancel(flag); //申请取消
  351. flag = true;
  352. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  353. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  354. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  355. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  356. flag = false;
  357. }
  358. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode()
  359. || tOrder.getLiquidationStatus() == LiquidationState.REFUSE_REFUND.getCode()
  360. || tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  361. || tOrder.getLiquidationStatus() == LiquidationState.COMPLETE_REFUND.getCode()){
  362. flag = false;
  363. }
  364. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  365. flag = false;
  366. active.setApplyForRefund(flag); //申请退款
  367. }else if(TokenManager.getUserId().equals(tOrder.getSellerId())){ //卖方
  368. active.setPayForFirst(false);
  369. active.setPayForLast(false);
  370. active.setApplyForRefund(false);
  371. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  372. /** 需求订单 开始 **/
  373. if (tOrder.getOrderType() == CommodityType.DEMAND.getTypeCode()) {
  374. active.setConfirmIntention(false);
  375. active.setRefuseIntention(false);
  376. } else {
  377. active.setConfirmIntention(true);
  378. active.setRefuseIntention(true);
  379. }
  380. /** 需求订单 结束 **/
  381. } else {
  382. active.setConfirmIntention(false);
  383. active.setRefuseIntention(false);
  384. }
  385. boolean flag = true;
  386. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  387. flag = false;
  388. }
  389. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  390. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  391. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  392. flag = false;
  393. }
  394. active.setApplyForCancel(flag); //申请取消
  395. flag = true;
  396. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  397. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  398. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  399. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  400. flag = false;
  401. }
  402. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  403. flag = false;
  404. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  405. flag = false;
  406. active.setAgreeRefund(flag); //同意退款
  407. active.setRefuseRefund(flag); //拒绝退款
  408. if (tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  409. && tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode()
  410. && tOrder.getActuallyTotalAmount().doubleValue() > 0) {
  411. active.setApplyForWithdraw(true); //申请提现
  412. } else {
  413. active.setApplyForWithdraw(false); //申请提现
  414. }
  415. }else{
  416. active.setPayForFirst(false);
  417. active.setPayForLast(false);
  418. active.setConfirmIntention(false);
  419. active.setRefuseIntention(false);
  420. active.setApplyForCancel(false);
  421. active.setApplyForRefund(false);
  422. active.setAgreeRefund(false);
  423. active.setRefuseRefund(false);
  424. active.setApplyForWithdraw(false);
  425. }
  426. }
  427. if (TokenManager.getToken() instanceof Admin) {
  428. active.setPayForFirst(false);
  429. active.setPayForLast(false);
  430. active.setApplyForWithdraw(false);
  431. active.setApplyForRefund(false);
  432. if (tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID)) { // 平台作为卖方
  433. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  434. active.setConfirmIntention(true);
  435. active.setRefuseIntention(true);
  436. } else {
  437. active.setConfirmIntention(false);
  438. active.setRefuseIntention(false);
  439. }
  440. boolean flag = true;
  441. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  442. flag = false;
  443. }
  444. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  445. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  446. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  447. flag = false;
  448. }
  449. active.setApplyForCancel(flag); //申请取消
  450. flag = true;
  451. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  452. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  453. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  454. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  455. flag = false;
  456. }
  457. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  458. flag = false;
  459. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  460. flag = false;
  461. active.setAgreeRefund(flag); //同意退款
  462. active.setRefuseRefund(flag); //拒绝退款
  463. } else {
  464. active.setConfirmIntention(false); //确认意向
  465. active.setRefuseIntention(false); //拒绝意向
  466. active.setApplyForCancel(false); //申请取消
  467. active.setAgreeRefund(false); //同意退款
  468. active.setRefuseRefund(false); //拒绝退款
  469. }
  470. }
  471. //平台方作为中间方 确认首付 - 尾款 - 提现 - 退款
  472. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  473. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  474. active.setConfirmPayForFirst(true);
  475. }else{
  476. active.setConfirmPayForFirst(false);
  477. }
  478. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  479. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  480. active.setConfirmPayForLast(true);
  481. }else{
  482. active.setConfirmPayForLast(false);
  483. }
  484. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  485. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_WITHDRAW.getCode()){
  486. active.setConfirmWithdraw(true);
  487. }else{
  488. active.setConfirmWithdraw(false);
  489. }
  490. boolean flag = true;
  491. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  492. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  493. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  494. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  495. flag = false;
  496. }
  497. if(flag && tOrder.getActuallyTotalAmount().doubleValue() == 0
  498. && tOrder.getDeleteSign() == DeleteStatus.UNDELETE.getCode()){
  499. active.setApplyRevoke(true); //作废
  500. }else{
  501. active.setApplyRevoke(false); //作废
  502. }
  503. if(tOrder.getLiquidationStatus() != LiquidationState.AGREE_REFUND.getCode())
  504. flag = false;
  505. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  506. flag = false;
  507. active.setCompleteRefund(flag); //完成退款
  508. flag = true;
  509. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode())
  510. flag = false;
  511. active.setApplySign(flag); //签单
  512. if(tOrder.getDeleteSign() == DeleteStatus.UNDELETE.getCode()){
  513. active.setApplyLock(true);
  514. }else{
  515. active.setApplyLock(false);
  516. }
  517. if(tOrder.getDeleteSign() == DeleteStatus.LOCKING.getCode()){
  518. active.setApplyUnLock(true);
  519. }else{
  520. active.setApplyUnLock(false);
  521. }
  522. return active;
  523. }
  524. /**
  525. * 添加流水记录
  526. * @param orderNo 订单编号
  527. * @param creater 创建人
  528. * @param payeeId 收款人
  529. * @param payerId 付款人
  530. * @param remarks 附言
  531. * @param transactionSubject 交易科目
  532. * @param payChannel 支付渠道
  533. * @param transactionMode 支付方式
  534. * @return
  535. */
  536. public int addFundRecord(String orderNo,String creater,String payeeId,String payerId,String remarks,TransactionSubject transactionSubject,PayChannel payChannel,
  537. BigDecimal transactionAmount,TransactionMode transactionMode,AuditState auditState){
  538. TOrderBill bill = new TOrderBill();
  539. bill.setBillNo(UUID.randomUUID().toString().replace("-", ""));
  540. bill.setConfirmSign(auditState.getCode());
  541. bill.setCreater(creater);
  542. bill.setDeleteSign(Boolean.FALSE);
  543. bill.setOrderNo(orderNo);
  544. bill.setTransactionAmount(transactionAmount);
  545. bill.setPayeeId(payeeId);
  546. bill.setPayerId(payerId);
  547. bill.setRemarks(remarks);
  548. bill.setTransactionAmount(transactionAmount);
  549. bill.setTransactionMode(transactionMode.getCode());
  550. bill.setTransactionSubject(transactionSubject.getCode());
  551. bill.setTransactionChannel(payChannel.getCode());
  552. bill.setCreateTime(new Date());
  553. return tOrderBillMapper.insert(bill);
  554. }
  555. @SuppressWarnings("unchecked")
  556. @Override
  557. public Pagination<BillListBo> selectOrderBillList(String orderNo,Integer pageNo,Integer pageSize) {
  558. Map<String, Object> params = new HashMap<String, Object>();
  559. if(orderNo != null) params.put("orderNo", orderNo);
  560. params.put("uid", TokenManager.getUserId());
  561. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectOrderBillByPage","selectOrderBillCount", params, pageNo, pageSize);
  562. List<BillListBo> list = (List<BillListBo>)data.getList();
  563. if(list.size()>0){
  564. for(BillListBo bo:list){
  565. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  566. }
  567. }
  568. data.setList(list);
  569. return data;
  570. }
  571. /**
  572. *
  573. * @param transactionSubject 交易科目
  574. * @param transactionAmount 交易金额
  575. * @return
  576. */
  577. private String setBusinessDesc(Integer transactionSubject,BigDecimal transactionAmount){
  578. String result = "";
  579. if(transactionSubject == TransactionSubject.SUPPLY_COLLECT.getCode() || transactionSubject == TransactionSubject.REFUND.getCode()){
  580. result = "收入-"+transactionAmount;
  581. }else if(transactionSubject == TransactionSubject.SUPPLY_PAY.getCode()){
  582. result = "支出-"+transactionAmount;
  583. }
  584. return result;
  585. }
  586. /*
  587. * -------------------------------------------------- 后台管理端 --------------------------------------------------------
  588. */
  589. @SuppressWarnings("unchecked")
  590. @Override
  591. public Pagination<OrderListBo> selectServiceOrder(OrderListBo bo,String startDate,String endDate,Integer intention,Integer formal,
  592. Integer pageNo, Integer pageSize) {
  593. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  594. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN))
  595. params.put("salesmanId", TokenManager.getAdminId());
  596. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  597. params.put("intention", intention);
  598. params.put("formal", formal);
  599. }else if(0 == intention && 0 == formal){
  600. return new Pagination<OrderListBo>();
  601. }
  602. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  603. params, pageNo, pageSize);
  604. TOrder tOrder = null;
  605. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  606. for(OrderListBo olb:list){
  607. tOrder = new TOrder();
  608. try {
  609. BeanUtilsExt.copyProperties(tOrder, olb);
  610. tOrder.setActuallyTotalAmount(olb.getActuallyTotalAmount());
  611. } catch (InvocationTargetException | IllegalAccessException e) {
  612. e.printStackTrace();
  613. }
  614. olb.setActive(setOperatorActive(tOrder));
  615. }
  616. data.setList(list);
  617. return data;
  618. }
  619. private Map<String,Object> disposeParams(OrderListBo bo,String startDate,String endDate){
  620. Map<String,Object> params = new HashMap<>();
  621. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  622. if(StringUtils.isNotBlank(bo.getOrderNo())) params.put("orderNo", bo.getOrderNo());
  623. if(null!=bo.getApproval()) params.put("approval", bo.getApproval());
  624. if(StringUtils.isNotBlank(bo.getSalesmanName())) params.put("salesmanName", bo.getSalesmanName());
  625. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate +" 00:00:00");
  626. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate + "23:59:59");
  627. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  628. if(bo.getLiquidationStatus() != null) params.put("liquidationStatus", bo.getLiquidationStatus());
  629. if(bo.getProjectStage() != null) params.put("projectStage", bo.getProjectStage());
  630. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  631. return params;
  632. }
  633. public void checkOrder(TOrder tOrder){
  634. if(tOrder == null)
  635. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  636. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  637. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, tOrder.getOrderNo(),""));
  638. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode())
  639. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, tOrder.getOrderNo(),""));
  640. }
  641. private void lockProject(BusinessListBo ub) {
  642. UserLockRelease ulr= new UserLockRelease();
  643. ulr.setId(UUID.randomUUID().toString());
  644. ulr.setType(1);
  645. ulr.setAid(TokenManager.getAdminId());
  646. ulr.setBusinessProjectId(ub.getBusinessProjectId());
  647. SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " );
  648. try {
  649. if (null==ub.getCreateTime()) {
  650. ulr.setLockTime(new Date());
  651. }else {
  652. ulr.setLockTime(sdf.parse(ub.getCreateTime()));
  653. }
  654. } catch (ParseException e) {
  655. e.printStackTrace();
  656. }
  657. ulr.setStatus(UserLockReleaseStatus.LOCKED.getCode());
  658. ulr.setUid(ub.getUid());
  659. userLockReleaseMapper.insert(ulr);
  660. }
  661. @SuppressWarnings("unused")
  662. private void releaseProject(List<LockingReleaseBo> releaseList){
  663. if(releaseList != null && releaseList.size()>0){
  664. UserLockRelease ulr = null;
  665. for(LockingReleaseBo bo : releaseList){
  666. ulr = new UserLockRelease();
  667. ulr.setId(bo.getId());
  668. ulr.setStatus(UserLockReleaseStatus.RELEASE.getCode());
  669. userLockReleaseMapper.updateByPrimaryKeySelective(ulr);
  670. }
  671. }
  672. }
  673. @Override
  674. public List<Department> selectMyDeps(){
  675. if(TokenManager.hasRole(AFTConstants.SUPERADMIN) || TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  676. return departmentMapper.selectAllDeps();
  677. else
  678. return selectCurrentDep(TokenManager.getAdminId());
  679. }
  680. private List<Department> selectSubDeps(List<Department> allData,List<Department> superData){
  681. List<Department> subData = new ArrayList<>();
  682. String superIds = "";
  683. for(Department om : superData){
  684. if(!om.getId().equals(om.getSuperId())){
  685. superIds += om.getId() + ",";
  686. }
  687. }
  688. if(StringUtils.isNotBlank(superIds)) subData = departmentMapper.selectSubDepsList(superIds.substring(0, superIds.length()-1));
  689. if(subData != null && subData.size()>0) {
  690. allData.addAll(subData);
  691. selectSubDeps(allData,subData);
  692. }
  693. return allData;
  694. }
  695. private List<Department> selectCurrentDep(String managerId){
  696. List<Department> allData = new ArrayList<Department>();
  697. List<Department> superData = departmentMapper.selectSubDepsList(managerId);
  698. if(superData != null && superData.size()>0){
  699. allData.addAll(superData);
  700. }
  701. selectSubDeps(allData,superData);
  702. return allData;
  703. }
  704. @SuppressWarnings("unchecked")
  705. @Override
  706. public Pagination<OrderListBo> selectDepServiceOrder(OrderListBo bo, String startDate, String endDate,
  707. Integer intention, Integer formal, String depIds,Integer pageNo, Integer pageSize) {
  708. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  709. if(StringUtils.isNotBlank(depIds)) {
  710. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
  711. params.put("depIds","'" + depIds.replace(",", "','") + "'");
  712. }else{
  713. if(!depIds.contains(",")) params.put("depIds","'" + depIds + "'");
  714. }
  715. }else{
  716. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  717. return new Pagination<OrderListBo>();
  718. }
  719. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  720. params.put("intention", intention);
  721. params.put("formal", formal);
  722. }else if(0 == intention && 0 == formal){
  723. return new Pagination<OrderListBo>();
  724. }
  725. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  726. params, pageNo, pageSize);
  727. TOrder tOrder = null;
  728. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  729. for(OrderListBo olb:list){
  730. tOrder = new TOrder();
  731. try {
  732. BeanUtilsExt.copyProperties(tOrder, olb);
  733. tOrder.setActuallyTotalAmount(olb.getActuallyTotalAmount());
  734. } catch (InvocationTargetException | IllegalAccessException e) {
  735. e.printStackTrace();
  736. }
  737. olb.setActive(setOperatorActive(tOrder));
  738. }
  739. data.setList(list);
  740. return data;
  741. }
  742. @SuppressWarnings("unchecked")
  743. @Override
  744. public Pagination<OrderListBo> selectApprovalServiceOrder(OrderListBo bo, String startDate, String endDate,
  745. String depIds,Integer approvalHistory, Integer pageNo, Integer pageSize) {
  746. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  747. if(StringUtils.isNotBlank(depIds)) {
  748. params.put("depIds", "'" + depIds + "'");
  749. }else{
  750. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  751. return new Pagination<OrderListBo>();
  752. }
  753. if(approvalHistory != null){
  754. params.put("approvalHistory", approvalHistory);
  755. }
  756. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  757. if(bo.getOrderType() != null) params.put("orderType", bo.getOrderType());
  758. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  759. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  760. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate);
  761. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate);
  762. params.put("deleteStatus", 1);
  763. return (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  764. params, pageNo, pageSize);
  765. }
  766. @SuppressWarnings("unchecked")
  767. @Override
  768. public Pagination<OrderListBo> selectPublicOrder(OrderListBo bo,String startDate,String endDate,Integer pageNo, Integer pageSize) {
  769. Map<String, Object> params = new HashMap<String,Object>();
  770. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  771. if(bo.getOrderType() != null) params.put("orderType", bo.getOrderType());
  772. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  773. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  774. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate);
  775. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate);
  776. return (Pagination<OrderListBo>)findPage("selectPublicOrderByPage","selectPublicOrderCount",
  777. params, pageNo, pageSize);
  778. }
  779. @SuppressWarnings("unchecked")
  780. @Override
  781. public Pagination<OrderListBo> selectSettlementList(String orderNo, String depId,String buyerName,String salesmanName,
  782. String financeId,String financeName,Integer orderStatus,Integer liquidationStatus,Integer approval,Integer isDistributionFinance,
  783. String startDate,String endDate,Integer pageNo, Integer pageSize) {
  784. Map<String, Object> params = new HashMap<String, Object>();
  785. if(StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  786. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  787. if(StringUtils.isNotBlank(buyerName)) params.put("buyerName", buyerName);
  788. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  789. if(StringUtils.isNotBlank(financeId)) params.put("financeId", financeId);
  790. if(StringUtils.isNotBlank(financeName)) params.put("financeName", financeName);
  791. if(orderStatus != null) params.put("orderStatus", orderStatus);
  792. if(liquidationStatus != null) params.put("liquidationStatus", liquidationStatus);
  793. if(approval != null) params.put("approval", approval);
  794. if(isDistributionFinance != null) params.put("isDistributionFinance", isDistributionFinance);
  795. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate);
  796. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate);
  797. return (Pagination<OrderListBo>)findPage("selectSettlementByPage","selectSettlementCount", params, pageNo, pageSize);
  798. }
  799. @SuppressWarnings("unchecked")
  800. @Override
  801. public Pagination<BillListBo> selectMyBillList(String payeeName, String payerName, String depId,
  802. String salesmanName,String orderNo, Integer confirmSign,Integer deleteSign, Integer pageNo, Integer pageSize) {
  803. Map<String, Object> params = new HashMap<String, Object>();
  804. if(StringUtils.isNotBlank(payeeName)) params.put("payeeName", payeeName);
  805. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  806. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  807. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  808. if(StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  809. if(confirmSign != null) params.put("confirmSign", confirmSign);
  810. if(deleteSign != null) params.put("deleteSign", deleteSign);
  811. /** 特殊处理字段开始 **/
  812. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  813. params.put("isFinance", 1);
  814. }
  815. params.put("aid", TokenManager.getAdminId());
  816. /** 特殊处理字段结束 **/
  817. return (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  818. }
  819. @SuppressWarnings("unchecked")
  820. @Override
  821. public Pagination<BillListBo> queryMyBillList(String payeeName, String payerName, String depId,
  822. String salesmanName,String orderNo, Integer confirmSign,Integer deleteSign, Integer pageNo, Integer pageSize) {
  823. Map<String, Object> params = new HashMap<String, Object>();
  824. if(StringUtils.isNotBlank(payeeName)) params.put("payeeName", payeeName);
  825. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  826. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  827. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  828. if(StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  829. if(confirmSign != null) params.put("confirmSign", confirmSign);
  830. if(deleteSign != null) params.put("deleteSign", deleteSign);
  831. /** 特殊处理字段开始 **/
  832. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  833. params.put("isFinance", 0);
  834. }
  835. params.put("aid", TokenManager.getAdminId());
  836. /** 特殊处理字段结束 **/
  837. return (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  838. }
  839. @SuppressWarnings("unchecked")
  840. @Override
  841. public Pagination<BillListBo> queryAllBillList(String payeeName, String payerName, String depId,
  842. String salesmanName ,String financeName, String orderNo, Integer confirmSign,Integer deleteSign,Integer pageNo, Integer pageSize) {
  843. Map<String, Object> params = new HashMap<String, Object>();
  844. if(StringUtils.isNotBlank(payeeName)) params.put("payeeName", payeeName);
  845. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  846. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  847. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  848. if(StringUtils.isNotBlank(financeName)) params.put("financeName", financeName);
  849. if(orderNo != null) params.put("orderNo", orderNo);
  850. if(confirmSign != null) params.put("confirmSign", confirmSign);
  851. if(deleteSign != null) params.put("deleteSign", deleteSign);
  852. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  853. List<BillListBo> list = (List<BillListBo>)data.getList();
  854. if(list.size()>0){
  855. for(BillListBo bo:list){
  856. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  857. }
  858. }
  859. data.setList(list);
  860. return data;
  861. }
  862. @Override
  863. public int updateBill(String billNo,String orderNo, String financialPayNo, String financialPayTime, String remarks) {
  864. TOrderBill bill = new TOrderBill();
  865. bill.setBillNo(billNo);
  866. bill.setOrderNo(orderNo);
  867. bill.setFinancialPayNo(financialPayNo);
  868. try {
  869. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  870. } catch (ParseException e) {
  871. e.printStackTrace();
  872. }
  873. bill.setRemarks(remarks);
  874. return tOrderBillMapper.updateByPrimaryKeySelective(bill);
  875. }
  876. @SuppressWarnings("unchecked")
  877. @Override
  878. public Pagination<OrderListBo> listSetUpServiceOrder(String buyerName,String salesmanName, String financeName,
  879. String depId,Integer approval, Integer pageNo, Integer pageSize) {
  880. Map<String,Object> params = new HashMap<String,Object>();
  881. if(StringUtils.isNotBlank(buyerName))
  882. params.put("buyerName", buyerName);
  883. if(StringUtils.isNotBlank(salesmanName))
  884. params.put("salesmanName", salesmanName);
  885. if(StringUtils.isNotBlank(financeName))
  886. params.put("financeName",financeName);
  887. if(StringUtils.isNotBlank(depId))
  888. params.put("depId", depId);
  889. if(approval != null)
  890. params.put("approval", approval);
  891. return (Pagination<OrderListBo>)findPage("selectSetUpServiceOrderByPage","selectSetUpServiceOrderCount",
  892. params, pageNo, pageSize);
  893. }
  894. private String getSalesmanIdByUid(String uid){
  895. User u = userMapper.selectByPrimaryKey(uid);
  896. if(u!=null&&StringUtils.isBlank(u.getAid())){
  897. return u.getAid();
  898. }else{
  899. return DEFAULT_ADMIN_ID;
  900. }
  901. }
  902. @Override
  903. public List<OrderChangeBo> selectOrderChange(String orderNo) {
  904. return tOrderChangeMapper.selectOrderChange(orderNo);
  905. }
  906. @Override
  907. public int updateRepairData() {
  908. List<TmpTable> tmpData = tmpTableMapper.selectAll();
  909. int taskDistribution = TaskDistributionState.NOT_DISTRIBUTION.getCode();
  910. for(TmpTable tt: tmpData){
  911. if(tt.getAllCount() == tt.getDisCount())
  912. taskDistribution = TaskDistributionState.ALL_DISTRIBUTION.getCode();
  913. else if(tt.getAllCount() > tt.getDisCount() && tt.getDisCount() != 0)
  914. taskDistribution = TaskDistributionState.PART_DISTRIBUTION.getCode();
  915. else if(tt.getAllCount() > tt.getDisCount() && tt.getDisCount() == 0)
  916. taskDistribution = TaskDistributionState.NOT_DISTRIBUTION.getCode();
  917. contractMapper.updateRepairData(tt.getOrderNo(),taskDistribution);
  918. }
  919. return 1;
  920. }
  921. private void MobileNotice(List<String> targetIds, TOrder tOrder) {
  922. }
  923. @Override
  924. public void addContractTaskLog() {
  925. List<ContractTask> list=contractTaskMapper.selectlistContractTask();
  926. Admin aa=adminMapper.selectAdminName(AFTConstants.DEFAULT_INITIATOR);
  927. Admin ab=adminMapper.selectAdminName(AFTConstants.CONSULTANT_MANAGER);
  928. for (ContractTask ct : list) {
  929. ContractTaskLog c=new ContractTaskLog();
  930. c.setId(UUID.randomUUID().toString());
  931. c.setContractTaskId(ct.getId());
  932. c.setTaskReceiver(ab.getId());
  933. c.setTaskAllocator(aa.getId());
  934. c.setCreateTime(new Date());
  935. contractTaskLogMapper.insert(c);
  936. if (StringUtils.isNotBlank(ct.getTaskReceiver())&&!ct.getTaskReceiver().equals(ab.getId())) {
  937. c=new ContractTaskLog();
  938. c.setId(UUID.randomUUID().toString());
  939. c.setContractTaskId(ct.getId());
  940. c.setTaskReceiver(ct.getTaskReceiver());
  941. c.setTaskAllocator(ab.getId());
  942. c.setCreateTime(new Date());
  943. contractTaskLogMapper.insert(c);
  944. }
  945. }
  946. }
  947. @Override
  948. public int addBusinessProjectId(FollowBusinessBo fbb) {
  949. //if(fbb.getUserBusinessList().size()<1) throw new BusinessException(new Error(ErrorConstants.AT_LEAST_A_BUSINESS,"",""));
  950. //更新跟进记录表
  951. SimpleDateFormat format = new SimpleDateFormat(AFTConstants.YYYYMMDDHHMMSS);
  952. fbb.setFollowTime(format.format(new Date()));
  953. UserFollow userFollow = new UserFollow();
  954. String followId = UUID.randomUUID().toString();
  955. userFollow.setId(followId);
  956. userFollow.setAid(TokenManager.getAdminId());
  957. userFollow.setContactType(Integer.parseInt(fbb.getContactType()));
  958. userFollow.setEffective(DeleteStatus.UNDELETE.getCode());
  959. userFollow.setCreateTime(new Date());
  960. userFollow.setOcbId(fbb.getOcbId());
  961. userFollow.setResult(fbb.getResult());
  962. userFollow.setUid(fbb.getUid());
  963. int followCount = userBusinessMapper.selectFollowCountByUAid(fbb.getUid(), TokenManager.getAdminId()) + 1;
  964. userFollow.setFollowCount(followCount);
  965. userFollowMapper.insert(userFollow);
  966. //检查客户锁定情况
  967. if(fbb.getUserBusinessList().size()>0){
  968. String ufbId = "";
  969. UserBusiness userBusiness = null;
  970. UserFollowBusiness userFollowBusiness = null;
  971. for(BusinessListBo ub: fbb.getUserBusinessList()){
  972. userBusiness = new UserBusiness();
  973. userFollowBusiness = new UserFollowBusiness();
  974. ufbId = UUID.randomUUID().toString();
  975. if (ub.getFollowSituation()==5) {//如果改成已签合同,则锁定业务
  976. if (StringUtils.isNotBlank(fbb.getUid())) ub.setUid(fbb.getUid());
  977. userLockReleaseMapper.updateProject(fbb.getUid(), TokenManager.getAdminId(), ub.getBusinessProjectId());
  978. lockProject(ub);//锁定客户业务
  979. }
  980. String ubId = UUID.randomUUID().toString();
  981. //更新业务表
  982. userBusiness.setId(ubId);
  983. userBusiness.setBusinessProjectId(ub.getBusinessProjectId());
  984. try {
  985. userBusiness.setCreateTime(format.parse(fbb.getFollowTime()));
  986. userBusiness.setUpdateTime(format.parse(fbb.getFollowTime()));
  987. } catch (ParseException e) {
  988. e.printStackTrace();
  989. }
  990. userBusiness.setCustomerStatus(ub.getCustomerStatus());
  991. userBusiness.setFollowSituation(ub.getFollowSituation());
  992. userBusiness.setUid(fbb.getUid());
  993. userBusiness.setAid(TokenManager.getAdminId());
  994. userBusiness.setRemarks(ub.getRemarks());
  995. userBusinessMapper.insert(userBusiness);
  996. //更新业务中间表
  997. userFollowBusiness.setBusinessId(ubId);
  998. userFollowBusiness.setCustomerStatus(ub.getCustomerStatus());
  999. userFollowBusiness.setFollowSituation(ub.getFollowSituation());
  1000. userFollowBusiness.setId(ufbId);
  1001. userFollowBusiness.setFollowId(followId);
  1002. userFollowBusiness.setRemarks(ub.getRemarks());
  1003. userFollowBusiness.setBusinessProjectId(ub.getBusinessProjectId());
  1004. userFollowBusinessMapper.insert(userFollowBusiness);
  1005. }
  1006. }
  1007. return 1;
  1008. }
  1009. @Override
  1010. @Transactional
  1011. public int pushOrderImg(String orderNo, String imageUrl,String sign) {
  1012. TOrderNew tOrderNew = tOrderNewMapper.selectByPrimaryKey(orderNo);
  1013. TOrderNew newOrder=new TOrderNew();
  1014. newOrder.setOrderNo(orderNo);
  1015. StringBuffer str=new StringBuffer();
  1016. if (sign.equals(OrderImgEnums.CONTRACT.getCode())){
  1017. if (StringUtils.isNotBlank(tOrderNew.getContractPictureUrl())){
  1018. str=str.append(tOrderNew.getContractPictureUrl()).append(",").append(imageUrl);
  1019. }else {
  1020. str=str.append(imageUrl);
  1021. }
  1022. newOrder.setContractPictureUrl(str.toString());
  1023. }else if (sign.equals(OrderImgEnums.SUPPLEMENT.getCode())){
  1024. if (StringUtils.isNotBlank(tOrderNew.getAgreementUrl())){
  1025. str=str.append(tOrderNew.getAgreementUrl()).append(",").append(imageUrl);
  1026. }else {
  1027. str=str.append(imageUrl);
  1028. }
  1029. newOrder.setAgreementUrl(str.toString());
  1030. }else if (sign.equals(OrderImgEnums.CONTENT.getCode())){
  1031. if (StringUtils.isNotBlank(tOrderNew.getServiceContent())){
  1032. str=str.append(tOrderNew.getServiceContent()).append(",").append(imageUrl);
  1033. }else {
  1034. str=str.append(imageUrl);
  1035. }
  1036. newOrder.setServiceContent(str.toString());
  1037. }else {
  1038. return 0;
  1039. }
  1040. return tOrderNewMapper.updateByPrimaryKeySelective(newOrder);
  1041. }
  1042. @Override
  1043. public int deleteOrderImg(String fileName,String orderNo, String sign) {
  1044. TOrderNew tOrderNew = tOrderNewMapper.selectByPrimaryKey(orderNo);
  1045. TOrderNew newOrder=new TOrderNew();
  1046. newOrder.setOrderNo(orderNo);
  1047. StringBuffer str=new StringBuffer();
  1048. List<String >list=new ArrayList<>();
  1049. if (sign.equals(OrderImgEnums.CONTRACT.getCode())){
  1050. if (tOrderNew.getContractPictureUrl()!=null){
  1051. String[] ss=tOrderNew.getContractPictureUrl().split(",");
  1052. list=Arrays.stream(ss).filter(e ->!e.equals(fileName)).collect(Collectors.toList());
  1053. }
  1054. if (list.size()<1){
  1055. newOrder.setContractPictureUrl("");
  1056. }else {
  1057. for (String s : list) {
  1058. str=str.append(s).append(",");
  1059. }
  1060. newOrder.setContractPictureUrl(str.substring(0,str.length()-1));
  1061. }
  1062. }else if (sign.equals(OrderImgEnums.SUPPLEMENT.getCode())){
  1063. if (tOrderNew.getAgreementUrl()!=null){
  1064. String[] ss=tOrderNew.getAgreementUrl().split(",");
  1065. list=Arrays.stream(ss).filter(e ->!e.equals(fileName)).collect(Collectors.toList());
  1066. }
  1067. if (list.size()<1){
  1068. newOrder.setAgreementUrl("");
  1069. }else {
  1070. for (String s : list) {
  1071. str=str.append(s).append(",");
  1072. }
  1073. newOrder.setAgreementUrl(str.substring(0,str.length()-1));
  1074. }
  1075. }else if (sign.equals(OrderImgEnums.CONTENT.getCode())){
  1076. if (tOrderNew.getServiceContent()!=null){
  1077. String[] ss=tOrderNew.getServiceContent().split(",");
  1078. list=Arrays.stream(ss).filter(e ->!e.equals(fileName)).collect(Collectors.toList());
  1079. }
  1080. if (list.size()<1){
  1081. newOrder.setServiceContent("");
  1082. }else {
  1083. for (String s : list) {
  1084. str=str.append(s).append(",");
  1085. }
  1086. newOrder.setServiceContent(str.substring(0,str.length()-1));
  1087. }
  1088. }else {
  1089. return 0;
  1090. }
  1091. return tOrderNewMapper.updateByPrimaryKeySelective(newOrder);
  1092. }
  1093. }