OrderServiceImpl.java 90 KB

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