OrderServiceImpl.java 95 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046
  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.ArrayList;
  7. import java.util.Calendar;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.UUID;
  13. import java.util.regex.Matcher;
  14. import java.util.regex.Pattern;
  15. import javax.annotation.Resource;
  16. import org.apache.commons.beanutils.BeanUtils;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import com.goafanti.common.bo.Error;
  23. import com.goafanti.common.bo.Result;
  24. import com.goafanti.common.constant.AFTConstants;
  25. import com.goafanti.common.constant.ErrorConstants;
  26. import com.goafanti.common.dao.AdminMapper;
  27. import com.goafanti.common.dao.BusinessProjectMapper;
  28. import com.goafanti.common.dao.ContractMapper;
  29. import com.goafanti.common.dao.ContractTaskLogMapper;
  30. import com.goafanti.common.dao.ContractTaskMapper;
  31. import com.goafanti.common.dao.NoticeMapper;
  32. import com.goafanti.common.dao.OrganizationManagementMapper;
  33. import com.goafanti.common.dao.TOrderBillMapper;
  34. import com.goafanti.common.dao.TOrderChangeMapper;
  35. import com.goafanti.common.dao.TOrderDetailMapper;
  36. import com.goafanti.common.dao.TOrderMapper;
  37. import com.goafanti.common.dao.TmpTableMapper;
  38. import com.goafanti.common.dao.UserLockReleaseMapper;
  39. import com.goafanti.common.dao.UserMapper;
  40. import com.goafanti.common.enums.DeleteStatus;
  41. import com.goafanti.common.enums.NoticeReadStatus;
  42. import com.goafanti.common.enums.NoticeStatus;
  43. import com.goafanti.common.enums.OrderFlowState;
  44. import com.goafanti.common.enums.UserLockReleaseStatus;
  45. import com.goafanti.common.error.BusinessException;
  46. import com.goafanti.common.model.Admin;
  47. import com.goafanti.common.model.Contract;
  48. import com.goafanti.common.model.ContractTask;
  49. import com.goafanti.common.model.ContractTaskLog;
  50. import com.goafanti.common.model.Notice;
  51. import com.goafanti.common.model.OrganizationManagement;
  52. import com.goafanti.common.model.TOrder;
  53. import com.goafanti.common.model.TOrderBill;
  54. import com.goafanti.common.model.TOrderChange;
  55. import com.goafanti.common.model.TOrderDetail;
  56. import com.goafanti.common.model.TmpTable;
  57. import com.goafanti.common.model.User;
  58. import com.goafanti.common.model.UserLockRelease;
  59. import com.goafanti.common.utils.BeanUtilsExt;
  60. import com.goafanti.common.utils.DateUtils;
  61. import com.goafanti.common.utils.MobileMessageUtils;
  62. import com.goafanti.common.utils.VerifyCodeUtils;
  63. import com.goafanti.core.mybatis.BaseMybatisDao;
  64. import com.goafanti.core.mybatis.JDBCIdGenerator;
  65. import com.goafanti.core.mybatis.page.Pagination;
  66. import com.goafanti.core.shiro.token.TokenManager;
  67. import com.goafanti.customer.bo.LockingReleaseBo;
  68. import com.goafanti.order.bo.BillDetailBo;
  69. import com.goafanti.order.bo.BillListBo;
  70. import com.goafanti.order.bo.CommodityDetailBo;
  71. import com.goafanti.order.bo.OperatorActive;
  72. import com.goafanti.order.bo.OrderChangeBo;
  73. import com.goafanti.order.bo.OrderListBo;
  74. import com.goafanti.order.bo.ServiceOrderDetailBo;
  75. import com.goafanti.order.bo.C2BOrderDetailBo;
  76. import com.goafanti.order.bo.C2COrderDetailBo;
  77. import com.goafanti.order.enums.ActiveState;
  78. import com.goafanti.order.enums.ApprovalState;
  79. import com.goafanti.order.enums.AuditState;
  80. import com.goafanti.order.enums.ChangeState;
  81. import com.goafanti.order.enums.CommodityType;
  82. import com.goafanti.order.enums.LiquidationState;
  83. import com.goafanti.order.enums.OrderAction;
  84. import com.goafanti.order.enums.OrderChannel;
  85. import com.goafanti.order.enums.OrderStage;
  86. import com.goafanti.order.enums.OrderState;
  87. import com.goafanti.order.enums.PayChannel;
  88. import com.goafanti.order.enums.ProjectStage;
  89. import com.goafanti.order.enums.PublicStatus;
  90. import com.goafanti.order.enums.TaskDistributionState;
  91. import com.goafanti.order.enums.TransactionMode;
  92. import com.goafanti.order.enums.TransactionSubject;
  93. import com.goafanti.order.service.OrderService;
  94. import com.goafanti.techproject.enums.TaskState;
  95. @Service
  96. public class OrderServiceImpl extends BaseMybatisDao<TOrderMapper> implements OrderService {
  97. @Autowired
  98. private UserMapper userMapper;
  99. @Autowired
  100. private TOrderMapper tOrderMapper;
  101. @Autowired
  102. private TOrderDetailMapper tOrderDetailMapper;
  103. @Autowired
  104. private JDBCIdGenerator idGenerator;
  105. @Autowired
  106. private TOrderBillMapper tOrderBillMapper;
  107. @Autowired
  108. private OrganizationManagementMapper organizationManagementMapper;
  109. @Autowired
  110. private ContractMapper contractMapper;
  111. @Autowired
  112. private ContractTaskMapper contractTaskMapper;
  113. @Autowired
  114. private TOrderChangeMapper tOrderChangeMapper;
  115. @Autowired
  116. private TmpTableMapper tmpTableMapper;
  117. @Autowired
  118. private AdminMapper adminMapper;
  119. @Autowired
  120. private NoticeMapper noticeMapper;
  121. @Autowired
  122. private ContractTaskLogMapper contractTaskLogMapper;
  123. @Resource
  124. private BusinessProjectMapper businessProjectMapper;
  125. @Resource
  126. private UserLockReleaseMapper userLockReleaseMapper;
  127. @Value(value = "${mobileRemindCodeTemplate}")
  128. private String mobileRemindCodeTemplate = null;
  129. @Value(value = "${accessKey}")
  130. private String accessKey = null;
  131. @Value(value = "${accessSecret}")
  132. private String accessSecret = null;
  133. private final BigDecimal DEFAULT_FIRST_PAYMENT = new BigDecimal(0);//默认首付价格
  134. private final BigDecimal DEFAULT_COMMODITY_PRICE = new BigDecimal(0);//默认单价
  135. private final String DEFAULT_PLATFORM_ID = "0"; //平台默认id
  136. private final String DEFAULT_ADMIN_ID = "1"; //默认管理员
  137. private final double DEFAULT_BROKERAGE_PROPORTION = 0; //佣金比例
  138. private final double DEFAULT_COMMODITY_DISCOUNT = 1; //折扣比例
  139. private final String DEFAULT_COMMODITY_MODE = "NO_MODE"; //暂无规格
  140. private final String DEFUALT_SET_UP_COMMENT = "系统自动生产立项信息,请自行修改或补充";
  141. /*
  142. * -------------------------------------------------- APP管理端 --------------------------------------------------------
  143. */
  144. @Override
  145. public C2COrderDetailBo selectCommodityDetail(String commodityId, Integer commodityType) {
  146. C2COrderDetailBo bo = new C2COrderDetailBo();
  147. CommodityDetailBo cdb = tOrderMapper.selectCommodityDetail(commodityId,commodityType);
  148. try {
  149. BeanUtils.copyProperties(bo, cdb);
  150. bo.setOrderNo(String.valueOf(idGenerator.generateId()));
  151. bo.setCreateTime(DateUtils.formatDate(new Date(),AFTConstants.YYYYMMDDHHMMSS));
  152. bo.setCommodityType(commodityType);
  153. if(bo.getCommodityPrice().equals("0"))
  154. bo.setCommodityPrice("面议");
  155. else
  156. bo.setCommodityPrice(bo.getCommodityPrice()+" 万");
  157. if(StringUtils.isBlank(bo.getFirstPayment()))
  158. bo.setFirstPayment("面议");
  159. else
  160. bo.setFirstPayment(bo.getFirstPayment()+" 万");
  161. } catch (IllegalAccessException | InvocationTargetException e) {
  162. e.printStackTrace();
  163. }
  164. return bo;
  165. }
  166. /**
  167. * 只能购买一份
  168. * 后期规则:自营服务订单 、需求订单、其他订单不能同时加入购物车
  169. */
  170. @Override
  171. public int addIntention(String orderNo, String commodityId, String commodityMode, Integer commodityQuantity,Integer commodityType,
  172. String createTime,String remarks) throws ParseException {
  173. CommodityDetailBo bo = tOrderMapper.selectCommodityDetail(commodityId,commodityType);
  174. BigDecimal commodityPrice = StringUtils.isBlank(bo.getCommodityPrice()) ? DEFAULT_COMMODITY_PRICE
  175. : new BigDecimal(Double.valueOf(bo.getCommodityPrice()));
  176. BigDecimal commodityFirstPayment = StringUtils.isBlank(bo.getCommodityFirstPayment()) ? DEFAULT_FIRST_PAYMENT
  177. : new BigDecimal(Double.valueOf(bo.getCommodityFirstPayment()));
  178. BigDecimal discountPrice = commodityPrice.multiply(new BigDecimal(DEFAULT_COMMODITY_DISCOUNT));
  179. BigDecimal discountFirstPayment = commodityFirstPayment.multiply(new BigDecimal(DEFAULT_COMMODITY_DISCOUNT));
  180. TOrder tOrder = new TOrder();
  181. tOrder.setOrderNo(orderNo);
  182. tOrder.setCreater(DEFAULT_ADMIN_ID);
  183. tOrder.setCreateTime(DateUtils.parseDate(createTime, AFTConstants.YYYYMMDDHHMMSS));
  184. if(commodityType == CommodityType.DEMAND.getTypeCode()){
  185. tOrder.setBuyerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId());
  186. tOrder.setSellerId(TokenManager.getUserId());
  187. }else{
  188. tOrder.setBuyerId(TokenManager.getUserId());
  189. tOrder.setSellerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId());
  190. }
  191. tOrder.setOrderType(commodityType);
  192. tOrder.setBrokerageAmount(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION)));
  193. tOrder.setOrderAmount(commodityPrice);
  194. tOrder.setFirstPayment(commodityFirstPayment);
  195. tOrder.setSignTotalAmount(discountPrice);
  196. tOrder.setSignFirstPayment(discountFirstPayment);
  197. tOrder.setSignBrokerageAmount(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION)));
  198. tOrder.setSignWithdrawAmount(discountPrice.subtract(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION))));
  199. tOrder.setDeleteSign(DeleteStatus.UNDELETE.getCode());
  200. tOrder.setOrderChannel(OrderChannel.APP.getCode());
  201. tOrder.setApproval(ApprovalState.NORMAL.getCode());
  202. tOrder.setChangeStatus(ChangeState.UNCHANGE.getCode());
  203. tOrder.setSalesmanId(getSalesmanIdByUid(TokenManager.getAdminId()));
  204. tOrder.setOrderRemarks(remarks);
  205. tOrder.setContractType(bo.getCommodityClassify());
  206. setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false);
  207. TOrderDetail tOrderDetail = new TOrderDetail();
  208. tOrderDetail.setId(UUID.randomUUID().toString());
  209. tOrderDetail.setOrderNo(orderNo);
  210. tOrderDetail.setCommodityId(commodityId);
  211. tOrderDetail.setCommodityName(bo.getCommodityName());
  212. tOrderDetail.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE: commodityMode);
  213. tOrderDetail.setCommodityType(commodityType);
  214. tOrderDetail.setCommodityQuantity(commodityQuantity);
  215. tOrderDetail.setCommodityPrice(commodityPrice);
  216. tOrderDetail.setCommodityFirstPayment(commodityFirstPayment);
  217. tOrderDetail.setDiscountPrice(discountPrice);
  218. tOrderDetail.setDiscountFirstPayment(discountFirstPayment);
  219. tOrderDetail.setCreateTime(DateUtils.parseDate(createTime, AFTConstants.YYYYMMDDHHMMSS));
  220. tOrderDetailMapper.insert(tOrderDetail);
  221. tOrderMapper.insert(tOrder);
  222. return 1;
  223. }
  224. /**
  225. * 订单状态流转
  226. * @param orderAction
  227. * @param changeAmount
  228. * @param tOrder
  229. * @param confrim
  230. */
  231. public void setOrderState(OrderAction orderAction,BigDecimal changeAmount,TOrder tOrder,boolean confrim){
  232. BigDecimal initial = new BigDecimal(0);
  233. checkOrder(tOrder);
  234. if(orderAction == OrderAction.ADD_INTENTION){ //添加意向订单
  235. tOrder.setOrderStatus(OrderState.WAIT_FOR_CONFIRM.getCode());
  236. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  237. tOrder.setOrderStage(OrderStage.INTENTION.getCode());
  238. tOrder.setProjectStage(ProjectStage.NOT_SATISFY_CONDITION.getCode());
  239. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  240. tOrder.setActuallyFirstPayment(initial);
  241. tOrder.setActuallyBrokerageAmount(initial);
  242. tOrder.setActuallyTotalAmount(initial);
  243. tOrder.setActuallyWithdrawAmount(initial);
  244. }else if(orderAction == OrderAction.CONFIRM_INTENTION){ //确认意向订单 (用户确认)
  245. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()){
  246. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认意向订单"));
  247. }
  248. if (confrim) {
  249. tOrder.setOrderStatus(OrderState.WAIT_FOR_SIGN.getCode()); // 卖家同意
  250. tOrder.setOrderStage(OrderStage.FOLLOWING.getCode());
  251. } else {
  252. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()); // 买家拒绝
  253. }
  254. }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_FIRST){ // 支付首付(审核流水)
  255. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  256. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,""));
  257. }
  258. int boundary = tOrder.getActuallyFirstPayment().add(changeAmount).compareTo(tOrder.getSignFirstPayment());
  259. int boundary2 = tOrder.getActuallyTotalAmount().add(changeAmount).compareTo(tOrder.getSignTotalAmount());
  260. if(boundary2 == 1){
  261. throw new BusinessException(new Error(ErrorConstants.PAY_BEYOND_SIGN,"支付首付款"));
  262. }else if(boundary2 == 0){ //全付清
  263. tOrder.setActuallyTotalAmount(tOrder.getSignTotalAmount());
  264. tOrder.setActuallyFirstPayment(tOrder.getSignFirstPayment());
  265. tOrder.setLiquidationStatus(LiquidationState.ALREADY_PAY.getCode());
  266. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  267. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  268. }else if(boundary == 1){ //超过首付未达尾款
  269. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  270. tOrder.setActuallyFirstPayment(tOrder.getSignFirstPayment());
  271. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  272. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  273. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  274. }else if(boundary == -1){ //首付待付清
  275. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  276. tOrder.setActuallyFirstPayment(tOrder.getActuallyFirstPayment().add(changeAmount));
  277. }else if(boundary == 0){ //首付已结清
  278. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  279. tOrder.setActuallyFirstPayment(tOrder.getSignFirstPayment());
  280. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  281. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  282. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  283. }
  284. }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_LAST){ //支付尾款 (审核流水)
  285. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()){
  286. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付尾款"));
  287. }
  288. int boundary = tOrder.getActuallyTotalAmount().add(changeAmount).compareTo(tOrder.getSignTotalAmount());
  289. if(boundary == 1){
  290. throw new BusinessException(new Error(ErrorConstants.PAY_BEYOND_SIGN,"支付尾款"));
  291. }else if(boundary == -1){
  292. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  293. }else if(boundary == 0){
  294. tOrder.setActuallyTotalAmount(tOrder.getSignTotalAmount());
  295. tOrder.setLiquidationStatus(LiquidationState.ALREADY_PAY.getCode());
  296. }
  297. }else if(orderAction == OrderAction.APPLY_FOR_WITHDRAW){ //提现申请
  298. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  299. || tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()
  300. || tOrder.getActuallyTotalAmount().doubleValue() <= 0){
  301. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"等待提现"));
  302. }
  303. tOrder.setLiquidationStatus(LiquidationState.WAIT_FOR_WITHDRAW.getCode());
  304. }else if(orderAction == OrderAction.CONFIRM_WITHDRAW){ //提现确认 (审核员先审核流水)
  305. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  306. || tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_WITHDRAW.getCode()
  307. || tOrder.getActuallyTotalAmount().doubleValue() <= 0){
  308. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认提现"));
  309. }
  310. tOrder.setLiquidationStatus(LiquidationState.ALREADY_WITHDRAW.getCode());
  311. tOrder.setActuallyWithdrawAmount(tOrder.getActuallyWithdrawAmount().add(changeAmount));
  312. }else if(orderAction == OrderAction.APPLY_FOR_CANCEL){ //取消订单
  313. boolean flag = true;
  314. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()
  315. && tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  316. flag = false;
  317. }
  318. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  319. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  320. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  321. flag = false;
  322. }
  323. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单"));
  324. if(TokenManager.getToken() instanceof Admin){
  325. if(!tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID))
  326. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单"));
  327. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  328. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  329. if( tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode())
  330. tOrder.setOrderStatus(OrderState.SELLER_CANCEL_AFTER_SIGN.getCode());
  331. }else if(TokenManager.getToken() instanceof User){
  332. if(TokenManager.getUserId().equals(tOrder.getSellerId())){
  333. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  334. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  335. if( tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  336. tOrder.setOrderStatus(OrderState.SELLER_CANCEL_AFTER_SIGN.getCode());
  337. }else if(TokenManager.getUserId().equals(tOrder.getBuyerId())){
  338. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode())
  339. tOrder.setOrderStatus(OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode());
  340. if( tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  341. tOrder.setOrderStatus(OrderState.BUYER_CANCEL_AFTER_SIGN.getCode());
  342. }
  343. }
  344. }else if(orderAction == OrderAction.APPLY_FOR_REFUND){ //退款申请
  345. boolean flag = true;
  346. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  347. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  348. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  349. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  350. flag = false;
  351. }
  352. if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()) flag = true; // Add 2018/4/9 if normal order in changing can refund
  353. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode()
  354. || tOrder.getLiquidationStatus() == LiquidationState.REFUSE_REFUND.getCode()
  355. || tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  356. || tOrder.getLiquidationStatus() == LiquidationState.COMPLETE_REFUND.getCode()){
  357. flag = false;
  358. }
  359. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  360. flag = false;
  361. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"申请退款"));
  362. tOrder.setLiquidationStatus(LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode());
  363. }else if(orderAction == OrderAction.CONFIRM_REFUND){ //退款确认
  364. boolean flag = true;
  365. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  366. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  367. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  368. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  369. flag = false;
  370. }
  371. if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()) flag = true; // Add 2018/4/9 if normal order in changing can refund
  372. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  373. flag = false;
  374. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  375. flag = false;
  376. if(confrim) {
  377. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"同意退款"));
  378. tOrder.setLiquidationStatus(LiquidationState.AGREE_REFUND.getCode());
  379. }else{
  380. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"拒绝退款"));
  381. tOrder.setLiquidationStatus(LiquidationState.REFUSE_REFUND.getCode());
  382. }
  383. }else if(orderAction == OrderAction.COMPLETE_REFUND){ //完成退款
  384. boolean flag = true;
  385. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  386. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  387. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  388. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  389. flag = false;
  390. }
  391. if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()) flag = true; // Add 2018/4/9 if normal order in changing can refund
  392. if(tOrder.getLiquidationStatus() != LiquidationState.AGREE_REFUND.getCode())
  393. flag = false;
  394. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  395. flag = false;
  396. if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"申请退款"));
  397. tOrder.setActuallyTotalAmount(tOrder.getActuallyTotalAmount().add(changeAmount));
  398. int boundary = tOrder.getActuallyTotalAmount().compareTo(tOrder.getSignTotalAmount());
  399. if(boundary == 0) {
  400. tOrder.setLiquidationStatus(LiquidationState.COMPLETE_REFUND.getCode()); //完成退款
  401. }else if(boundary == 1){
  402. tOrder.setLiquidationStatus(LiquidationState.AGREE_REFUND.getCode()); //需要再退款
  403. }else if(boundary == -1){
  404. throw new BusinessException(new Error(ErrorConstants.REFUND_BEYOND_SIGN,"退款")); //超过退款金额
  405. }
  406. }
  407. }
  408. /**
  409. * 设置按钮状态
  410. * @param tOrder
  411. * @return
  412. */
  413. private OperatorActive setOperatorActive(TOrder tOrder){
  414. OperatorActive active = new OperatorActive();
  415. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  416. return active;
  417. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode()) {
  418. active.setApplyUnLock(true);
  419. return active;
  420. }
  421. if (TokenManager.getToken() instanceof User) {
  422. active.setConfirmPayForFirst(false);
  423. active.setConfirmPayForLast(false);
  424. active.setConfirmWithdraw(false);
  425. active.setCompleteRefund(false);
  426. active.setApplyLock(false);
  427. active.setApplyUnLock(false);
  428. active.setApplyRevoke(false);
  429. active.setApplySign(false);
  430. if (TokenManager.getUserId().equals(tOrder.getBuyerId())) { // 买方
  431. active.setApplyForWithdraw(false);
  432. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  433. /** 需求订单 开始 **/
  434. if (tOrder.getOrderType() == CommodityType.DEMAND.getTypeCode()) {
  435. active.setConfirmIntention(true);
  436. active.setRefuseIntention(true);
  437. } else {
  438. active.setConfirmIntention(false);
  439. active.setRefuseIntention(false);
  440. }
  441. /** 需求订单 结束 **/
  442. } else {
  443. active.setConfirmIntention(false);
  444. active.setRefuseIntention(false);
  445. }
  446. if ((tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode() || tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  447. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()) {
  448. active.setPayForFirst(true); //支付首付
  449. } else {
  450. active.setPayForFirst(false); //支付首付
  451. }
  452. if ((tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode() || tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode())
  453. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()) {
  454. active.setPayForLast(true); //支付尾款
  455. } else {
  456. active.setPayForLast(false); //支付尾款
  457. }
  458. boolean flag = true;
  459. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_CONFIRM.getCode()
  460. && tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  461. flag = false;
  462. }
  463. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  464. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  465. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  466. flag = false;
  467. }
  468. active.setApplyForCancel(flag); //申请取消
  469. flag = true;
  470. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  471. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  472. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  473. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  474. flag = false;
  475. }
  476. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode()
  477. || tOrder.getLiquidationStatus() == LiquidationState.REFUSE_REFUND.getCode()
  478. || tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  479. || tOrder.getLiquidationStatus() == LiquidationState.COMPLETE_REFUND.getCode()){
  480. flag = false;
  481. }
  482. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  483. flag = false;
  484. active.setApplyForRefund(flag); //申请退款
  485. }else if(TokenManager.getUserId().equals(tOrder.getSellerId())){ //卖方
  486. active.setPayForFirst(false);
  487. active.setPayForLast(false);
  488. active.setApplyForRefund(false);
  489. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  490. /** 需求订单 开始 **/
  491. if (tOrder.getOrderType() == CommodityType.DEMAND.getTypeCode()) {
  492. active.setConfirmIntention(false);
  493. active.setRefuseIntention(false);
  494. } else {
  495. active.setConfirmIntention(true);
  496. active.setRefuseIntention(true);
  497. }
  498. /** 需求订单 结束 **/
  499. } else {
  500. active.setConfirmIntention(false);
  501. active.setRefuseIntention(false);
  502. }
  503. boolean flag = true;
  504. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  505. flag = false;
  506. }
  507. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  508. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  509. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  510. flag = false;
  511. }
  512. active.setApplyForCancel(flag); //申请取消
  513. flag = true;
  514. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  515. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  516. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  517. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  518. flag = false;
  519. }
  520. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  521. flag = false;
  522. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  523. flag = false;
  524. active.setAgreeRefund(flag); //同意退款
  525. active.setRefuseRefund(flag); //拒绝退款
  526. if (tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  527. && tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode()
  528. && tOrder.getActuallyTotalAmount().doubleValue() > 0) {
  529. active.setApplyForWithdraw(true); //申请提现
  530. } else {
  531. active.setApplyForWithdraw(false); //申请提现
  532. }
  533. }else{
  534. active.setPayForFirst(false);
  535. active.setPayForLast(false);
  536. active.setConfirmIntention(false);
  537. active.setRefuseIntention(false);
  538. active.setApplyForCancel(false);
  539. active.setApplyForRefund(false);
  540. active.setAgreeRefund(false);
  541. active.setRefuseRefund(false);
  542. active.setApplyForWithdraw(false);
  543. }
  544. }
  545. if (TokenManager.getToken() instanceof Admin) {
  546. active.setPayForFirst(false);
  547. active.setPayForLast(false);
  548. active.setApplyForWithdraw(false);
  549. active.setApplyForRefund(false);
  550. if (tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID)) { // 平台作为卖方
  551. if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_CONFIRM.getCode()) {
  552. active.setConfirmIntention(true);
  553. active.setRefuseIntention(true);
  554. } else {
  555. active.setConfirmIntention(false);
  556. active.setRefuseIntention(false);
  557. }
  558. boolean flag = true;
  559. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  560. flag = false;
  561. }
  562. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  563. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  564. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  565. flag = false;
  566. }
  567. active.setApplyForCancel(flag); //申请取消
  568. flag = true;
  569. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  570. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  571. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  572. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  573. flag = false;
  574. }
  575. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_FOR_REFUND_CONFIRM.getCode())
  576. flag = false;
  577. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  578. flag = false;
  579. active.setAgreeRefund(flag); //同意退款
  580. active.setRefuseRefund(flag); //拒绝退款
  581. } else {
  582. active.setConfirmIntention(false); //确认意向
  583. active.setRefuseIntention(false); //拒绝意向
  584. active.setApplyForCancel(false); //申请取消
  585. active.setAgreeRefund(false); //同意退款
  586. active.setRefuseRefund(false); //拒绝退款
  587. }
  588. }
  589. //平台方作为中间方 确认首付 - 尾款 - 提现 - 退款
  590. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  591. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  592. active.setConfirmPayForFirst(true);
  593. }else{
  594. active.setConfirmPayForFirst(false);
  595. }
  596. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()
  597. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()){
  598. active.setConfirmPayForLast(true);
  599. }else{
  600. active.setConfirmPayForLast(false);
  601. }
  602. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()
  603. && tOrder.getLiquidationStatus() == LiquidationState.WAIT_FOR_WITHDRAW.getCode()){
  604. active.setConfirmWithdraw(true);
  605. }else{
  606. active.setConfirmWithdraw(false);
  607. }
  608. boolean flag = true;
  609. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  610. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  611. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  612. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  613. flag = false;
  614. }
  615. if(flag && tOrder.getActuallyTotalAmount().doubleValue() == 0
  616. && tOrder.getDeleteSign() == DeleteStatus.UNDELETE.getCode()){
  617. active.setApplyRevoke(true); //作废
  618. }else{
  619. active.setApplyRevoke(false); //作废
  620. }
  621. if(tOrder.getLiquidationStatus() != LiquidationState.AGREE_REFUND.getCode())
  622. flag = false;
  623. if(tOrder.getActuallyTotalAmount().doubleValue() <= 0)
  624. flag = false;
  625. active.setCompleteRefund(flag); //完成退款
  626. flag = true;
  627. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode())
  628. flag = false;
  629. active.setApplySign(flag); //签单
  630. if(tOrder.getDeleteSign() == DeleteStatus.UNDELETE.getCode()){
  631. active.setApplyLock(true);
  632. }else{
  633. active.setApplyLock(false);
  634. }
  635. if(tOrder.getDeleteSign() == DeleteStatus.LOCKING.getCode()){
  636. active.setApplyUnLock(true);
  637. }else{
  638. active.setApplyUnLock(false);
  639. }
  640. return active;
  641. }
  642. /**
  643. * 添加流水记录
  644. * @param orderNo 订单编号
  645. * @param creater 创建人
  646. * @param payeeId 收款人
  647. * @param payerId 付款人
  648. * @param remarks 附言
  649. * @param transactionSubject 交易科目
  650. * @param payChannel 支付渠道
  651. * @param transactionMode 支付方式
  652. * @param FundAudit 流水审核
  653. * @return
  654. */
  655. public int addFundRecord(String orderNo,String creater,String payeeId,String payerId,String remarks,TransactionSubject transactionSubject,PayChannel payChannel,
  656. BigDecimal transactionAmount,TransactionMode transactionMode,AuditState auditState){
  657. TOrderBill bill = new TOrderBill();
  658. bill.setBillNo(UUID.randomUUID().toString().replace("-", ""));
  659. bill.setConfirmSign(auditState.getCode());
  660. bill.setCreater(creater);
  661. bill.setDeleteSign(Boolean.FALSE);
  662. bill.setOrderNo(orderNo);
  663. bill.setTransactionAmount(transactionAmount);
  664. bill.setPayeeId(payeeId);
  665. bill.setPayerId(payerId);
  666. bill.setRemarks(remarks);
  667. bill.setTransactionAmount(transactionAmount);
  668. bill.setTransactionMode(transactionMode.getCode());
  669. bill.setTransactionSubject(transactionSubject.getCode());
  670. bill.setTransactionChannel(payChannel.getCode());
  671. bill.setCreateTime(new Date());
  672. return tOrderBillMapper.insert(bill);
  673. }
  674. @Override
  675. public int updatePayForFirst(String orderNo, BigDecimal fundAmount,String remarks) {
  676. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  677. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks,
  678. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  679. tOrder.setUpdateTime(new Date());
  680. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  681. }
  682. @Override
  683. public int updatePayForLast(String orderNo, BigDecimal fundAmount, String remarks) {
  684. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  685. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks,
  686. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  687. tOrder.setUpdateTime(new Date());
  688. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  689. }
  690. @SuppressWarnings("unchecked")
  691. @Override
  692. public Pagination<C2BOrderDetailBo> selectOrderList(boolean confirm,Integer pageNo,Integer pageSize) {
  693. Map<String, Object> params = new HashMap<String, Object>();
  694. Pagination<C2BOrderDetailBo> result = new Pagination<C2BOrderDetailBo>();
  695. if(!confirm) params.put("orderStatus", OrderState.WAIT_FOR_CONFIRM.getCode()); //购买意向
  696. params.put("uid", TokenManager.getUserId());
  697. Pagination<TOrder> data = (Pagination<TOrder>)findPage("selectOrderListByPage", "selectOrderListCount", params, pageNo, pageSize);
  698. List<TOrder> list = (List<TOrder>)data.getList();
  699. C2BOrderDetailBo bo = null;
  700. List<C2BOrderDetailBo> boList = new ArrayList<C2BOrderDetailBo>();
  701. List<CommodityDetailBo> commoditys = null;
  702. CommodityDetailBo cdb = null;
  703. if(list.size()>0){
  704. for(TOrder t:list){
  705. bo = new C2BOrderDetailBo();
  706. commoditys = new ArrayList<CommodityDetailBo>();
  707. bo.setOrderNo(String.valueOf(t.getOrderNo()));
  708. bo.setOrderRemarks(t.getOrderRemarks());
  709. bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc());
  710. bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS));
  711. bo.setOrderAmount(String.valueOf(t.getOrderAmount()).equals("0")?"面议":String.valueOf(t.getOrderAmount())+" 万");
  712. bo.setFirstPayment(String.valueOf(t.getFirstPayment()).equals("0")?"面议":String.valueOf(t.getFirstPayment())+" 万");
  713. bo.setOperatorActive(setOperatorActive(t));
  714. List<TOrderDetail> tdList = tOrderMapper.selectOrderCommodity(String.valueOf(t.getOrderNo()));
  715. for(TOrderDetail tod : tdList ){
  716. cdb = new CommodityDetailBo();
  717. cdb.setCommodityPrice(String.valueOf(tod.getCommodityPrice()).equals("0")?"面议":String.valueOf(tod.getCommodityPrice())+" 万");
  718. cdb.setDiscountPrice(String.valueOf(tod.getDiscountPrice()).equals("0")?"面议":String.valueOf(tod.getDiscountPrice())+" 万");
  719. cdb.setCommodityId(tod.getCommodityId());
  720. cdb.setCommodityName(tod.getCommodityName());
  721. cdb.setCommodityMode(tod.getCommodityMode());
  722. cdb.setCommodityType(tod.getCommodityType());
  723. cdb.setCommodityQuantity(tod.getCommodityQuantity());
  724. commoditys.add(cdb);
  725. }
  726. bo.setCommoditys(commoditys);
  727. boList.add(bo);
  728. }
  729. }
  730. result.setList(boList);
  731. result.setPageNo(data.getPageNo());
  732. result.setPageSize(data.getPageSize());
  733. result.setTotalCount(data.getTotalCount());
  734. result.setFilterNo(data.getFilterNo());
  735. return result;
  736. }
  737. @Override
  738. public C2BOrderDetailBo selectOrderDetail(String orderNo) {
  739. TOrder t = tOrderMapper.selectByPrimaryKey(orderNo);
  740. C2BOrderDetailBo bo = new C2BOrderDetailBo();
  741. bo.setOrderNo(String.valueOf(t.getOrderNo()));
  742. bo.setOrderRemarks(t.getOrderRemarks());
  743. bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc());
  744. bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS));
  745. bo.setOrderAmount(String.valueOf(t.getOrderAmount()).equals("0")?"面议":String.valueOf(t.getOrderAmount())+" 万");
  746. bo.setFirstPayment(String.valueOf(t.getFirstPayment()).equals("0")?"面议":String.valueOf(t.getFirstPayment())+" 万");
  747. bo.setOperatorActive(setOperatorActive(t));
  748. List<CommodityDetailBo> commoditys = new ArrayList<CommodityDetailBo>();
  749. CommodityDetailBo cdb = null;
  750. List<TOrderDetail> tdList = tOrderMapper.selectOrderCommodity(String.valueOf(t.getOrderNo()));
  751. for(TOrderDetail tod : tdList ){
  752. cdb = new CommodityDetailBo();
  753. cdb.setCommodityPrice(String.valueOf(tod.getCommodityPrice()).equals("0")?"面议":String.valueOf(tod.getCommodityPrice())+" 万");
  754. cdb.setDiscountPrice(String.valueOf(tod.getDiscountPrice()).equals("0")?"面议":String.valueOf(tod.getDiscountPrice())+" 万");
  755. cdb.setCommodityId(tod.getCommodityId());
  756. cdb.setCommodityName(tod.getCommodityName());
  757. cdb.setCommodityMode(tod.getCommodityMode());
  758. cdb.setCommodityType(tod.getCommodityType());
  759. cdb.setCommodityQuantity(tod.getCommodityQuantity());
  760. commoditys.add(cdb);
  761. }
  762. bo.setCommoditys(commoditys);
  763. return bo;
  764. }
  765. @SuppressWarnings("unchecked")
  766. @Override
  767. public Pagination<BillListBo> selectOrderBillList(String orderNo,Integer pageNo,Integer pageSize) {
  768. Map<String, Object> params = new HashMap<String, Object>();
  769. if(orderNo != null) params.put("orderNo", orderNo);
  770. params.put("uid", TokenManager.getUserId());
  771. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectOrderBillByPage","selectOrderBillCount", params, pageNo, pageSize);
  772. List<BillListBo> list = (List<BillListBo>)data.getList();
  773. if(list.size()>0){
  774. for(BillListBo bo:list){
  775. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  776. }
  777. }
  778. data.setList(list);
  779. return data;
  780. }
  781. @Override
  782. @Transactional
  783. public int updateApplyForWithdraw(String orderNo,String remarks) {
  784. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  785. BigDecimal transactionAmount = tOrder.getActuallyTotalAmount().subtract(tOrder.getActuallyBrokerageAmount());
  786. addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), TokenManager.getUserId(), DEFAULT_PLATFORM_ID, remarks,
  787. TransactionSubject.SUPPLY_COLLECT, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  788. setOrderState(OrderAction.APPLY_FOR_WITHDRAW, new BigDecimal(0), tOrder, false);
  789. tOrder.setUpdateTime(new Date());
  790. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  791. return 1;
  792. }
  793. @Override
  794. @Transactional
  795. public int updateApplyForCancel(String orderNo) {
  796. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  797. setOrderState(OrderAction.APPLY_FOR_CANCEL, new BigDecimal(0), tOrder, false);
  798. tOrder.setUpdateTime(new Date());
  799. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  800. return 1;
  801. }
  802. /**
  803. *
  804. * @param transactionSubject 交易科目
  805. * @param transactionAmount 交易金额
  806. * @param payeeId 收款人
  807. * @param payerId 付款人
  808. * @return
  809. */
  810. private String setBusinessDesc(Integer transactionSubject,BigDecimal transactionAmount){
  811. String result = "";
  812. if(transactionSubject == TransactionSubject.SUPPLY_COLLECT.getCode() || transactionSubject == TransactionSubject.REFUND.getCode()){
  813. result = "收入-"+transactionAmount;
  814. }else if(transactionSubject == TransactionSubject.SUPPLY_PAY.getCode()){
  815. result = "支出-"+transactionAmount;
  816. }
  817. return result;
  818. }
  819. @Override
  820. public int updateConfirmIntention(String orderNo, boolean confirm) {
  821. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  822. setOrderState(OrderAction.CONFIRM_INTENTION, new BigDecimal(0), tOrder, confirm);
  823. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  824. return 1;
  825. }
  826. /*
  827. * -------------------------------------------------- 后台管理端 --------------------------------------------------------
  828. */
  829. @SuppressWarnings("unchecked")
  830. @Override
  831. public Pagination<OrderListBo> selectServiceOrder(OrderListBo bo,String startDate,String endDate,Integer intention,Integer formal,
  832. Integer pageNo, Integer pageSize) {
  833. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  834. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN))
  835. params.put("salesmanId", TokenManager.getAdminId());
  836. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  837. params.put("intention", intention);
  838. params.put("formal", formal);
  839. }else if(0 == intention && 0 == formal){
  840. return new Pagination<OrderListBo>();
  841. }
  842. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  843. params, pageNo, pageSize);
  844. TOrder tOrder = null;
  845. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  846. for(OrderListBo olb:list){
  847. tOrder = new TOrder();
  848. try {
  849. BeanUtilsExt.copyProperties(tOrder, olb);
  850. tOrder.setActuallyTotalAmount(new BigDecimal(olb.getActuallyTotalAmount()));
  851. } catch (InvocationTargetException | IllegalAccessException e) {
  852. e.printStackTrace();
  853. }
  854. olb.setActive(setOperatorActive(tOrder));
  855. }
  856. data.setList(list);
  857. return data;
  858. }
  859. private Map<String,Object> disposeParams(OrderListBo bo,String startDate,String endDate){
  860. Map<String,Object> params = new HashMap<>();
  861. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  862. if(StringUtils.isNotBlank(bo.getOrderNo())) params.put("orderNo", bo.getOrderNo());
  863. if(null!=bo.getApproval()) params.put("approval", bo.getApproval());
  864. if(StringUtils.isNotBlank(bo.getSalesmanName())) params.put("salesmanName", bo.getSalesmanName());
  865. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate +" 00:00:00");
  866. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate + "23:59:59");
  867. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  868. if(bo.getLiquidationStatus() != null) params.put("liquidationStatus", bo.getLiquidationStatus());
  869. if(bo.getProjectStage() != null) params.put("projectStage", bo.getProjectStage());
  870. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  871. return params;
  872. }
  873. @Override
  874. public ServiceOrderDetailBo selectServiceOrderDetail(String orderNo) {
  875. ServiceOrderDetailBo bo = tOrderMapper.selectServiceOrderDetail(orderNo);
  876. TOrder tOrder = new TOrder();
  877. try {
  878. BeanUtilsExt.copyProperties(tOrder, bo);
  879. tOrder.setActuallyTotalAmount(new BigDecimal(bo.getActuallyTotalAmount()));
  880. bo.setActive(setOperatorActive(tOrder));
  881. } catch (IllegalAccessException | InvocationTargetException e) {
  882. e.printStackTrace();
  883. }
  884. return tOrderMapper.selectServiceOrderDetail(orderNo);
  885. }
  886. @Override
  887. public int updateServiceOrder(String orderNo, String signFirstPayment,
  888. String signTotalAmount,String contractNo, String orderRemarks,String contractPictureUrl) {
  889. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  890. checkOrder(tOrder);
  891. boolean flag = false;
  892. if (new BigDecimal(signFirstPayment).compareTo(tOrder.getSignFirstPayment()) != 0)
  893. flag = true;
  894. if (new BigDecimal(signTotalAmount).compareTo(tOrder.getSignTotalAmount()) != 0)
  895. flag = true;
  896. boolean flag2 = false;
  897. if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_SIGN.getCode()){
  898. flag2 = true;
  899. }else if(tOrder.getChangeStatus() == ChangeState.CHANGING.getCode()){
  900. flag2 = true;
  901. if(tOrder.getActuallyTotalAmount().compareTo(new BigDecimal(signTotalAmount)) == 1){ //超过全付
  902. tOrder.setLiquidationStatus(LiquidationState.AGREE_REFUND.getCode());
  903. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  904. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  905. }else if(tOrder.getActuallyTotalAmount().compareTo(new BigDecimal(signTotalAmount)) == 0){ //刚好全付
  906. tOrder.setLiquidationStatus(LiquidationState.ALREADY_PAY.getCode());
  907. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  908. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  909. }else if(tOrder.getActuallyTotalAmount().compareTo(new BigDecimal(signFirstPayment)) == -1){ //未达首付
  910. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode());
  911. if(tOrder.getProjectStage() == ProjectStage.WAIT_SET_UP.getCode())
  912. tOrder.setProjectStage(ProjectStage.NOT_SATISFY_CONDITION.getCode());
  913. }else if(tOrder.getActuallyTotalAmount().compareTo(new BigDecimal(signFirstPayment)) == 0){ //刚好首付
  914. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  915. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  916. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  917. }else{ //超过首付未全付
  918. tOrder.setLiquidationStatus(LiquidationState.WAIT_PAY_LAST_BALANCE.getCode());
  919. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  920. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  921. }
  922. }
  923. if (flag && !flag2) { //只有待签单或者变更中可修改
  924. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  925. }
  926. tOrder.setSignFirstPayment(new BigDecimal(signFirstPayment));
  927. tOrder.setSignTotalAmount(new BigDecimal(signTotalAmount));
  928. tOrder.setOrderRemarks(orderRemarks);
  929. tOrder.setUpdateTime(new Date());
  930. tOrder.setContractNo(contractNo);
  931. if(StringUtils.isNotBlank(contractPictureUrl))tOrder.setContractPictureUrl(contractPictureUrl);
  932. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  933. //如果支付后订单符合待立项,系统自动立项 2018-4-10
  934. if(tOrder.getProjectStage() == ProjectStage.WAIT_SET_UP.getCode())
  935. updateSetUpProject(tOrder.getOrderNo(),DEFUALT_SET_UP_COMMENT);
  936. return 1;
  937. }
  938. @Override
  939. public int updateSignServiceOrder(String orderNo,String contractNo, String signFirstPayment, String signTotalAmount,
  940. String approval,String orderRemarks,String signTime) {
  941. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  942. checkOrder(tOrder); //检查订单状态
  943. List<LockingReleaseBo> releaseList = checkProject(tOrder); //检查是否可签单
  944. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()) {
  945. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo, ""));
  946. } else {
  947. tOrder.setSignFirstPayment(new BigDecimal(signFirstPayment));
  948. tOrder.setSignTotalAmount(new BigDecimal(signTotalAmount));
  949. tOrder.setOrderStage(OrderStage.SIGNED.getCode());
  950. tOrder.setOrderStatus(OrderState.ALREADY_SIGN.getCode());
  951. tOrder.setProjectStage(ProjectStage.NOT_SATISFY_CONDITION.getCode());
  952. tOrder.setApproval(Integer.valueOf(approval));
  953. tOrder.setUpdateTime(new Date());
  954. try {
  955. tOrder.setSignTime(DateUtils.parseDate(signTime, AFTConstants.YYYYMMDD));
  956. } catch (ParseException e) {
  957. e.printStackTrace();
  958. }
  959. tOrder.setOrderRemarks(orderRemarks);
  960. tOrder.setContractNo(contractNo);
  961. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  962. //releaseProject(releaseList);//释放原锁定业务
  963. //lockProject(tOrder);//锁定客户业务
  964. }
  965. return 1;
  966. }
  967. @Override
  968. public int updateRevokeOrder(String orderNo) {
  969. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  970. boolean flag = true;
  971. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  972. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  973. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode()
  974. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()){
  975. flag = false;
  976. }
  977. if(flag && tOrder.getActuallyTotalAmount().doubleValue() == 0){
  978. tOrder.setDeleteSign(ActiveState.ABOLISH.getCode());
  979. }else{
  980. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"作废"));
  981. }
  982. tOrder.setUpdateTime(new Date());
  983. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  984. return 1;
  985. }
  986. public void checkOrder(TOrder tOrder){
  987. if(tOrder == null)
  988. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  989. if(tOrder.getDeleteSign() == ActiveState.ABOLISH.getCode())
  990. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, tOrder.getOrderNo(),""));
  991. if(tOrder.getDeleteSign() == ActiveState.LOCKING.getCode())
  992. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, tOrder.getOrderNo(),""));
  993. }
  994. public List<LockingReleaseBo> checkProject(TOrder tOrder){
  995. List<TOrderDetail> list = tOrderMapper.selectOrderCommodity(tOrder.getOrderNo());
  996. //检查客户锁定情况
  997. boolean isUserOwner = false;
  998. List<LockingReleaseBo> userLockedList = userMapper.selectLockedProject(tOrder.getBuyerId(), TokenManager.getAdminId(),null, 0, UserLockReleaseStatus.LOCKED.getCode());
  999. if(userLockedList.size() > 0){
  1000. isUserOwner = true;
  1001. }
  1002. //检查业务锁定情况
  1003. List<LockingReleaseBo> lockedList = null;
  1004. List<LockingReleaseBo> releaseList = new ArrayList<LockingReleaseBo>();
  1005. boolean isBusinessOwner = false;
  1006. String businessName = "";
  1007. for(TOrderDetail td : list){
  1008. lockedList = userMapper.selectLockedProject(tOrder.getBuyerId(), null,td.getCommodityId(), 1, UserLockReleaseStatus.LOCKED.getCode());
  1009. businessName = businessProjectMapper.selectByPrimaryKey(td.getCommodityId()).getBname();
  1010. if(lockedList.size() > 0){
  1011. for(LockingReleaseBo bo : lockedList){
  1012. if(bo.getAid().equals(TokenManager.getAdminId())){
  1013. isBusinessOwner = true;
  1014. releaseList.add(bo);
  1015. }
  1016. }
  1017. if(!isBusinessOwner) throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED,businessName,""));
  1018. }else{
  1019. if(!isUserOwner) throw new BusinessException(new Error(ErrorConstants.CUSTOMER_ALREADY_LOCKED,businessName,""));
  1020. }
  1021. }
  1022. return releaseList;
  1023. }
  1024. @SuppressWarnings("unused")
  1025. private void lockProject(TOrder tOrder){
  1026. List<TOrderDetail> list = tOrderMapper.selectOrderCommodity(tOrder.getOrderNo());
  1027. UserLockRelease ulr = null;
  1028. for(TOrderDetail td : list){
  1029. //新增锁定数据
  1030. ulr = new UserLockRelease();
  1031. ulr.setId(UUID.randomUUID().toString());
  1032. ulr.setType(1);
  1033. ulr.setAid(TokenManager.getAdminId());
  1034. ulr.setBusinessProjectId(td.getCommodityId());
  1035. ulr.setLockTime(tOrder.getSignTime());
  1036. ulr.setStatus(UserLockReleaseStatus.LOCKED.getCode());
  1037. ulr.setUid(tOrder.getBuyerId());
  1038. ulr.setOrderNo(tOrder.getOrderNo());
  1039. userLockReleaseMapper.insert(ulr);
  1040. }
  1041. }
  1042. @SuppressWarnings("unused")
  1043. private void releaseProject(List<LockingReleaseBo> releaseList){
  1044. if(releaseList != null && releaseList.size()>0){
  1045. UserLockRelease ulr = null;
  1046. for(LockingReleaseBo bo : releaseList){
  1047. ulr = new UserLockRelease();
  1048. ulr.setId(bo.getId());
  1049. ulr.setStatus(UserLockReleaseStatus.RELEASE.getCode());
  1050. userLockReleaseMapper.updateByPrimaryKeySelective(ulr);
  1051. }
  1052. }
  1053. }
  1054. @Override
  1055. @Transactional
  1056. public int addOrderCommodity(String orderNo, String commodityId,String commodityName, String commodityMode, Integer commodityQuantity,Integer commodityType,
  1057. String commodityPrice, String discountPrice,String commodityFirstPayment,String discountFirstPayment, String remarks) {
  1058. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1059. checkOrder(tOrder);
  1060. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()
  1061. && tOrder.getChangeStatus() != ChangeState.CHANGING.getCode()){
  1062. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo,""));
  1063. }else{
  1064. TOrderDetail detail = new TOrderDetail();
  1065. detail.setId(UUID.randomUUID().toString());
  1066. detail.setOrderNo(orderNo);
  1067. detail.setCommodityId(commodityId);
  1068. detail.setCommodityName(commodityName);
  1069. detail.setCommodityQuantity(commodityQuantity);
  1070. detail.setCommodityType(commodityType);
  1071. detail.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE:commodityMode);
  1072. detail.setCommodityPrice(new BigDecimal(commodityPrice));
  1073. detail.setDiscountPrice(new BigDecimal(discountPrice));
  1074. detail.setCommodityFirstPayment(new BigDecimal(commodityFirstPayment));
  1075. detail.setDiscountFirstPayment(new BigDecimal(discountFirstPayment));
  1076. detail.setRemarks(remarks);
  1077. detail.setCreateTime(new Date());
  1078. tOrderDetailMapper.insert(detail);
  1079. //订单市场价总额
  1080. BigDecimal totalAmountChange = new BigDecimal(commodityPrice).multiply(new BigDecimal(commodityQuantity));
  1081. //订单市场价首付金额
  1082. BigDecimal firstPaymentChange = new BigDecimal(commodityFirstPayment).multiply(new BigDecimal(commodityQuantity));
  1083. //订单签单总额
  1084. BigDecimal signTotalAmountChange = new BigDecimal(discountPrice).multiply(new BigDecimal(commodityQuantity));
  1085. //订单签单首付金额
  1086. BigDecimal signFirstPaymentChange = new BigDecimal(discountFirstPayment).multiply(new BigDecimal(commodityQuantity));
  1087. tOrder.setOrderAmount(tOrder.getOrderAmount().add(totalAmountChange));
  1088. tOrder.setFirstPayment(tOrder.getFirstPayment().add(firstPaymentChange));
  1089. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().add(signTotalAmountChange));
  1090. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().add(signFirstPaymentChange));
  1091. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1092. }
  1093. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()){ //已签单的同步锁定
  1094. UserLockRelease ulr = new UserLockRelease();
  1095. ulr.setId(UUID.randomUUID().toString());
  1096. ulr.setType(1);
  1097. ulr.setAid(TokenManager.getAdminId());
  1098. ulr.setBusinessProjectId(commodityId);
  1099. ulr.setLockTime(tOrder.getSignTime());
  1100. ulr.setStatus(UserLockReleaseStatus.LOCKED.getCode());
  1101. ulr.setUid(tOrder.getBuyerId());
  1102. ulr.setOrderNo(tOrder.getOrderNo());
  1103. userLockReleaseMapper.insert(ulr);
  1104. }
  1105. return 1;
  1106. }
  1107. @Override
  1108. @Transactional
  1109. public int updateOrderCommodity(String detailId,String discountPrice,String discountFirstPayment,Integer commodityQuantity,String remarks) {
  1110. TOrderDetail oldDetail = tOrderDetailMapper.selectByPrimaryKey(detailId);
  1111. TOrder tOrder = tOrderMapper.selectByPrimaryKey(oldDetail.getOrderNo());
  1112. checkOrder(tOrder);
  1113. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()
  1114. && tOrder.getChangeStatus() != ChangeState.CHANGING.getCode()) {
  1115. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, oldDetail.getOrderNo(), ""));
  1116. } else {
  1117. TOrderDetail detail = new TOrderDetail();
  1118. detail.setId(detailId);
  1119. detail.setOrderNo(oldDetail.getOrderNo());
  1120. detail.setCommodityQuantity(commodityQuantity);
  1121. detail.setDiscountPrice(new BigDecimal(discountPrice));
  1122. detail.setDiscountFirstPayment(new BigDecimal(discountFirstPayment));
  1123. detail.setRemarks(remarks);
  1124. tOrderDetailMapper.updateByPrimaryKeySelective(detail);
  1125. // 订单签单总额
  1126. BigDecimal signTotalAmountChange = new BigDecimal(discountPrice).multiply(new BigDecimal(commodityQuantity))
  1127. .subtract(oldDetail.getDiscountPrice().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  1128. // 订单签单首付金额
  1129. BigDecimal signFirstPaymentChange = new BigDecimal(discountFirstPayment).multiply(new BigDecimal(commodityQuantity))
  1130. .subtract(oldDetail.getDiscountFirstPayment().multiply(new BigDecimal(oldDetail.getCommodityQuantity())));
  1131. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().add(signTotalAmountChange));
  1132. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().add(signFirstPaymentChange));
  1133. tOrder.setUpdateTime(new Date());
  1134. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1135. }
  1136. return 1;
  1137. }
  1138. @Override
  1139. @Transactional
  1140. public int deleteOrderCommodity(String detailId) {
  1141. TOrderDetail detail = tOrderDetailMapper.selectByPrimaryKey(detailId);
  1142. TOrder tOrder = tOrderMapper.selectByPrimaryKey(detail.getOrderNo());
  1143. checkOrder(tOrder);
  1144. if (tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()
  1145. && tOrder.getChangeStatus() != ChangeState.CHANGING.getCode()) {
  1146. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, detail.getOrderNo(), ""));
  1147. } else {
  1148. BigDecimal totalAmountChange = detail.getCommodityPrice()
  1149. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  1150. BigDecimal firstPaymentChange = detail.getCommodityFirstPayment()
  1151. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  1152. BigDecimal signTotalAmountChange = detail.getDiscountPrice()
  1153. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  1154. BigDecimal signFirstPaymentChange = detail.getDiscountFirstPayment()
  1155. .multiply(new BigDecimal(detail.getCommodityQuantity()));
  1156. tOrder.setOrderAmount(tOrder.getOrderAmount().subtract(totalAmountChange));
  1157. tOrder.setFirstPayment(tOrder.getFirstPayment().subtract(firstPaymentChange));
  1158. tOrder.setSignTotalAmount(tOrder.getSignTotalAmount().subtract(signTotalAmountChange));
  1159. tOrder.setSignFirstPayment(tOrder.getSignFirstPayment().subtract(signFirstPaymentChange));
  1160. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1161. tOrderDetailMapper.deleteByPrimaryKey(detailId);
  1162. }
  1163. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()){ //已签单的同步锁定
  1164. userLockReleaseMapper.deleteLockByOrder(detail.getOrderNo(),detail.getCommodityId());
  1165. }
  1166. return 1;
  1167. }
  1168. @Override
  1169. public List<OrganizationManagement> selectMyDeps(){
  1170. if(TokenManager.hasRole(AFTConstants.SUPERADMIN) || TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1171. return organizationManagementMapper.selectAllDeps();
  1172. else
  1173. return selectCurrentDep(TokenManager.getAdminId());
  1174. }
  1175. private List<OrganizationManagement> selectSubDeps(List<OrganizationManagement> allData,List<OrganizationManagement> superData){
  1176. List<OrganizationManagement> subData = new ArrayList<>();
  1177. String superIds = "";
  1178. for(OrganizationManagement om : superData){
  1179. if(!om.getId().equals(om.getSuperId())){
  1180. superIds += om.getId() + ",";
  1181. }
  1182. }
  1183. if(StringUtils.isNotBlank(superIds)) subData = organizationManagementMapper.selectSubDeps(superIds.substring(0, superIds.length()-1));
  1184. if(subData != null && subData.size()>0) {
  1185. allData.addAll(subData);
  1186. selectSubDeps(allData,subData);
  1187. }
  1188. return allData;
  1189. }
  1190. private List<OrganizationManagement> selectCurrentDep(String managerId){
  1191. List<OrganizationManagement> allData = new ArrayList<OrganizationManagement>();
  1192. List<OrganizationManagement> superData = organizationManagementMapper.selectCurrentDeps(managerId);
  1193. if(superData != null && superData.size()>0){
  1194. allData.addAll(superData);
  1195. }
  1196. selectSubDeps(allData,superData);
  1197. return allData;
  1198. }
  1199. @SuppressWarnings("unchecked")
  1200. @Override
  1201. public Pagination<OrderListBo> selectDepServiceOrder(OrderListBo bo, String startDate, String endDate,
  1202. Integer intention, Integer formal, String depIds,Integer pageNo, Integer pageSize) {
  1203. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  1204. if(StringUtils.isNotBlank(depIds)) {
  1205. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
  1206. params.put("depIds","'" + depIds.replace(",", "','") + "'");
  1207. }else{
  1208. if(!depIds.contains(",")) params.put("depIds","'" + depIds + "'");
  1209. }
  1210. }else{
  1211. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1212. return new Pagination<OrderListBo>();
  1213. }
  1214. if((1 == intention && 0 == formal) || ( 0 == intention && 1 == formal)){
  1215. params.put("intention", intention);
  1216. params.put("formal", formal);
  1217. }else if(0 == intention && 0 == formal){
  1218. return new Pagination<OrderListBo>();
  1219. }
  1220. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  1221. params, pageNo, pageSize);
  1222. TOrder tOrder = null;
  1223. List<OrderListBo> list = (List<OrderListBo>)data.getList();
  1224. for(OrderListBo olb:list){
  1225. tOrder = new TOrder();
  1226. try {
  1227. BeanUtilsExt.copyProperties(tOrder, olb);
  1228. tOrder.setActuallyTotalAmount(new BigDecimal(olb.getActuallyTotalAmount()));
  1229. } catch (InvocationTargetException | IllegalAccessException e) {
  1230. e.printStackTrace();
  1231. }
  1232. olb.setActive(setOperatorActive(tOrder));
  1233. }
  1234. data.setList(list);
  1235. return data;
  1236. }
  1237. @SuppressWarnings("unchecked")
  1238. @Override
  1239. public Pagination<OrderListBo> selectApprovalServiceOrder(OrderListBo bo, String startDate, String endDate,
  1240. String depIds,Integer approvalHistory, Integer pageNo, Integer pageSize) {
  1241. Map<String,Object> params = disposeParams(bo,startDate,endDate);
  1242. if(StringUtils.isNotBlank(depIds)) {
  1243. params.put("depIds", "'" + depIds + "'");
  1244. }else{
  1245. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN) && !TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))
  1246. return new Pagination<OrderListBo>();
  1247. }
  1248. if(approvalHistory != null){
  1249. params.put("approvalHistory", approvalHistory);
  1250. }
  1251. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  1252. if(bo.getOrderType() != null) params.put("orderType", bo.getOrderType());
  1253. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  1254. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  1255. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate);
  1256. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate);
  1257. return (Pagination<OrderListBo>)findPage("selectServiceOrderByPage","selectServiceOrderCount",
  1258. params, pageNo, pageSize);
  1259. }
  1260. @Override
  1261. public int createServiceOrder(String uid, Integer orderType,String contractType) {
  1262. BigDecimal initial = new BigDecimal(0);
  1263. TOrder tOrder = new TOrder();
  1264. tOrder.setOrderType(orderType);
  1265. tOrder.setOrderNo(idGenerator.generateId().toString());
  1266. tOrder.setCreater(TokenManager.getAdminId());
  1267. tOrder.setCreateTime(new Date());
  1268. tOrder.setBuyerId(uid);
  1269. tOrder.setSellerId(DEFAULT_PLATFORM_ID);
  1270. tOrder.setSalesmanId(TokenManager.getAdminId());
  1271. tOrder.setBrokerageAmount(initial);
  1272. tOrder.setFirstPayment(initial);
  1273. tOrder.setOrderAmount(initial);
  1274. tOrder.setSignBrokerageAmount(initial);
  1275. tOrder.setSignFirstPayment(initial);
  1276. tOrder.setSignTotalAmount(initial);
  1277. tOrder.setSignWithdrawAmount(initial);
  1278. tOrder.setOrderChannel(OrderChannel.PORTAL.getCode());
  1279. tOrder.setDeleteSign(ActiveState.NORMAL.getCode());
  1280. tOrder.setApproval(ApprovalState.NORMAL.getCode());
  1281. tOrder.setContractType(contractType);
  1282. tOrder.setChangeStatus(ChangeState.UNCHANGE.getCode());
  1283. setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false);
  1284. return tOrderMapper.insert(tOrder);
  1285. }
  1286. @SuppressWarnings("unchecked")
  1287. @Override
  1288. public Pagination<OrderListBo> selectPublicOrder(OrderListBo bo,String startDate,String endDate,Integer pageNo, Integer pageSize) {
  1289. Map<String, Object> params = new HashMap<String,Object>();
  1290. if(StringUtils.isNotBlank(bo.getBuyerName())) params.put("buyerName", bo.getBuyerName());
  1291. if(bo.getOrderType() != null) params.put("orderType", bo.getOrderType());
  1292. if(bo.getOrderChannel() != null) params.put("orderChannel", bo.getOrderChannel());
  1293. if(bo.getOrderStatus() != null) params.put("orderStatus", bo.getOrderStatus());
  1294. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate);
  1295. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate);
  1296. return (Pagination<OrderListBo>)findPage("selectPublicOrderByPage","selectPublicOrderCount",
  1297. params, pageNo, pageSize);
  1298. }
  1299. @Override
  1300. public int updateAppointSalesman(String orderNo, String salesmanId) {
  1301. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1302. checkOrder(tOrder);
  1303. tOrder.setSalesmanId(salesmanId);
  1304. tOrder.setUpdateTime(new Date());
  1305. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1306. }
  1307. @SuppressWarnings("unchecked")
  1308. @Override
  1309. public Pagination<OrderListBo> selectSettlementList(String orderNo, String depId,String buyerName,String salesmanName,
  1310. String financeId,String financeName,Integer orderStatus,Integer liquidationStatus,Integer approval,Integer isDistributionFinance,
  1311. String startDate,String endDate,Integer pageNo, Integer pageSize) {
  1312. Map<String, Object> params = new HashMap<String, Object>();
  1313. if(StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  1314. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1315. if(StringUtils.isNotBlank(buyerName)) params.put("buyerName", buyerName);
  1316. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1317. if(StringUtils.isNotBlank(financeId)) params.put("financeId", financeId);
  1318. if(StringUtils.isNotBlank(financeName)) params.put("financeName", financeName);
  1319. if(orderStatus != null) params.put("orderStatus", orderStatus);
  1320. if(liquidationStatus != null) params.put("liquidationStatus", liquidationStatus);
  1321. if(approval != null) params.put("approval", approval);
  1322. if(isDistributionFinance != null) params.put("isDistributionFinance", isDistributionFinance);
  1323. if(StringUtils.isNotBlank(startDate)) params.put("startDate", startDate);
  1324. if(StringUtils.isNotBlank(endDate)) params.put("endDate", endDate);
  1325. return (Pagination<OrderListBo>)findPage("selectSettlementByPage","selectSettlementCount", params, pageNo, pageSize);
  1326. }
  1327. @SuppressWarnings("unchecked")
  1328. @Override
  1329. public Pagination<BillListBo> selectMyBillList(String payeeName, String payerName, String depId,
  1330. String salesmanName,String orderNo, Integer confirmSign,Integer deleteSign, Integer pageNo, Integer pageSize) {
  1331. Map<String, Object> params = new HashMap<String, Object>();
  1332. if(StringUtils.isNotBlank(payeeName)) params.put("payeeName", payeeName);
  1333. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1334. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1335. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1336. if(StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  1337. if(confirmSign != null) params.put("confirmSign", confirmSign);
  1338. if(deleteSign != null) params.put("deleteSign", deleteSign);
  1339. /** 特殊处理字段开始 **/
  1340. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  1341. params.put("isFinance", 1);
  1342. }
  1343. params.put("aid", TokenManager.getAdminId());
  1344. /** 特殊处理字段结束 **/
  1345. return (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1346. }
  1347. @SuppressWarnings("unchecked")
  1348. @Override
  1349. public Pagination<BillListBo> queryMyBillList(String payeeName, String payerName, String depId,
  1350. String salesmanName,String orderNo, Integer confirmSign,Integer deleteSign, Integer pageNo, Integer pageSize) {
  1351. Map<String, Object> params = new HashMap<String, Object>();
  1352. if(StringUtils.isNotBlank(payeeName)) params.put("payeeName", payeeName);
  1353. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1354. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1355. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1356. if(StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  1357. if(confirmSign != null) params.put("confirmSign", confirmSign);
  1358. if(deleteSign != null) params.put("deleteSign", deleteSign);
  1359. /** 特殊处理字段开始 **/
  1360. if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){
  1361. params.put("isFinance", 0);
  1362. }
  1363. params.put("aid", TokenManager.getAdminId());
  1364. /** 特殊处理字段结束 **/
  1365. return (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1366. }
  1367. @SuppressWarnings("unchecked")
  1368. @Override
  1369. public Pagination<BillListBo> queryAllBillList(String payeeName, String payerName, String depId,
  1370. String salesmanName ,String financeName, String orderNo, Integer confirmSign,Integer deleteSign,Integer pageNo, Integer pageSize) {
  1371. Map<String, Object> params = new HashMap<String, Object>();
  1372. if(StringUtils.isNotBlank(payeeName)) params.put("payeeName", payeeName);
  1373. if(StringUtils.isNotBlank(payerName)) params.put("payerName", payerName);
  1374. if(StringUtils.isNotBlank(depId)) params.put("depId", depId);
  1375. if(StringUtils.isNotBlank(salesmanName)) params.put("salesmanName", salesmanName);
  1376. if(StringUtils.isNotBlank(financeName)) params.put("financeName", financeName);
  1377. if(orderNo != null) params.put("orderNo", orderNo);
  1378. if(confirmSign != null) params.put("confirmSign", confirmSign);
  1379. if(deleteSign != null) params.put("deleteSign", deleteSign);
  1380. Pagination<BillListBo> data = (Pagination<BillListBo>)findPage("selectBillByPage","selectBillCount", params, pageNo, pageSize);
  1381. List<BillListBo> list = (List<BillListBo>)data.getList();
  1382. if(list.size()>0){
  1383. for(BillListBo bo:list){
  1384. bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount()));
  1385. }
  1386. }
  1387. data.setList(list);
  1388. return data;
  1389. }
  1390. @Override
  1391. public BillDetailBo selectBillDetail(String billNo) {
  1392. return tOrderMapper.selectBillDetail(billNo);
  1393. }
  1394. @Override
  1395. @Transactional
  1396. public int updateBill(String billNo, String orderNo, Integer confrim,String financialPayNo,String financialPayTime,String remarks) {
  1397. TOrderBill bill = tOrderBillMapper.selectByPrimaryKey(billNo);
  1398. TOrder order = tOrderMapper.selectByPrimaryKey(orderNo);
  1399. Date confirmTime = new Date();
  1400. if(bill != null && order != null){
  1401. bill.setBillNo(billNo);
  1402. bill.setFinancialPayNo(financialPayNo);
  1403. try {
  1404. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  1405. } catch (ParseException e) {
  1406. e.printStackTrace();
  1407. }
  1408. bill.setRemarks(remarks);
  1409. order.setUpdateTime(new Date());
  1410. if(confrim == AFTConstants.YES){
  1411. bill.setConfirmTime(confirmTime);
  1412. bill.setConfirmSign(AuditState.AUDIT_SUCCESS.getCode());
  1413. checkOrder(order);
  1414. if(order.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  1415. && bill.getTransactionSubject() == TransactionSubject.SUPPLY_PAY.getCode()) { //代付+首付状态
  1416. setOrderState(OrderAction.CONFIRM_PAY_FOR_FIRST, bill.getTransactionAmount(), order, false);
  1417. tOrderMapper.updateByPrimaryKeySelective(order);
  1418. //如果支付后订单符合待立项,系统自动立项 2018-4-10
  1419. if(order.getProjectStage() == ProjectStage.WAIT_SET_UP.getCode())
  1420. updateSetUpProject(order.getOrderNo(),DEFUALT_SET_UP_COMMENT);
  1421. } else if(order.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  1422. && bill.getTransactionSubject() == TransactionSubject.SUPPLY_PAY.getCode()) { //代付+尾款状态
  1423. setOrderState(OrderAction.CONFIRM_PAY_FOR_LAST, bill.getTransactionAmount(), order, false);
  1424. tOrderMapper.updateByPrimaryKeySelective(order);
  1425. //如果支付后订单符合待立项,系统自动立项 2018-4-10
  1426. if(order.getProjectStage() == ProjectStage.WAIT_SET_UP.getCode())
  1427. updateSetUpProject(order.getOrderNo(),DEFUALT_SET_UP_COMMENT);
  1428. } else if(order.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()
  1429. && bill.getTransactionSubject() == TransactionSubject.REFUND.getCode()) { //待退+退款状态
  1430. setOrderState(OrderAction.COMPLETE_REFUND, bill.getTransactionAmount(), order, false);
  1431. tOrderMapper.updateByPrimaryKeySelective(order);
  1432. }else if(order.getLiquidationStatus() == LiquidationState.WAIT_FOR_WITHDRAW.getCode()
  1433. && bill.getTransactionSubject() == TransactionSubject.SUPPLY_COLLECT.getCode()) { //代收+提现状态
  1434. setOrderState(OrderAction.CONFIRM_WITHDRAW, bill.getTransactionAmount(), order, false);
  1435. tOrderMapper.updateByPrimaryKeySelective(order);
  1436. } else {
  1437. throw new BusinessException(new Error(ErrorConstants.BILL_ALREADY_EXPIRE, billNo , ""));
  1438. }
  1439. }else if(confrim == AFTConstants.NO){
  1440. bill.setConfirmTime(confirmTime);
  1441. bill.setConfirmSign(AuditState.AUDIT_FAIL.getCode());
  1442. bill.setDeleteSign(Boolean.TRUE);
  1443. }
  1444. String regex = "^(1[1-9][0-9])\\d{8}$";
  1445. Pattern p = Pattern.compile(regex);
  1446. String mobile="";
  1447. Admin a=adminMapper.selectByPrimaryKey(order.getSalesmanId());
  1448. if (null!=a.getContactMobile()) {
  1449. Matcher m = p.matcher(a.getContactMobile());
  1450. if ( m.matches()) {
  1451. mobile=a.getContactMobile();
  1452. }
  1453. sendMessage(order,mobile,OrderFlowState.LSQR.getDesc());
  1454. }
  1455. tOrderBillMapper.updateByPrimaryKeySelective(bill);
  1456. }
  1457. return 1;
  1458. }
  1459. @Override
  1460. public int updateBill(String billNo,String orderNo, String financialPayNo, String financialPayTime, String remarks) {
  1461. TOrderBill bill = new TOrderBill();
  1462. bill.setBillNo(billNo);
  1463. bill.setOrderNo(orderNo);
  1464. bill.setFinancialPayNo(financialPayNo);
  1465. try {
  1466. bill.setFinancialPayTime(DateUtils.parseDate(financialPayTime, AFTConstants.YYYYMMDDHHMMSS));
  1467. } catch (ParseException e) {
  1468. e.printStackTrace();
  1469. }
  1470. bill.setRemarks(remarks);
  1471. return tOrderBillMapper.updateByPrimaryKeySelective(bill);
  1472. }
  1473. @Override
  1474. public int updateApprovalServiceOrder(String orderNo, Integer confirm) {
  1475. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1476. checkOrder(tOrder);
  1477. if(tOrder.getOrderStatus() != OrderState.ALREADY_SIGN.getCode()
  1478. || tOrder.getApproval() != ApprovalState.WAIT_AUDIT.getCode()){
  1479. throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT, orderNo , ""));
  1480. }
  1481. tOrder.setUpdateTime(new Date());
  1482. if(confirm == AFTConstants.YES){
  1483. tOrder.setApproval(ApprovalState.AUDIT_PASS.getCode());
  1484. if(tOrder.getProjectStage() == ProjectStage.NOT_SATISFY_CONDITION.getCode())
  1485. tOrder.setProjectStage(ProjectStage.WAIT_SET_UP.getCode());
  1486. }else if(confirm == AFTConstants.NO){
  1487. tOrder.setApproval(ApprovalState.AUDIT_REFUSE.getCode());
  1488. }
  1489. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1490. //如果支付后订单符合待立项,系统自动立项 2018-4-10
  1491. if(tOrder.getProjectStage() == ProjectStage.WAIT_SET_UP.getCode());
  1492. updateSetUpProject(tOrder.getOrderNo(),DEFUALT_SET_UP_COMMENT);
  1493. String regex = "^(1[1-9][0-9])\\d{8}$";
  1494. Pattern p = Pattern.compile(regex);
  1495. String mobile="";
  1496. Admin a=adminMapper.selectByPrimaryKey(tOrder.getSalesmanId());
  1497. if (null!=a.getContactMobile()) {
  1498. Matcher m = p.matcher(a.getContactMobile());
  1499. if ( m.matches()) {
  1500. mobile=a.getContactMobile();
  1501. }
  1502. sendMessage(tOrder,mobile,OrderFlowState.TPCL.getDesc());
  1503. }
  1504. return 1;
  1505. }
  1506. public void sendMessage(TOrder tOrder, String mobile, String type) {
  1507. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1508. String userName=tOrderMapper.selectByUserName(tOrder.getOrderNo());
  1509. //String message=noticeType.getDesc() + ": 订单编号-" + tOrder.getOrderNo() + ",变更内容:"+noticeComment+",操作人-" + TokenManager.getAdminToken().getName();
  1510. String paramString = "{\"number\":\"" + tOrder.getOrderNo()
  1511. + "\",\"operator\":\"" + TokenManager.getAdminToken().getName()
  1512. + "\",\"name\":\"" + userName
  1513. + "\",\"time\":\"" + sdf.format(new Date())
  1514. + "\",\"type\":\"" + type +
  1515. "\"}";
  1516. MobileMessageUtils.sendMessage(mobileRemindCodeTemplate, paramString, mobile, accessKey, accessSecret);
  1517. }
  1518. @SuppressWarnings("unchecked")
  1519. @Override
  1520. public Pagination<OrderListBo> listSetUpServiceOrder(String buyerName,String salesmanName, String financeName,
  1521. String depId,Integer approval, Integer pageNo, Integer pageSize) {
  1522. Map<String,Object> params = new HashMap<String,Object>();
  1523. if(StringUtils.isNotBlank(buyerName))
  1524. params.put("buyerName", buyerName);
  1525. if(StringUtils.isNotBlank(salesmanName))
  1526. params.put("salesmanName", salesmanName);
  1527. if(StringUtils.isNotBlank(financeName))
  1528. params.put("financeName",financeName);
  1529. if(StringUtils.isNotBlank(depId))
  1530. params.put("depId", depId);
  1531. if(approval != null)
  1532. params.put("approval", approval);
  1533. return (Pagination<OrderListBo>)findPage("selectSetUpServiceOrderByPage","selectSetUpServiceOrderCount",
  1534. params, pageNo, pageSize);
  1535. }
  1536. @Override
  1537. @Transactional
  1538. public int updateSetUpProject(String orderNo, String signComment) {
  1539. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1540. Date createTime = new Date();
  1541. checkOrder(tOrder);
  1542. boolean flag = false;
  1543. if(tOrder.getOrderStatus() == OrderState.ALREADY_SIGN.getCode()){
  1544. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode())
  1545. flag = true;
  1546. if(tOrder.getLiquidationStatus() == LiquidationState.ALREADY_PAY.getCode())
  1547. flag = true;
  1548. if(tOrder.getApproval() == ApprovalState.AUDIT_PASS.getCode())
  1549. flag = true;
  1550. }
  1551. if(!flag)
  1552. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1553. tOrder.setProjectStage(ProjectStage.ALREADY_SET_UP.getCode());
  1554. tOrder.setOrderStage(OrderStage.PROJECT.getCode());
  1555. tOrder.setUpdateTime(createTime);
  1556. tOrder.setSetUpTime(createTime);
  1557. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1558. //-------------- 查询订单详情 --------------------------
  1559. List<TOrderDetail> detailList = tOrderMapper.selectOrderCommodity(orderNo);
  1560. List<ContractTask> taskList = new ArrayList<>();
  1561. ContractTask task = null;
  1562. Contract contract = new Contract();
  1563. String contractId = UUID.randomUUID().toString().replace("-", "");
  1564. contract.setId(contractId);
  1565. contract.setCreateTime(createTime);
  1566. contract.setType(tOrder.getContractType());
  1567. contract.setSignDate(createTime);
  1568. contract.setOrderNo(orderNo);
  1569. contract.setStatus(ProjectStage.ALREADY_SET_UP.getCode());
  1570. contract.setUid(tOrder.getBuyerId());
  1571. contract.setCreater(TokenManager.getAdminId());
  1572. contract.setPrincipal(tOrder.getTechnicianId()); //暂不确定
  1573. contract.setSignComment(signComment);
  1574. contract.setTaskDistribution(TaskDistributionState.NOT_DISTRIBUTION.getCode());
  1575. contractMapper.insert(contract);
  1576. //流水确认
  1577. for(TOrderDetail orderDetail: detailList){
  1578. Admin aa=adminMapper.selectAdminName(AFTConstants.DEFAULT_INITIATOR);
  1579. Admin ab=adminMapper.selectAdminName(AFTConstants.CONSULTANT_MANAGER);
  1580. for(int i=0; i<orderDetail.getCommodityQuantity();i++){
  1581. task = new ContractTask();
  1582. task.setId(UUID.randomUUID().toString().replace("-", ""));
  1583. task.setCommodityId(orderDetail.getCommodityId());
  1584. task.setCommodityMode(orderDetail.getCommodityMode());
  1585. task.setCommodityName(orderDetail.getCommodityName());
  1586. task.setCommodityType(orderDetail.getCommodityType());
  1587. task.setTaskComment(orderDetail.getRemarks());
  1588. task.setCommodityQuantity(1);
  1589. task.setCreateTime(createTime);
  1590. task.setContractId(contractId);
  1591. task.setPublishStatus(PublicStatus.WGS.getCode());
  1592. task.setTaskStatus(TaskState.UN_DISTRIBUTION.getCode());
  1593. task.setDeletedSign(DeleteStatus.UNDELETE.getCode());
  1594. //将项目任务日志分配给管理员
  1595. ContractTaskLog c=new ContractTaskLog();
  1596. c.setId(UUID.randomUUID().toString());
  1597. c.setTaskAllocator(aa.getId());
  1598. c.setTaskReceiver(ab.getId());
  1599. c.setContractTaskId(task.getId());
  1600. c.setCreateTime(new Date());
  1601. contractTaskLogMapper.insert(c);
  1602. taskList.add(task);
  1603. }
  1604. }
  1605. if(taskList.size()>0) contractMapper.batchInsert(taskList);
  1606. return 1;
  1607. }
  1608. @Override
  1609. public List<TOrderDetail> selectOrderCommodity(String orderNo) {
  1610. return tOrderMapper.selectOrderCommodity(orderNo);
  1611. }
  1612. @Override
  1613. public int updatePayForTest(String orderNo, String payAmount) {
  1614. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1615. if(tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  1616. || tOrder.getLiquidationStatus() == LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()){
  1617. addFundRecord(orderNo, "测试用户", DEFAULT_PLATFORM_ID, TokenManager.getUserId(), "",
  1618. TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, new BigDecimal(payAmount), TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  1619. tOrder.setUpdateTime(new Date());
  1620. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1621. }else{
  1622. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1623. }
  1624. return 1;
  1625. }
  1626. @Override
  1627. public int updateRefundForTest(String orderNo, String refundAmount) {
  1628. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1629. if(tOrder.getLiquidationStatus() == LiquidationState.AGREE_REFUND.getCode()){
  1630. addFundRecord(orderNo, "测试用户", DEFAULT_PLATFORM_ID, TokenManager.getUserId(), "",
  1631. TransactionSubject.REFUND,PayChannel.UNIONPAY, new BigDecimal(refundAmount).multiply(new BigDecimal(-1)), TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  1632. tOrder.setUpdateTime(new Date());
  1633. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1634. }else{
  1635. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1636. }
  1637. return 1;
  1638. }
  1639. @Override
  1640. public int updateDistributionOrder(String orderNo, String financeId) {
  1641. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1642. checkOrder(tOrder);
  1643. if(StringUtils.isBlank(tOrder.getFinanceId())){
  1644. tOrder.setFinanceId(financeId);
  1645. }
  1646. tOrder.setUpdateTime(new Date());
  1647. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1648. }
  1649. @Override
  1650. public int updateLockOrRevokeOrder(String orderNo, Integer operatorType) {
  1651. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1652. if(tOrder != null){
  1653. if(operatorType == 0){ //锁定
  1654. if(tOrder.getDeleteSign() != DeleteStatus.UNDELETE.getCode())
  1655. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1656. tOrder.setDeleteSign(DeleteStatus.LOCKING.getCode());
  1657. }else if(operatorType == 1){ //解锁
  1658. if(tOrder.getDeleteSign() != DeleteStatus.LOCKING.getCode())
  1659. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1660. tOrder.setDeleteSign(DeleteStatus.UNDELETE.getCode());
  1661. }else if(operatorType == 2){ //作废
  1662. if(tOrder.getDeleteSign() != DeleteStatus.UNDELETE.getCode())
  1663. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1664. if(tOrder.getActuallyTotalAmount().doubleValue() > 0){
  1665. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1666. }
  1667. if(tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_AFTER_SIGN.getCode()
  1668. && tOrder.getOrderStatus() != OrderState.BUYER_CANCEL_BEFORE_SIGN.getCode()
  1669. && tOrder.getOrderStatus() != OrderState.SELLER_CANCEL_AFTER_SIGN.getCode()
  1670. && tOrder.getOrderStatus() != OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode())
  1671. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1672. tOrder.setDeleteSign(DeleteStatus.DELETED.getCode());
  1673. }else if(operatorType == 3){ //签单前取消订单
  1674. boolean flag = true;
  1675. if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_SIGN.getCode()){
  1676. flag = false;
  1677. }
  1678. if(tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_FIRST_BALANCE.getCode()
  1679. && tOrder.getLiquidationStatus() != LiquidationState.WAIT_PAY_LAST_BALANCE.getCode()
  1680. && tOrder.getLiquidationStatus() != LiquidationState.ALREADY_PAY.getCode()){
  1681. flag = false;
  1682. }
  1683. if(!flag)
  1684. throw new BusinessException(new Error(ErrorConstants.ORDER_CAN_NOT_MODIFY, orderNo, ""));
  1685. tOrder.setOrderStatus(OrderState.SELLER_REFUSE_BEFORE_SIGNL.getCode());
  1686. }
  1687. tOrderMapper.updateByPrimaryKey(tOrder);
  1688. }
  1689. return 1;
  1690. }
  1691. private String getSalesmanIdByUid(String uid){
  1692. User u = userMapper.selectByPrimaryKey(uid);
  1693. if(u!=null&&StringUtils.isBlank(u.getAid())){
  1694. return u.getAid();
  1695. }else{
  1696. return DEFAULT_ADMIN_ID;
  1697. }
  1698. }
  1699. @Override
  1700. public List<BillListBo> selectBillByOrderNo(String orderNo) {
  1701. return tOrderMapper.selectBillByOrderNo(orderNo);
  1702. }
  1703. @Override
  1704. public int updateApplyForRefund(String orderNo) {
  1705. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1706. setOrderState(OrderAction.APPLY_FOR_REFUND, new BigDecimal(0), tOrder, false);
  1707. tOrder.setUpdateTime(new Date());
  1708. return tOrderMapper.updateByPrimaryKey(tOrder);
  1709. }
  1710. @Override
  1711. public int updateConfirmRefund(String orderNo,boolean confirm) {
  1712. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1713. setOrderState(OrderAction.CONFIRM_REFUND, new BigDecimal(0), tOrder, confirm);
  1714. tOrder.setUpdateTime(new Date());
  1715. if(confirm){ //同意退款生成退款流水
  1716. BigDecimal transactionAmount = tOrder.getActuallyTotalAmount().subtract(tOrder.getActuallyBrokerageAmount()).multiply(new BigDecimal(-1));
  1717. addFundRecord(orderNo, "平台方", DEFAULT_PLATFORM_ID,TokenManager.getUserId(), "同意退款系统生成流水",
  1718. TransactionSubject.REFUND, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT);
  1719. }
  1720. return tOrderMapper.updateByPrimaryKey(tOrder);
  1721. }
  1722. @Override
  1723. public int updateTransferOrder(String orderNo, String aid, Integer targetType) {
  1724. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1725. checkOrder(tOrder);
  1726. if(targetType == 0) tOrder.setSalesmanId(aid);
  1727. else if(targetType == 1) tOrder.setFinanceId(aid);
  1728. else if(targetType == 2) tOrder.setTechnicianId(aid);
  1729. tOrder.setUpdateTime(new Date());
  1730. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1731. }
  1732. /**
  1733. * PC端添加意向
  1734. * 只能购买一份
  1735. * 后期规则:自营服务订单 、需求订单、其他订单不能同时加入购物车
  1736. * @throws ParseException
  1737. */
  1738. @Override
  1739. public int addPurpose(String orderNo, String commodityId, String commodityMode, Integer commodityQuantity,Integer commodityType,
  1740. String createTime,String remarks) throws ParseException {
  1741. CommodityDetailBo bo = tOrderMapper.selectCommodityDetail(commodityId,commodityType);
  1742. BigDecimal commodityPrice = StringUtils.isBlank(bo.getCommodityPrice()) ? DEFAULT_COMMODITY_PRICE
  1743. : new BigDecimal(Double.valueOf(bo.getCommodityPrice()));
  1744. BigDecimal commodityFirstPayment = StringUtils.isBlank(bo.getCommodityFirstPayment()) ? DEFAULT_FIRST_PAYMENT
  1745. : new BigDecimal(Double.valueOf(bo.getCommodityFirstPayment()));
  1746. BigDecimal discountPrice = commodityPrice.multiply(new BigDecimal(DEFAULT_COMMODITY_DISCOUNT));
  1747. BigDecimal discountFirstPayment = commodityFirstPayment.multiply(new BigDecimal(DEFAULT_COMMODITY_DISCOUNT));
  1748. TOrder tOrder = new TOrder();
  1749. tOrder.setOrderNo(orderNo);
  1750. tOrder.setCreater(DEFAULT_ADMIN_ID);
  1751. tOrder.setCreateTime(DateUtils.parseDate(createTime, AFTConstants.YYYYMMDDHHMMSS));
  1752. if(commodityType == CommodityType.DEMAND.getTypeCode()){
  1753. tOrder.setBuyerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId());
  1754. tOrder.setSellerId(TokenManager.getUserId());
  1755. }else{
  1756. tOrder.setBuyerId(TokenManager.getUserId());
  1757. tOrder.setSellerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId());
  1758. }
  1759. tOrder.setOrderType(commodityType);
  1760. tOrder.setBrokerageAmount(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION)));
  1761. tOrder.setOrderAmount(commodityPrice);
  1762. tOrder.setFirstPayment(commodityFirstPayment);
  1763. tOrder.setSignTotalAmount(discountPrice);
  1764. tOrder.setSignFirstPayment(discountFirstPayment);
  1765. tOrder.setSignBrokerageAmount(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION)));
  1766. tOrder.setSignWithdrawAmount(discountPrice.subtract(discountPrice.multiply(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION))));
  1767. tOrder.setDeleteSign(DeleteStatus.UNDELETE.getCode());
  1768. tOrder.setOrderChannel(OrderChannel.PORTAL.getCode());
  1769. tOrder.setApproval(ApprovalState.NORMAL.getCode());
  1770. tOrder.setChangeStatus(ChangeState.UNCHANGE.getCode());
  1771. tOrder.setSalesmanId(getSalesmanIdByUid(TokenManager.getAdminId()));
  1772. tOrder.setOrderRemarks(remarks);
  1773. tOrder.setContractType(bo.getCommodityClassify());
  1774. setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false);
  1775. TOrderDetail tOrderDetail = new TOrderDetail();
  1776. tOrderDetail.setId(UUID.randomUUID().toString());
  1777. tOrderDetail.setOrderNo(orderNo);
  1778. tOrderDetail.setCommodityId(commodityId);
  1779. tOrderDetail.setCommodityName(bo.getCommodityName());
  1780. tOrderDetail.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE: commodityMode);
  1781. tOrderDetail.setCommodityType(commodityType);
  1782. tOrderDetail.setCommodityQuantity(commodityQuantity);
  1783. tOrderDetail.setCommodityPrice(commodityPrice);
  1784. tOrderDetail.setCommodityFirstPayment(commodityFirstPayment);
  1785. tOrderDetail.setDiscountPrice(discountPrice);
  1786. tOrderDetail.setDiscountFirstPayment(discountFirstPayment);
  1787. tOrderDetail.setCreateTime(DateUtils.parseDate(createTime, AFTConstants.YYYYMMDDHHMMSS));
  1788. tOrderDetailMapper.insert(tOrderDetail);
  1789. tOrderMapper.insert(tOrder);
  1790. return 1;
  1791. }
  1792. @Override
  1793. @Transactional
  1794. public int addOrderChange(String orderNo, String changeComment) {
  1795. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1796. tOrder.setChangeStatus(ChangeState.CHANGING.getCode());
  1797. TOrderChange change = new TOrderChange();
  1798. change.setCreaterId(TokenManager.getAdminId());
  1799. change.setCreateTime(new Date());
  1800. change.setOrderNo(orderNo);
  1801. change.setId(UUID.randomUUID().toString());
  1802. change.setChangeComment(changeComment);
  1803. change.setChangeStatus(ChangeState.CHANGING.getCode());
  1804. change.setDeleteSign(DeleteStatus.UNDELETE.getCode());
  1805. tOrderChangeMapper.insert(change);
  1806. tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1807. generatorNoticeData(NoticeStatus.ORDER_CHANGE_ADD,changeComment,tOrder);
  1808. return 1;
  1809. }
  1810. @Override
  1811. public List<OrderChangeBo> selectOrderChange(String orderNo) {
  1812. return tOrderChangeMapper.selectOrderChange(orderNo);
  1813. }
  1814. @Override
  1815. public int deleteOrderChange(String changeId) {
  1816. TOrderChange change = tOrderChangeMapper.selectByPrimaryKey(changeId);
  1817. change.setDeleteSign(DeleteStatus.DELETED.getCode());
  1818. tOrderChangeMapper.updateByPrimaryKeySelective(change);
  1819. return updateOrderSatusByChange(change.getOrderNo());
  1820. }
  1821. /**
  1822. * 更新变更状态
  1823. * @param changeId
  1824. * @return
  1825. */
  1826. private int updateOrderSatusByChange(String orderNo){
  1827. if(StringUtils.isBlank(orderNo)) return 0;
  1828. int resultStatus = ChangeState.UNCHANGE.getCode();
  1829. int onChangeCount = tOrderChangeMapper.selectCountByStatus(ChangeState.CHANGING.getCode(), orderNo);
  1830. if(onChangeCount > 0){
  1831. resultStatus = ChangeState.CHANGING.getCode();
  1832. } else {
  1833. int completeChangeCount = tOrderChangeMapper.selectCountByStatus(ChangeState.CHANGED.getCode(), orderNo);
  1834. if(completeChangeCount>0) resultStatus = ChangeState.CHANGED.getCode();
  1835. }
  1836. TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo);
  1837. tOrder.setChangeStatus(resultStatus);
  1838. return tOrderMapper.updateByPrimaryKeySelective(tOrder);
  1839. }
  1840. @Override
  1841. public int updateOrderChange(String changeId, String changeComment, Integer changeStatus) {
  1842. TOrderChange change = tOrderChangeMapper.selectByPrimaryKey(changeId);
  1843. if(StringUtils.isNotBlank(changeComment))change.setChangeComment(changeComment);
  1844. change.setChangeStatus(changeStatus);
  1845. tOrderChangeMapper.updateByPrimaryKeySelective(change);
  1846. TOrder tOrder = tOrderMapper.selectByPrimaryKey(change.getOrderNo());
  1847. generatorNoticeData(NoticeStatus.ORDER_CHANGE_UDPATE,changeComment,tOrder);
  1848. return updateOrderSatusByChange(change.getOrderNo());
  1849. }
  1850. @Override
  1851. public int updateRepairData() {
  1852. List<TmpTable> tmpData = tmpTableMapper.selectAll();
  1853. int taskDistribution = TaskDistributionState.NOT_DISTRIBUTION.getCode();
  1854. for(TmpTable tt: tmpData){
  1855. if(tt.getAllCount() == tt.getDisCount())
  1856. taskDistribution = TaskDistributionState.ALL_DISTRIBUTION.getCode();
  1857. else if(tt.getAllCount() > tt.getDisCount() && tt.getDisCount() != 0)
  1858. taskDistribution = TaskDistributionState.PART_DISTRIBUTION.getCode();
  1859. else if(tt.getAllCount() > tt.getDisCount() && tt.getDisCount() == 0)
  1860. taskDistribution = TaskDistributionState.NOT_DISTRIBUTION.getCode();
  1861. contractMapper.updateRepairData(tt.getOrderNo(),taskDistribution);
  1862. }
  1863. return 1;
  1864. }
  1865. private void generatorNoticeData(NoticeStatus noticeType,String noticeComment,TOrder tOrder){
  1866. if(tOrder == null) return;
  1867. Notice notice = null;
  1868. List<Notice> noticeList = new ArrayList<>();
  1869. Calendar now = Calendar.getInstance();
  1870. now.set(Calendar.MILLISECOND, 0);
  1871. List<String> targetIds = new ArrayList<String>();
  1872. if(StringUtils.isNotBlank(tOrder.getSalesmanId()) && !targetIds.contains(tOrder.getSalesmanId()))
  1873. targetIds.add(tOrder.getSalesmanId());
  1874. if(StringUtils.isNotBlank(tOrder.getFinanceId()) && !targetIds.contains(tOrder.getFinanceId()))
  1875. targetIds.add(tOrder.getFinanceId());
  1876. if(StringUtils.isNotBlank(tOrder.getTechnicianId()) && !targetIds.contains(tOrder.getTechnicianId()))
  1877. targetIds.add(tOrder.getTechnicianId());
  1878. Admin admin = adminMapper.selectAdminByRoleId(AFTConstants.TECH_ADMIN);
  1879. if(admin!= null && !targetIds.contains(admin.getId())) targetIds.add(admin.getId());
  1880. if(targetIds.size()>0){
  1881. for(String id: targetIds){
  1882. notice = new Notice();
  1883. notice.setId(UUID.randomUUID().toString());
  1884. notice.setCreateTime(now.getTime());
  1885. notice.setReaded(NoticeReadStatus.UNREAD.getCode());
  1886. notice.setRid(tOrder.getOrderNo());
  1887. notice.setNoticeType(noticeType.getCode());
  1888. notice.setContent(noticeType.getDesc() + ": 订单编号-" + tOrder.getOrderNo() + ",操作人-" + TokenManager.getAdminToken().getName());
  1889. notice.setAid(id);
  1890. noticeList.add(notice);
  1891. }
  1892. MobileNotice( targetIds, tOrder);
  1893. noticeMapper.insertBatch(noticeList);
  1894. //触发短信提醒
  1895. List<String> l= contractTaskMapper.slectbyOrderNo(tOrder.getOrderNo());
  1896. for (String s : l) {
  1897. if(!targetIds.contains(s))
  1898. targetIds.add(s);
  1899. }
  1900. String regex = "^(1[1-9][0-9])\\d{8}$";
  1901. Pattern p = Pattern.compile(regex);
  1902. String mobile="";
  1903. for (String s : targetIds) {
  1904. Admin a=adminMapper.selectByPrimaryKey(s);
  1905. if (null!=a.getContactMobile()) {
  1906. Matcher m = p.matcher(a.getContactMobile());
  1907. if ( m.matches()) {
  1908. mobile+=a.getContactMobile()+",";
  1909. }
  1910. }
  1911. }
  1912. mobile=mobile.substring(0, mobile.length()-1);
  1913. sendMessage(tOrder,mobile,OrderFlowState.DDBG.getDesc());
  1914. }
  1915. }
  1916. private void MobileNotice(List<String> targetIds, TOrder tOrder) {
  1917. }
  1918. @Override
  1919. public void addContractTaskLog() {
  1920. List<ContractTask> list=contractTaskMapper.selectlistContractTask();
  1921. Admin aa=adminMapper.selectAdminName(AFTConstants.DEFAULT_INITIATOR);
  1922. Admin ab=adminMapper.selectAdminName(AFTConstants.CONSULTANT_MANAGER);
  1923. for (ContractTask ct : list) {
  1924. ContractTaskLog c=new ContractTaskLog();
  1925. c.setId(UUID.randomUUID().toString());
  1926. c.setContractTaskId(ct.getId());
  1927. c.setTaskReceiver(ab.getId());
  1928. c.setTaskAllocator(aa.getId());
  1929. c.setCreateTime(new Date());
  1930. contractTaskLogMapper.insert(c);
  1931. if (StringUtils.isNotBlank(ct.getTaskReceiver())&&!ct.getTaskReceiver().equals(ab.getId())) {
  1932. c=new ContractTaskLog();
  1933. c.setId(UUID.randomUUID().toString());
  1934. c.setContractTaskId(ct.getId());
  1935. c.setTaskReceiver(ct.getTaskReceiver());
  1936. c.setTaskAllocator(ab.getId());
  1937. c.setCreateTime(new Date());
  1938. contractTaskLogMapper.insert(c);
  1939. }
  1940. }
  1941. }
  1942. @Override
  1943. public boolean checkCustomerInformation(String uid) {
  1944. int i=userMapper.checkCustomerInformation(uid);
  1945. if (i<1) {
  1946. return true;
  1947. }
  1948. return false;
  1949. }
  1950. }