OrderServiceImpl.java 99 KB

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