OrderServiceImpl.java 99 KB

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