OrderNewServiceImpl.java 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818
  1. package com.goafanti.order.service.impl;
  2. import java.io.IOException;
  3. import java.io.UnsupportedEncodingException;
  4. import java.math.BigDecimal;
  5. import java.text.ParseException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Arrays;
  9. import java.util.Calendar;
  10. import java.util.Date;
  11. import java.util.HashMap;
  12. import java.util.List;
  13. import java.util.Map;
  14. import java.util.UUID;
  15. import javax.mail.MessagingException;
  16. import com.goafanti.admin.service.DepartmentService;
  17. import com.goafanti.common.bo.Result;
  18. import com.goafanti.common.dao.*;
  19. import com.goafanti.common.model.*;
  20. import com.goafanti.common.utils.excel.NewExcelUtil;
  21. import com.goafanti.order.bo.*;
  22. import com.goafanti.order.enums.*;
  23. import com.goafanti.order.service.OrderProjectService;
  24. import com.goafanti.organization.bo.*;
  25. import com.goafanti.common.utils.StringUtils;
  26. import groovy.transform.Synchronized;
  27. import org.slf4j.Logger;
  28. import org.slf4j.LoggerFactory;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.beans.factory.annotation.Value;
  31. import org.springframework.cache.annotation.Cacheable;
  32. import org.springframework.scheduling.annotation.EnableAsync;
  33. import org.springframework.stereotype.Service;
  34. import com.alibaba.fastjson.JSON;
  35. import com.goafanti.admin.bo.AdminListBo;
  36. import com.goafanti.common.bo.EmailBo;
  37. import com.goafanti.common.bo.Error;
  38. import com.goafanti.common.bo.OrderOperator;
  39. import com.goafanti.common.constant.AFTConstants;
  40. import com.goafanti.common.constant.ErrorConstants;
  41. import com.goafanti.common.enums.NoticeStatus;
  42. import com.goafanti.common.enums.OfficialPatentType;
  43. import com.goafanti.common.enums.OrderLogProcess;
  44. import com.goafanti.common.error.BusinessException;
  45. import com.goafanti.common.utils.AsyncUtils;
  46. import com.goafanti.common.utils.LoggerUtils;
  47. import com.goafanti.common.utils.SendEmailUtil;
  48. import com.goafanti.core.mybatis.BaseMybatisDao;
  49. import com.goafanti.core.mybatis.JDBCIdGenerator;
  50. import com.goafanti.core.mybatis.page.Pagination;
  51. import com.goafanti.core.shiro.token.TokenManager;
  52. import com.goafanti.customer.bo.LockingReleaseBo;
  53. import com.goafanti.order.service.OrderNewService;
  54. import com.goafanti.order.service.OrderService;
  55. import com.goafanti.patent.service.PatentNewService;
  56. import org.springframework.transaction.annotation.Transactional;
  57. @Service
  58. @EnableAsync
  59. public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> implements OrderNewService {
  60. @Autowired
  61. private TOrderNewMapper tOrderNewMapper;
  62. @Autowired
  63. private TOrderTaskMapper tOrderTaskMapper;
  64. @Autowired
  65. private NewOrderDunMapper newOrderDunMapper;
  66. @Autowired
  67. private TOrderDunMapper tOrderDunMapper;
  68. @Autowired
  69. private TDunLogMapper tDunLogMapper;
  70. @Autowired
  71. private TOrderMidMapper tOrderMidMapper;
  72. @Autowired
  73. private TOrderRefundMapper tOrderRefundMapper;
  74. @Autowired
  75. private TOrderBackMapper tOrderBackMapper;
  76. @Autowired
  77. private OrganizationContactBookMapper organizationContactBookMapper;
  78. @Autowired
  79. private DepartmentMapper departmentMapper ;
  80. @Autowired
  81. private JDBCIdGenerator idGenerator;
  82. @Autowired
  83. private AdminMapper adminMapper;
  84. @Autowired
  85. private TOrderLogMapper tOrderLogMapper;
  86. @Autowired
  87. private OrderService orderService;
  88. @Autowired
  89. private IdleContractNoMapper idleContractNoMapper;
  90. @Autowired
  91. private TOrderOutsourceMapper tOrderOutsourceMapper;
  92. @Autowired
  93. private UserLockReleaseMapper userLockReleaseMapper;
  94. @Autowired
  95. private TArrearsDunMapper tArrearsDunMapper;
  96. @Autowired
  97. private TOrderExtendMapper tOrderExtendMapper;
  98. @Autowired
  99. private UserMapper userMapper;
  100. @Autowired
  101. private OutsourceLogMapper outsourceLogMapper;
  102. @Autowired
  103. private PaymentNodeMapper paymentNodeMapper;
  104. @Autowired
  105. private ThirdPartyCompanyMapper thirdPartyCompanyMapper;
  106. @Autowired
  107. private TTaskMidMapper tTaskMidMapper;
  108. @Autowired
  109. private UserMidMapper userMidMapper;
  110. @Autowired
  111. private ProjcetCheckLogMapper projcetCheckLogMapper;
  112. @Autowired
  113. private OfficialFeePriceMapper officialFeePriceMapper;
  114. @Autowired
  115. private PatentNewService patentNewService;
  116. @Autowired
  117. private AsyncUtils asyncUtils;
  118. @Autowired
  119. private PushOrderService pushOrderService;
  120. @Autowired
  121. private BusinessProjectMapper businessProjectMapper;
  122. @Autowired
  123. private BusinessCategoryMapper businessCategoryMapper;
  124. @Autowired
  125. private OrderProjectService orderProjectService;
  126. @Autowired
  127. private DepartmentService departmentService;
  128. @Value(value = "${upload.path}")
  129. private String uploadPath = null;
  130. Logger logger = LoggerFactory.getLogger(OrderNewServiceImpl.class);
  131. @Override
  132. public int createServiceOrder(String uid,Integer userType, Integer orderType,Integer salesType,String channelId,String other) {
  133. BigDecimal initial = new BigDecimal(0);
  134. TOrderNew t=new TOrderNew();
  135. Date date = new Date();
  136. String orderNo=idGenerator.generateId().toString();
  137. t.setOrderNo(orderNo);
  138. t.setOrderType(orderType);
  139. t.setUserType(userType);
  140. t.setOrderStatus(OrderNewState.DQD.getCode());
  141. t.setFirstAmount(initial);
  142. t.setTotalAmount(initial);
  143. t.setSettlementAmount(initial);
  144. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_FIRST_BALANCE.getCode());
  145. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  146. t.setProjectStatus(NewProjectStatus.WQD.getCode());
  147. t.setApproval(ApprovalNewState.FTP.getCode());
  148. //0-正常,1-作废,2-锁定
  149. t.setDeleteSign(0);
  150. t.setSalesmanId(TokenManager.getAdminId());
  151. t.setCreater(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  152. t.setOrderDep(adminMapper.selectByPrimaryKey(TokenManager.getAdminId()).getDepartmentId());
  153. t.setCreateTime(date);
  154. t.setUpdateTime(date);
  155. t.setBuyerId(uid);
  156. t.setSalesType(salesType);
  157. if (salesType.equals(SalesTypes.qd.getCode()) &&channelId!=null){
  158. t.setChannelId(channelId);
  159. }
  160. if (other!=null ) {
  161. t.setOther(other);
  162. }
  163. User u=userMapper.selectByPrimaryKey(uid);
  164. if(u.getShareType()!=null&&u.getShareType()==2){
  165. t.setNewUser(1);
  166. }else {
  167. t.setNewUser(0);
  168. }
  169. TOrderExtend te=new TOrderExtend();
  170. te.setOrderNo(orderNo);
  171. te.setServiceStatus(0);
  172. tOrderExtendMapper.insertSelective(te);
  173. return tOrderNewMapper.insertSelective(t);
  174. }
  175. @Override
  176. public int addOrderTask(TOrderTask t) {
  177. TOrderNew order=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  178. checkOrder(order,t);
  179. t.setTaskStatus(TaskState.WFP.getCode());
  180. t.setProjectStatus(NewProjectStatus.WQD.getCode());
  181. if(t.getCommodityPrice()!=null) {
  182. order.setTotalAmount(order.getTotalAmount());
  183. }
  184. String str=tOrderTaskMapper.selectByidGetCname(t.getCommodityId());
  185. t.setCname(str);
  186. tOrderTaskMapper.insertSelective(t);
  187. TTaskMid tm=new TTaskMid();
  188. tm.setTid(t.getId());
  189. //判断这个项目是不是高新复审
  190. int highNewRetrial=0;
  191. BusinessProject b=businessProjectMapper.selectByPrimaryKey(t.getCommodityId());
  192. if (b.getType()==5){
  193. int i=tOrderTaskMapper.getHighNewRetrial(order.getOrderNo());
  194. if (i>0) {
  195. highNewRetrial =1;
  196. }
  197. BusinessCategory bc =businessCategoryMapper.selectByPrimaryKey(b.getCid());
  198. if (bc !=null && bc.getSort().equals(6)){
  199. TOrderMid tom=new TOrderMid();
  200. tom.setOrderNo(t.getOrderNo());
  201. tom.setProjectType(1);
  202. tOrderMidMapper.updateByOrderNo(tom);
  203. }
  204. }
  205. tm.setHighNewRetrial(highNewRetrial);
  206. TTaskMid dtails = tTaskMidMapper.getDtails(t.getId());
  207. TTaskMid tTaskMid = new TTaskMid(t.getId(), new BigDecimal(0));
  208. tTaskMid.setDispatchProvince(dtails.getDispatchProvince());
  209. tTaskMid.setDutyDep(dtails.getDutyDep());
  210. tTaskMidMapper.insertSelective(tm);
  211. return 1;
  212. }
  213. @Override
  214. public int addMemberProject(TOrderTask t){
  215. TOrderNewBo tn = tOrderNewMapper.getSaleIdByOno(t.getOrderNo());
  216. addOrderTask( t);
  217. orderProjectService.addMemberLog(t.getId(),0,"新增会员项目");
  218. addNoticMember(NoticeStatus.MENBER_START.getCode(),tn,null,0);
  219. return 1;
  220. }
  221. public void checkOrder(TOrderNew order,TOrderTask t){
  222. if(order == null) {
  223. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  224. }
  225. if(order.getDeleteSign().equals(ActiveState.ABOLISH.getCode()) ) {
  226. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, order.getOrderNo(),""));
  227. }
  228. if(order.getDeleteSign().equals( ActiveState.LOCKING.getCode())) {
  229. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, order.getOrderNo(),""));
  230. }
  231. List<LockingReleaseBo> list=userLockReleaseMapper.checkTask(order.getBuyerId(),t.getCommodityId());
  232. if (list.size()>0) {
  233. for (LockingReleaseBo lockingReleaseBo : list) {
  234. if (!lockingReleaseBo.getAid().equals(order.getSalesmanId())) {
  235. throw new BusinessException(new Error( "该业务已经被其他人锁定","该业务已经被其他人锁定"));
  236. }
  237. }
  238. }
  239. }
  240. @Override
  241. public int updateOrderTask(TOrderTask t) {
  242. TOrderTask use=tOrderTaskMapper.selectByPrimaryKey(t.getId());
  243. boolean flag=false;
  244. if(use.getCheckStatus()==1) {
  245. t.setCheckStatus(2);
  246. ProjcetCheckLog log=new ProjcetCheckLog();
  247. log.setTid(t.getId());
  248. log.setAid(TokenManager.getAdminId());
  249. StringBuffer str=new StringBuffer();
  250. if ((t.getOfficialCost()==null&&t.getCostReduction()==null&&t.getPatentType()==null)||
  251. (t.getOfficialCost().equals(use.getOfficialCost()) && t.getPatentType().equals(use.getPatentType()) && t.getCostReduction().equals(use.getCostReduction()))) {
  252. str.append("未做任何修改。");
  253. }else {
  254. str.append("修改了:");
  255. if (t.getPatentType()!=null&& !use.getPatentType().equals(t.getPatentType())) {
  256. str.append("官费类型");
  257. }
  258. if (t.getOfficialCost()!=null&& !use.getOfficialCost().equals(t.getOfficialCost())) {
  259. str.append(",").append("有无官费");
  260. flag=true;
  261. }
  262. if (t.getCostReduction()!=null&& !use.getCostReduction().equals(t.getCostReduction())) {
  263. str.append(",").append("有无费减");
  264. flag=true;
  265. }
  266. str.append("。");
  267. }
  268. log.setRemarks(str.toString());
  269. log.setStatus(1);
  270. OrderOperator oo=tOrderTaskMapper.selectAidByParam(t.getId());
  271. if (oo!=null&&oo.getOrderNo()!=null&&oo.getSalesmanId()!=null) {
  272. Notice n =new Notice();
  273. String str2=String.format("[%s]完成了专利核对,客户名称[%s]订单编号[%s]项目编号[%s]。", oo.getSalesmanName(),oo.getBuyerName(),oo.getOrderNo(),oo.getTid());
  274. n.setId(UUID.randomUUID().toString());
  275. n.setAid(oo.getTechId());
  276. n.setNoticeType(NoticeStatus.ITEM_CHECK_END.getCode());
  277. n.setContent(str2);
  278. n.setReaded(0);//未读
  279. asyncUtils.addNoticAndEmail(n);
  280. }
  281. projcetCheckLogMapper.insertSelective(log);
  282. }
  283. int i=tOrderTaskMapper.updateByPrimaryKeySelective(t);
  284. if (flag) {
  285. patentNewService.updateCostReduction(t.getId());
  286. }
  287. return i;
  288. }
  289. @Override
  290. public int delectOrderTask(Integer id) {
  291. //连带催款一起删除
  292. newOrderDunMapper.deleteByTid(id);
  293. return tOrderTaskMapper.deleteByPrimaryKey(id);
  294. }
  295. @Override
  296. public List<TOrderTaskBo> selectOrderTask(String orderNo,Integer type) {
  297. if (TokenManager.hasRole(AFTConstants.SALESMAN)||TokenManager.hasRole(AFTConstants.SALESMAN_MANAGER)){
  298. if (type==null) {
  299. type=0;
  300. }
  301. }else {
  302. if (type==null) {
  303. type=1;
  304. }
  305. }
  306. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo,type);
  307. for (TOrderTaskBo t : list) {
  308. if (TokenManager.hasRole(AFTConstants.SALESMAN)&&TokenManager.hasRole(AFTConstants.TECH)) {
  309. //如果是双角色不做处理。
  310. } else if (TokenManager.hasRole(AFTConstants.SALESMAN)) {
  311. t.setOutsourceName("****");
  312. t.setOutsourcePrice(new BigDecimal(0));
  313. t.setDeclareUser("****");
  314. t.setDeclarePwd("****");
  315. t.setCertificateNumber("****");
  316. }else if (TokenManager.hasRole(AFTConstants.TECH)) {
  317. //设置隐藏金额
  318. t.setCommodityPrice(new BigDecimal(-1));
  319. }
  320. if(t.getPatentType()!=null) {
  321. t.setPatentTypeName(OfficialPatentType.getValueByCode(t.getPatentType()));
  322. }
  323. }
  324. return list;
  325. }
  326. @Override
  327. public int updateServiceOrder(TOrderNewWithBLOBs t, Integer isSubmit) {
  328. TOrderNew t2=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  329. //判断手机号码是否存在
  330. if (StringUtils.isNotBlank(t.getContacts())&&StringUtils.isNotBlank(t.getContactMobile())&&
  331. organizationContactBookMapper.checkContacts(t2.getBuyerId(), t2.getContactMobile(),TokenManager.getAdminId()==null?"1":TokenManager.getAdminId() )>0) {
  332. OrganizationContactBook contactBook=new OrganizationContactBook();
  333. contactBook.setId(UUID.randomUUID().toString());
  334. contactBook.setAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  335. contactBook.setUid(t2.getBuyerId());
  336. contactBook.setName(t.getContacts());
  337. contactBook.setMobile(t.getContactMobile());
  338. organizationContactBookMapper.insertSelective(contactBook);
  339. }
  340. if (StringUtils.isBlank(t.getOrderDep())) {
  341. t.setOrderDep(adminMapper.selectByPrimaryKey(TokenManager.getAdminId()).getDepartmentId());
  342. }
  343. //订单提交
  344. if (isSubmit==1) {
  345. if(t2.getProcessStatus()<ProcessStatus.YPYXGLY.getCode()) {
  346. t.setOrderStatus(OrderNewState.QDDS.getCode());
  347. t.setProcessStatus(ProcessStatus.YPYXGLY.getCode());
  348. }else {
  349. t.setOrderStatus(OrderNewState.QDSHTG.getCode());
  350. }
  351. if (t2.getApproval().equals(ApprovalNewState.BH.getCode())){
  352. t.setApproval(ApprovalNewState.DSH.getCode());
  353. }
  354. //生成流转
  355. TOrderLog tl=new TOrderLog();
  356. tl.setOrderNo(t.getOrderNo());
  357. tl.setProcess(OrderLogProcess.TJ.getCode());
  358. tl.setAid(TokenManager.getAdminId());
  359. addOrderLog(tl,null);
  360. if (StringUtils.isBlank(t2.getContractNo())) {
  361. //没有合同编号则生成
  362. createContractNo(t);
  363. }else if(!t.getOrderDep().equals(t2.getOrderDep())) {
  364. contractNoReplace(t.getOrderNo(), t2.getContractNo(),t2.getOrderDep());
  365. createContractNo(t);
  366. }
  367. //修改订单中间表信息
  368. t.setBuyerId(t2.getBuyerId());
  369. updateOrderMid(t);
  370. List<String> aids = new ArrayList<>();
  371. Integer type;
  372. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  373. aids.addAll(adminMapper.listNameByDepAndName(a.getDepartmentId(), "营销管理员"));
  374. type=NoticeStatus.ORDER_START.getCode();
  375. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  376. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),t.getApproval());
  377. }
  378. if (t2.getApproval().equals(ApprovalNewState.BH.getCode()) ||
  379. t2.getOrderStatus().equals(OrderNewState.QDSHJJ.getCode()) ||
  380. t2.getOrderStatus().equals(OrderNewState.YBH.getCode())) {
  381. t.setCreateTime(new Date());
  382. tOrderBackMapper.updateByOrderNoAndBackStatus(t.getOrderNo());
  383. }
  384. // 0 相等
  385. // -1 小于
  386. // 1 大于
  387. //liquidation_status 清算状态 0-首付待付请,1-尾款待付清,2-已付请,3-部分退款,4-全部退款
  388. //settlement_amount 已付 total_amount 总价格 first_amount首付
  389. if(!t2.getLiquidationStatus().equals(LiquidationNewState.FULL_REFUND.getCode())) {
  390. if(t2.getSettlementAmount().compareTo(t.getTotalAmount()) == 0){//如果已付等于总价
  391. t.setLiquidationStatus(LiquidationNewState.ALREADY_PAY.getCode());
  392. }else if(t2.getSettlementAmount().compareTo(t.getFirstAmount()) >= 0){//如果大于等于首付
  393. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_LAST_BALANCE.getCode());
  394. } else if(t2.getSettlementAmount().compareTo(t.getFirstAmount()) < 0){//如果小于首付
  395. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_FIRST_BALANCE.getCode());
  396. }
  397. }
  398. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  399. }
  400. private void updateOrderMid(TOrderNew t) {
  401. TOrderMid tm=tOrderMidMapper.selectByOrderNo(t.getOrderNo());
  402. Admin admin=adminMapper.selectFinanceAdminByOrderDep(t.getOrderDep());
  403. Admin a=adminMapper.selectAllByid(TokenManager.getAdminId());
  404. User u=userMapper.selectByPrimaryKey(t.getBuyerId());
  405. if (tm==null) {
  406. tm=new TOrderMid();
  407. }
  408. tm.setOrderNo(t.getOrderNo());
  409. if (u!=null&&u.getNickname()!=null) {
  410. tm.setBuyerName(u.getNickname());
  411. }
  412. if (admin!=null&&admin.getName()!=null) {
  413. tm.setFinanceId(admin.getId());
  414. tm.setFinanceName(admin.getName());
  415. }
  416. if(a.getId()!=null&&a.getName()!=null) {
  417. tm.setSalesmanId(a.getId());
  418. tm.setSalesmanName(a.getName());
  419. }
  420. //判断订单是否为会员订单
  421. int i =tOrderMidMapper.judgeProjectType(t.getOrderNo());
  422. UserMid um=new UserMid();
  423. boolean flag=false;
  424. um.setUid(t.getBuyerId());
  425. if (i>0){
  426. tm.setProjectType(1);
  427. um.setMember(1);
  428. flag=true;
  429. }else{
  430. tm.setProjectType(0);
  431. }
  432. //如果订单金额超过10W标记为大客户
  433. if(t.getTotalAmount().compareTo(new BigDecimal("10"))>=0) {
  434. um.setUid(t.getBuyerId());
  435. um.setAid(t.getSalesmanId());
  436. um.setBigCustomer(1);
  437. flag=true;
  438. }
  439. if (flag){
  440. int x=userMidMapper.updateByUid(um);
  441. if (x==0) {
  442. um.setAid(t.getSalesmanId());
  443. userMidMapper.insertSelective(um);
  444. }
  445. }
  446. tm.setDepName(tOrderMidMapper.selectDepNameByDepid(t.getOrderDep()));
  447. if (tm.getId()!=null) {
  448. tOrderMidMapper.updateByPrimaryKeySelective(tm);
  449. }else {
  450. tOrderMidMapper.insertSelective(tm);
  451. }
  452. }
  453. /**
  454. * 新建合同编号,优先获取闲置合同编号,否则按年份生成编号
  455. */
  456. private void createContractNo(TOrderNew t) {
  457. //根据订单部门或许合同编号前缀
  458. Department dep=departmentMapper.selectByPrimaryKey(t.getOrderDep());
  459. //获取日期年份
  460. Calendar c=Calendar.getInstance();
  461. int y=c.get(Calendar.YEAR);
  462. if (dep==null||StringUtils.isBlank(dep.getAbbreviation())) {
  463. throw new BusinessException(new Error( "该部门缩写不存在","该部门缩写不存在"));
  464. }
  465. IdleContractNo i=idleContractNoMapper.selectByAbbreviation(dep.getAbbreviation(),y);
  466. if (i!=null&&i.getContractNo()!=null) {
  467. t.setContractNo(i.getContractNo());
  468. idleContractNoMapper.deleteByPrimaryKey(i.getId());
  469. }else {
  470. //根据前缀查询最大编号
  471. String max=departmentMapper.getMaxAbbreviation(dep.getAbbreviation()+"-");
  472. String sno=null;
  473. if (StringUtils.isBlank(max)||max.length()<13) {
  474. String cn=""+dep.getAbbreviation()+"-"+y+"0001";
  475. cn=iterationNo(cn,dep.getAbbreviation(),y,1);
  476. t.setContractNo(cn);
  477. }else {
  478. int ty=Integer.parseInt(max.substring(max.indexOf("-")+1, max.length()-4));
  479. int no=Integer.parseInt(max.substring(max.length()-4, max.length()));
  480. //得出字符串
  481. sno = countNo(dep.getAbbreviation(), sno, ty, no);
  482. //迭代得出最后编码
  483. sno=iterationNo(sno,dep.getAbbreviation(),ty,no);
  484. //年份小于等于则获取最大值加1,大于则获取最新年份
  485. if (y<=ty) {
  486. t.setContractNo(sno);
  487. }else {
  488. t.setContractNo(""+dep.getAbbreviation()+"-"+y+"0001");
  489. }
  490. }
  491. }
  492. }
  493. private String iterationNo(String sno ,Object mp, int ty, int no) {
  494. if (tOrderNewMapper.checkContractNo(sno)>0) {
  495. int i=Integer.parseInt(sno.substring(sno.indexOf("-")+5, sno.length()));
  496. sno=countNo(mp, sno, ty, i);
  497. sno=iterationNo(sno,mp,ty,i);
  498. }
  499. return sno;
  500. }
  501. private String countNo(Object object, String sno, int ty, int no) {
  502. no++;
  503. if (no>0&&no<10) {
  504. sno=object+"-"+ty+"000"+no;
  505. }else if (no>9&&no<100) {
  506. sno=object+"-"+ty+"00"+no;
  507. } else if (no>99&&no<1000) {
  508. sno=object+"-"+ty+"0"+no;
  509. } else if(no>1000){
  510. sno=object+"-"+ty+no;
  511. }
  512. return sno;
  513. }
  514. public void addOrderLog(TOrderLog tl, String reason) {
  515. tl.setAid(TokenManager.getAdminId());
  516. if(reason!=null) {
  517. tl.setRemarks(reason);
  518. }
  519. tOrderLogMapper.insertSelective(tl);
  520. }
  521. @Override
  522. public TOrderNewBo getOrderNewDetail(String orderNo) {
  523. TOrderNewBo tOrder= tOrderNewMapper.getOrderNewDetail(orderNo);
  524. String url=pushOrderService.processStatusConstant(tOrder.getContractPictureUrl(),tOrder.getSalesmanId(),tOrder.getProcessStatus());
  525. tOrder.setContractPictureUrl(url);
  526. return tOrder;
  527. }
  528. @Override
  529. public int createOrderDun(String orderDun,String orderNo) {
  530. List<TOrderDun> l= JSON.parseArray(orderDun, TOrderDun.class);
  531. List<TOrderDun> l2=tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
  532. if (l!=null&&!l.isEmpty()) {
  533. for (TOrderDun t : l) {
  534. if (t.getId()==null||t.getId().equals("")) {//Id为空新增
  535. if (tOrderDunMapper.checkOrderDun(t.getDunSubject(),orderNo)>0) {
  536. throw new BusinessException(new Error( "该截点已经存在","该截点已经存在"));
  537. }
  538. t.setId(UUID.randomUUID().toString());
  539. t.setDunBy(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  540. t.setDunStatus(0);//未启动
  541. tOrderDunMapper.insertSelective(t);
  542. }else {
  543. tOrderDunMapper.updateByPrimaryKeySelective(t);
  544. }
  545. }
  546. }
  547. boolean flag=true;
  548. for (TOrderDun t2 : l2) {
  549. if (l.isEmpty()) {
  550. tOrderDunMapper.deleteByPrimaryKey(t2.getId());
  551. }else {
  552. for (TOrderDun t : l) {
  553. if (t2.getId().equals(t.getId())) {//查询集合与返回集合比较查出删除项
  554. flag=false;
  555. }
  556. }
  557. if (t2.getId()!=null&&flag) {
  558. tOrderDunMapper.deleteByPrimaryKey(t2.getId());
  559. }
  560. flag=true;
  561. }
  562. }
  563. return 1;
  564. }
  565. @SuppressWarnings("unchecked")
  566. @Override
  567. public Pagination<TOrderNewBo> orderNewList(String aid,String name, String orderNo, String starTime, String endTime,Integer specially,Integer approval,
  568. Integer distribution,String depId,String contractNo,Integer outsource,Integer liquidationStatus, Integer amountStatus,
  569. String contractStart, String contractEnd,String uid,Integer projectType,Integer processStatus, Integer pageNo, Integer pageSize) {
  570. Map<String, Object> params = new HashMap<>();
  571. if (specially!=null&&(specially==0||specially==1||specially==2||specially==4||specially==5||specially==7)) {
  572. //0 个人 1 营销员管理 2 驳回 3 特批 4 咨询师管理 5部门订单查询
  573. if (specially!=3&&specially!=4) {
  574. if (aid ==null){
  575. params.put("aid", TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  576. }else{
  577. params.put("aid", aid);
  578. }
  579. }
  580. //(咨询师管理列表 0 未分配 1部分 2全部)
  581. if(specially==4) {
  582. params.put("distribution",distribution);
  583. }
  584. }else if(specially==8){
  585. if (StringUtils.isNotBlank(uid)) {
  586. params.put("uid", uid);
  587. }
  588. }else if (specially==9){
  589. if (StringUtils.isNotBlank(aid)) {
  590. params.put("aid", aid);
  591. }
  592. }
  593. params.put("specially",specially);
  594. if (StringUtils.isNotBlank(name)) {
  595. params.put("name", name);
  596. }
  597. // 计算出所有本部门及所属部门的ID
  598. List<Department> deps = new ArrayList<>();
  599. if(specially==1||specially==5) {
  600. if (depId!=null){
  601. deps=departmentService.selectSubDeps(depId,0,1);
  602. }else {
  603. deps=departmentService.selectMyDeps();
  604. }
  605. }else {
  606. if (StringUtils.isNotBlank(depId)) {
  607. deps=departmentService.getLowerDep(depId);
  608. }
  609. }
  610. if (!deps.isEmpty())params.put("deps",deps);
  611. if (StringUtils.isNotBlank(contractNo)) {
  612. params.put("contractNo", contractNo);
  613. }
  614. if (null!=liquidationStatus) {
  615. params.put("liquidationStatus", liquidationStatus);
  616. if (null !=approval) {
  617. params.put("approval", approval);
  618. }
  619. if(null != amountStatus) {
  620. params.put("amountStatus", amountStatus);
  621. }
  622. if (StringUtils.isNotBlank(orderNo)) {
  623. params.put("orderNo", orderNo);
  624. }
  625. if (StringUtils.isNotBlank(starTime)) {
  626. params.put("starTime", starTime);
  627. }
  628. if (StringUtils.isNotBlank(endTime)) {
  629. params.put("endTime", endTime+" 23:59:59");
  630. }
  631. if (StringUtils.isNotBlank(contractStart)) {
  632. params.put("contractStart", contractStart);
  633. }
  634. if (StringUtils.isNotBlank(contractEnd)) {
  635. params.put("contractEnd", contractEnd+" 23:59:59");
  636. }
  637. if(null != projectType) {
  638. params.put("projectType",projectType);
  639. }
  640. if(null != processStatus) {
  641. params.put("processStatus",processStatus);
  642. }
  643. } else {
  644. if (null !=approval) {
  645. params.put("approval", approval);
  646. }
  647. if(null != amountStatus) {
  648. params.put("amountStatus", amountStatus);
  649. }
  650. if (StringUtils.isNotBlank(orderNo)) {
  651. params.put("orderNo", orderNo);
  652. }
  653. if (StringUtils.isNotBlank(starTime)) {
  654. params.put("starTime", starTime);
  655. }
  656. if (StringUtils.isNotBlank(endTime)) {
  657. params.put("endTime", endTime+" 23:59:59");
  658. }
  659. if (StringUtils.isNotBlank(contractStart)) {
  660. params.put("contractStart", contractStart);
  661. }
  662. if (StringUtils.isNotBlank(contractEnd)) {
  663. params.put("contractEnd", contractEnd+" 23:59:59");
  664. }
  665. if(null != projectType) {
  666. params.put("projectType",projectType);
  667. }
  668. if(null != processStatus) {
  669. params.put("processStatus",processStatus);
  670. }
  671. }
  672. params.put("outsource", outsource);
  673. Pagination<TOrderNewBo> p = (Pagination<TOrderNewBo>)findPage("selectOrderNewListByPage", "selectOrderNewListCount", params, pageNo, pageSize);
  674. return p;
  675. }
  676. @Override
  677. public Pagination<TOrderNewBo> statisticsOrderList(InputStatisticsOrderList in) {
  678. Map<String, Object> params = new HashMap<String, Object>();
  679. if (in.getProvince()!=null) {
  680. params.put("province",in.getProvince());
  681. if (in.getSalesType()!=null) {
  682. params.put("salesType",in.getSalesType());
  683. }
  684. if (in.getOrderNo()!=null) {
  685. params.put("orderNo",in.getOrderNo());
  686. }
  687. if (in.getName()!=null) {
  688. params.put("name",in.getName());
  689. }
  690. if (in.getContractNo()!=null) {
  691. params.put("contractNo",in.getContractNo());
  692. }
  693. if (in.getLiquidationStatus()!=null) {
  694. params.put("liquidationStatus",in.getLiquidationStatus());
  695. }
  696. if (in.getApproval()!=null) {
  697. params.put("approval",in.getApproval());
  698. }
  699. if (in.getAmountStatus()!=null) {
  700. params.put("amountStatus",in.getAmountStatus());
  701. }
  702. if (in.getStartDate()!=null) {
  703. params.put("startDate",in.getStartDate());
  704. }
  705. if (in.getEndDate()!=null) {
  706. params.put("endDate",in.getEndDate()+" 23:59:59");
  707. }
  708. } else {
  709. if (in.getSalesType()!=null) {
  710. params.put("salesType",in.getSalesType());
  711. }
  712. if (in.getOrderNo()!=null) {
  713. params.put("orderNo",in.getOrderNo());
  714. }
  715. if (in.getName()!=null) {
  716. params.put("name",in.getName());
  717. }
  718. if (in.getContractNo()!=null) {
  719. params.put("contractNo",in.getContractNo());
  720. }
  721. if (in.getLiquidationStatus()!=null) {
  722. params.put("liquidationStatus",in.getLiquidationStatus());
  723. }
  724. if (in.getApproval()!=null) {
  725. params.put("approval",in.getApproval());
  726. }
  727. if (in.getAmountStatus()!=null) {
  728. params.put("amountStatus",in.getAmountStatus());
  729. }
  730. if (in.getStartDate()!=null) {
  731. params.put("startDate",in.getStartDate());
  732. }
  733. if (in.getEndDate()!=null) {
  734. params.put("endDate",in.getEndDate()+" 23:59:59");
  735. }
  736. }
  737. if (in.getDepId()!=null) {
  738. params.put("depId",in.getDepId());
  739. }
  740. Pagination<TOrderNewBo> p = (Pagination<TOrderNewBo>)findPage("selectstatisticsOrderListPage",
  741. "selectstatisticsOrderListCount", params, in.getPageNo(), in.getPageSize());
  742. return p;
  743. }
  744. @Override
  745. public int updateSalesType(TOrderNew in) {
  746. return tOrderNewMapper.updateByPrimaryKeySelective(in);
  747. }
  748. @Override
  749. public int updateOrderNew(String orderNo, Integer orderStatus,String reason,Integer outsource, TOrderOutsource o) {
  750. TOrderNew t= new TOrderNew();
  751. TOrderNew t2= checkDeleteSign(orderNo);
  752. t.setOrderNo(orderNo);
  753. List<String> aids = new ArrayList<>();
  754. Integer type=null;
  755. TOrderLog tl=new TOrderLog();
  756. tl.setAid(TokenManager.getAdminId());
  757. if (orderStatus.equals(OrderNewState.QDSHTG.getCode())) {
  758. t.setOutsource(outsource);
  759. //外包单给外包审核员 否则给财务专员
  760. if(outsource==0) {
  761. t.setProcessStatus(ProcessStatus.YPCWZY.getCode());
  762. //如果是转的暂时不删除外包信息
  763. aids.add(departmentMapper.selectByPrimaryKey(t2.getOrderDep()).getFinanceId());
  764. } else if(outsource==1) {
  765. for (Admin admin : adminMapper.getAdminRoleList("外包审核员")) {
  766. aids.add(admin.getId());
  767. }
  768. t.setProcessStatus(ProcessStatus.YPWBSH.getCode());
  769. tl.setOrderNo(orderNo);
  770. tl.setProcess(OrderLogProcess.FQWB.getCode());
  771. addOrderLog(tl,reason);
  772. }
  773. type=NoticeStatus.ORDER_YES.getCode();
  774. tl.setOrderNo(orderNo);
  775. tl.setProcess(OrderLogProcess.SH.getCode());
  776. //增加日志
  777. addOrderLog(tl,reason);
  778. //非特批增加催款信息
  779. //外包
  780. if(outsource==1) {
  781. o.setRefundStatus(0);
  782. if(o.getId()==null) {
  783. o.setCreateTime(new Date());
  784. tOrderOutsourceMapper.insertSelective(o);
  785. }else {
  786. tOrderOutsourceMapper.updateByPrimaryKeySelective(o);
  787. }
  788. //修改项目为外包项目
  789. tOrderTaskMapper.updateByOutsourceToOrderNo(orderNo,1);
  790. }
  791. // pushOrderDun(t2);
  792. }else if (orderStatus.equals(OrderNewState.QDSHJJ.getCode())) {//如果不通过新增驳回
  793. if (outsource==0) {//非外包
  794. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  795. addBackOrder(orderNo, reason);
  796. }
  797. aids.add(t2.getSalesmanId());
  798. type=NoticeStatus.ORDER_NO.getCode();
  799. }
  800. t.setOrderStatus(orderStatus);
  801. tOrderNewMapper.updateByPrimaryKeySelective(t);
  802. if (aids.isEmpty()) {
  803. throw new BusinessException(new Error( "邮件发送失败,对方设置邮箱错误","邮件发送失败,对方设置邮箱错误"));
  804. }
  805. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  806. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),t2.getApproval());
  807. return 1;
  808. }
  809. /**
  810. * 订单分配触发
  811. * @param orderNo
  812. */
  813. @Override
  814. public void pushOrderDun(String orderNo) {
  815. TOrderNew b=tOrderNewMapper.selectByPrimaryKey(orderNo);
  816. if(b.getApproval()==0){
  817. Date date = new Date();
  818. List<OutNewOrderDunBo> list=newOrderDunMapper.selectListNewOrderDun(orderNo,0);
  819. for (OutNewOrderDunBo o : list) {
  820. if (o.getDunType()==1) {
  821. o.setStatus(1);
  822. o.setStartTime(date);
  823. newOrderDunMapper.updateByPrimaryKeySelective(o);
  824. //催款统计算
  825. TOrderMid tm = pushOrderMidDun(orderNo, b.getSettlementAmount(), date, o);
  826. TArrearsDun t=new TArrearsDun();
  827. t.setOrderArrears(tm.getOrderArrears());
  828. t.setOrderReceivables(tm.getOrderReceivables());
  829. if (tArrearsDunMapper.checkOrderNo(orderNo,null)<1) {
  830. t.setOrderNo(orderNo);
  831. tArrearsDunMapper.insertSelective(t);
  832. }else if(tArrearsDunMapper.checkOrderNo(orderNo,0)>0){
  833. Integer i=tArrearsDunMapper.selectByStatus(orderNo, 0);
  834. t.setId(i);
  835. tArrearsDunMapper.updateByPrimaryKeySelective(t);
  836. }
  837. addNewDunNoticAndSendEmail(orderNo,o);
  838. }
  839. }
  840. }
  841. }
  842. /**
  843. * NewProjectStatus.YXZ.getCode()
  844. * @param orderNo 订单编号
  845. * @param settlementAmount 已收金额
  846. * @param date 日期
  847. * @param o 订单催款类实对线
  848. * @return
  849. */
  850. @Override
  851. @Synchronized
  852. public TOrderMid pushOrderMidDun(String orderNo, BigDecimal settlementAmount, Date date, OutNewOrderDunBo o) {
  853. TOrderMid tm=tOrderMidMapper.selectByOrderNo(orderNo);
  854. // 代码看不出异常,但是计算会出现重复,则修改方案,每一次触发,则重新统计
  855. // tm.setOrderReceivables(tm.getOrderReceivables().add(o.getMoney()));
  856. List<OutNewOrderDunBo> list =newOrderDunMapper.selectListNewOrderDun(orderNo,1);
  857. BigDecimal cout=new BigDecimal(0);
  858. for (OutNewOrderDunBo bo : list) {
  859. cout=cout.add(bo.getMoney());
  860. }
  861. tm.setOrderReceivables(cout);
  862. BigDecimal sum=tm.getOrderReceivables().subtract(settlementAmount);
  863. //如果金额大于欠款修改欠款为0
  864. if (sum.compareTo(new BigDecimal(0))<0) {
  865. sum=new BigDecimal(0);
  866. }
  867. tm.setOrderArrears(sum);
  868. if (tm.getDunStartTime()==null) {
  869. tm.setDunStartTime(date);
  870. }
  871. tOrderMidMapper.updateByPrimaryKeySelective(tm);
  872. return tm;
  873. }
  874. @Override
  875. public void addNewDunNoticAndSendEmail(String orderNo, OutNewOrderDunBo o) {
  876. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  877. TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  878. addNotic(NoticeStatus.ORDER_DUN.getCode(), b,null);
  879. try {
  880. NewDunsendEmail(o.getOrderNo(),o.getId(), a, b);
  881. } catch (UnsupportedEncodingException | MessagingException e) {
  882. throw new BusinessException(new Error("邮件发送错误。"));
  883. }
  884. }
  885. @Override
  886. public void addTimingTaskNewDunNoticAndSendEmail(OutNewOrderDunBo o, Integer type) {
  887. AdminListBo a = adminMapper.getDeptNameByAid("1");
  888. TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  889. StringBuffer sb=new StringBuffer();
  890. Integer noticType=NoticeStatus.ORDER_DUN.getCode();
  891. if (type==1){
  892. noticType=NoticeStatus.MENBER_DUN.getCode();
  893. sb=sb.append("客户名称【").append(b.getUserName()).append("】催款截点将于").append(o.getCustomizeTimes()).append("进行催款,会员项目请提前2个月催款,以免延误会员派单");
  894. }else {
  895. sb=sb.append("客户名称【").append(b.getUserName()).append("】,按时触发应收款欠款,请按时催款,并及时增减项目,以免项目延期等问题。");
  896. }
  897. addNotic(noticType, b,sb.toString());
  898. try {
  899. NewDunsendEmail(o.getOrderNo(),o.getId(), a, b,noticType,sb.toString());
  900. } catch (UnsupportedEncodingException | MessagingException e) {
  901. throw new BusinessException(new Error("邮件发送错误。"));
  902. }
  903. }
  904. public void NewDunsendEmail(String orderNo,Integer dunId,AdminListBo a,TOrderNewBo b) throws UnsupportedEncodingException, MessagingException{
  905. NewDunsendEmail( orderNo, dunId, a, b, NoticeStatus.ORDER_DUN.getCode(),null);
  906. }
  907. public void NewDunsendEmail(String orderNo,Integer dunId,AdminListBo a,TOrderNewBo b,Integer noticType,String content) throws UnsupportedEncodingException, MessagingException{
  908. NewOrderDun ob=newOrderDunMapper.selectByPrimaryKey(dunId);
  909. AdminListBo a2 = adminMapper.getDeptNameByAid(b.getSalesmanId());
  910. String dunTypeName="";
  911. if(ob.getDunType()!=null&&ob.getProjectType()!=null&&ob.getDunType()!=0) {
  912. dunTypeName= NewOrderDunType.getValueByCode(Integer.valueOf(""+ob.getProjectType()+ob.getDunType()));
  913. }else if(ob.getDunType()!=null&&ob.getProjectType()!=null&&ob.getDunType()==0){
  914. dunTypeName= NewOrderDunType.getValueByCode(Integer.valueOf(""+ob.getProjectType()+ob.getDunType()))+ob.getCustomizeName();
  915. }
  916. //发送驳回邮件
  917. if(SendEmailUtil.isEmail(b.getEmail())) {
  918. EmailBo bo =new EmailBo();
  919. if (noticType.equals(NoticeStatus.MENBER_DUN.getCode())){
  920. bo = new EmailBo("会员提前催收", b.getEmail(), content);
  921. }else {
  922. bo = new EmailBo("催收通知", b.getEmail(), a.getDepartmentName(), a.getName(),
  923. "", orderNo,b.getContractNo(),new SimpleDateFormat("yyyy-MM-dd").format(ob.getCreateTime()),dunTypeName,a2.getName(),b.getUserName(),1,0);
  924. }
  925. if(StringUtils.isNotBlank(b.getEmail())) {
  926. asyncUtils.patentSend(bo);
  927. }
  928. }
  929. }
  930. private void addBackOrder(String orderNo, String reason) {
  931. TOrderBack ob=new TOrderBack();
  932. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  933. ob.setCreateTime(new Date());
  934. ob.setOrderNo(orderNo);
  935. ob.setReason(reason);
  936. ob.setBackStatus(0);//待处理
  937. ob.setInitiate(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  938. ob.setAccept(tOrder.getSalesmanId());
  939. TOrderLog tl=new TOrderLog();
  940. tl.setOrderNo(orderNo);
  941. tl.setProcess(OrderLogProcess.BH.getCode());
  942. addOrderLog(tl,reason);
  943. tOrderBackMapper.insertSelective(ob);
  944. }
  945. @SuppressWarnings("unchecked")
  946. @Override
  947. public Pagination<outOrderDunListBo> dunOrderNewList(String name, String orderNo,String contractNo, String starTime, String endTime,
  948. Integer specially,String aid, String adminName,String depId,Integer newStatus,Integer approval,Integer amountStatus,Integer memberType,Integer pageNo, Integer pageSize) {
  949. Map<String, Object> params = new HashMap<String, Object>();
  950. if(newStatus!=null&&newStatus==0) {
  951. params.put("newStatus", 0);
  952. } else {
  953. params.put("newStatus", tOrderDunMapper.selectByOrderNo(orderNo).isEmpty()?1:0);
  954. }
  955. if (StringUtils.isNotBlank(name)) {
  956. params.put("name", name);
  957. }
  958. if (StringUtils.isNotBlank(depId)) {
  959. params.put("depId", depId);
  960. }
  961. if (StringUtils.isNotBlank(adminName)) {
  962. params.put("adminName", adminName);
  963. }
  964. if (StringUtils.isNotBlank(orderNo)) {
  965. params.put("orderNo", orderNo);
  966. }
  967. if (StringUtils.isNotBlank(contractNo)) {
  968. params.put("contractNo", contractNo);
  969. }
  970. if (StringUtils.isNotBlank(starTime)) {
  971. params.put("starTime", starTime);
  972. }
  973. if (StringUtils.isNotBlank(endTime)) {
  974. params.put("endTime", endTime+" 23:59:59");
  975. }
  976. if (approval!=null ) {
  977. params.put("approval",approval);
  978. }
  979. if (amountStatus!=null ) {
  980. params.put("amountStatus",amountStatus);
  981. }
  982. if (memberType!=null ) {
  983. params.put("memberType",memberType);
  984. }
  985. if (specially==null) {
  986. specially=0;
  987. }
  988. params.put("specially", specially);
  989. Integer i=null;
  990. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  991. i=1;
  992. params.put("fid", TokenManager.getAdminId());
  993. }else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  994. i=2;
  995. params.put("fid", TokenManager.getAdminId());
  996. }else if(TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
  997. TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CED)||
  998. TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
  999. i=3;
  1000. }else {
  1001. params.put("aid", TokenManager.getAdminId());
  1002. }
  1003. if (specially==1){
  1004. params.put("aid", aid);
  1005. params.put("dunStatus", 1);
  1006. }
  1007. if(i!=null) {
  1008. params.put("shiroType", i);
  1009. }
  1010. Pagination<outOrderDunListBo> p = (Pagination<outOrderDunListBo>)findPage("selectDunOrderNewListByPage", "selectDunOrderNewListCount", params, pageNo, pageSize);
  1011. List<outOrderDunListBo> list = (List<outOrderDunListBo>) p.getList();
  1012. for (outOrderDunListBo o : list) {
  1013. o.setDunSubject(getDunSubject(o));
  1014. }
  1015. return p;
  1016. }
  1017. public String getDunSubject(outOrderDunListBo o) {
  1018. //旧催款
  1019. if(o.getDunSubject()!=null) {
  1020. return OrderDunSubject.getValueByCode(Integer.valueOf(o.getDunSubject()));
  1021. }
  1022. //新催款
  1023. if(o.getDunType()!=null&&o.getDunType()!=0&&o.getProjectType()!=null) {
  1024. return NewOrderDunType.getValueByCode(Integer.valueOf(""+o.getProjectType()+o.getDunType()));
  1025. }
  1026. if(o.getDunType()!=null&&o.getDunType()==0&&o.getProjectType()!=null) {
  1027. return NewOrderDunType.getValueByCode(Integer.valueOf(""+o.getProjectType()+o.getDunType()))+o.getCustomizeName();
  1028. }
  1029. return "";
  1030. }
  1031. @Override
  1032. public int createDunLog( String dunId, String dumTime, String remarks, String attUrl) {
  1033. TDunLog d=new TDunLog();
  1034. d.setId(UUID.randomUUID().toString());
  1035. d.setDunId(dunId);
  1036. d.setDumBy(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1037. d.setAttachmentUrl(attUrl);
  1038. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1039. try {
  1040. d.setDumTime(sdf.parse(dumTime));
  1041. } catch (ParseException e) {
  1042. e.printStackTrace();
  1043. }
  1044. d.setRemarks(remarks);
  1045. return tDunLogMapper.insertSelective(d);
  1046. }
  1047. @Override
  1048. public List<TDunLogListBo> selectDunLogList(String dunId) {
  1049. return tDunLogMapper.selectByDunId(dunId);
  1050. }
  1051. @Override
  1052. public int addOrderRefund(TOrderRefundWithBLOBs t) {
  1053. TOrderNew order =checkDeleteSign(t.getOrderNo());
  1054. if(order.getDeleteSign()!=0) {
  1055. throw new BusinessException(new Error( "订单变更锁定中","订单变更锁定中"));
  1056. }
  1057. t.setRefundStatus(refundState.DSH.getCode());
  1058. t.setCreateTime(new Date());
  1059. t.setInitiate(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1060. //t.setAccept("1");
  1061. t.setAccept(order.getFinanceId());
  1062. t.setResult("");
  1063. TOrderNew tOrder=new TOrderNew();
  1064. tOrder.setOrderNo(t.getOrderNo());
  1065. tOrder.setOrderStatus(OrderNewState.TDZ.getCode());
  1066. tOrderNewMapper.updateByPrimaryKeySelective(tOrder);
  1067. TOrderLog tl=new TOrderLog();
  1068. tl.setOrderNo(t.getOrderNo());
  1069. tl.setProcess(OrderLogProcess.FQTD.getCode());
  1070. addOrderLog(tl,null);
  1071. return tOrderRefundMapper.insertSelective(t);
  1072. }
  1073. @Override
  1074. public int updateApprovalOrder(String orderNo,Integer confirm,String reason) {
  1075. TOrderNew t=new TOrderNew();
  1076. TOrderNew t2=checkDeleteSign(orderNo);
  1077. t.setOrderNo(orderNo);
  1078. List<String> aids = new ArrayList<>();
  1079. Integer type=null;
  1080. TOrderLog tl=new TOrderLog();
  1081. tl.setOrderNo(orderNo);
  1082. if (confirm==2) {
  1083. t.setApproval(2);
  1084. t.setProcessStatus(ProcessStatus.YPZXSGLY.getCode());
  1085. OrganizationListOut oo=departmentMapper.selectAllById(t2.getOrderDep());
  1086. t.setFinanceId(oo.getFinanceId());
  1087. for (Admin admin : adminMapper.getAdminRoleList("咨询师管理员")) {
  1088. aids.add(admin.getId());
  1089. }
  1090. type=NoticeStatus.ORDER_APPROVA_YES.getCode();
  1091. tl.setProcess(OrderLogProcess.TP.getCode());
  1092. } else {
  1093. t.setApproval(3);
  1094. t.setOrderStatus(OrderNewState.YBH.getCode());
  1095. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  1096. addBackOrder(orderNo, reason);
  1097. tl.setProcess(OrderLogProcess.BH.getCode());
  1098. aids.add(t2.getSalesmanId());
  1099. type=NoticeStatus.ORDER_APPROVA_NO.getCode();
  1100. }
  1101. addOrderLog(tl,reason);
  1102. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(orderNo);
  1103. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),t2.getApproval());
  1104. //新增特批催款信息
  1105. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  1106. }
  1107. @Override
  1108. public List<TOrderDun> selectOrderDun(String orderNo) {
  1109. return tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
  1110. }
  1111. @Override
  1112. public boolean checkOrderMain(TOrderTask t) {
  1113. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(t.getOrderNo(),0);
  1114. int flag=0;
  1115. if(t.getMain()==1) {
  1116. flag++;
  1117. }
  1118. for (TOrderTask t2 : list) {
  1119. if(t2.getMain()==1&&t.getId()==null) {
  1120. flag++;
  1121. }else if (t2.getMain()==1&&(!t.getId().equals(t2.getId()))) {
  1122. flag++;
  1123. }
  1124. }
  1125. if (flag>1) {
  1126. return true;
  1127. }
  1128. return false;
  1129. }
  1130. @Override
  1131. public boolean chekeOrderStatus(String orderNo) {
  1132. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  1133. if (tOrder.getOrderStatus().equals(OrderNewState.QDDS.getCode()) || tOrder.getOrderStatus().equals(OrderNewState.QDSHTG.getCode())) {
  1134. return false;
  1135. }
  1136. return true;
  1137. }
  1138. @Override
  1139. public boolean chekeProcessStatus(String orderNo) {
  1140. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  1141. if (tOrder.getProcessStatus().equals(ProcessStatus.YPYXY.getCode())) {
  1142. return false;
  1143. }
  1144. return true;
  1145. }
  1146. @Override
  1147. public boolean chekeApprovalOrderStatus(String orderNo) {
  1148. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  1149. if (tOrder.getApproval().equals(ApprovalNewState.FTP.getCode()) ||
  1150. tOrder.getOrderStatus().equals(OrderNewState.QDSHJJ.getCode()) ||
  1151. tOrder.getOrderStatus().equals(OrderNewState.YBH.getCode())) {
  1152. return true;
  1153. }
  1154. return false;
  1155. }
  1156. @Override
  1157. public int deleteOrderNew(String orderNo) {
  1158. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
  1159. if (t.getOrderStatus().equals(OrderNewState.YBH.getCode()) || t.getOrderStatus().equals(OrderNewState.YTD.getCode()) ||
  1160. t.getOrderStatus().equals(OrderNewState.DQD.getCode()) || t.getOrderStatus().equals(OrderNewState.QDSHJJ.getCode())) {
  1161. t.setOrderNo(orderNo);
  1162. t.setDeleteSign(1);//作废
  1163. if(t.getContractNo()!=null) {
  1164. contractNoReplace(orderNo, t.getContractNo(),t.getOrderDep());
  1165. }
  1166. t.setContractNo("");
  1167. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  1168. }
  1169. return -1;
  1170. }
  1171. /**
  1172. * 将合同编号置为闲置编号
  1173. * @param orderNo
  1174. */
  1175. private void contractNoReplace(String orderNo, String contractNo,String orderDep) {
  1176. Calendar c=Calendar.getInstance();
  1177. int y=c.get(Calendar.YEAR);
  1178. String ys="-"+y;
  1179. //判断编号是否类似‘-2019’,是则为有效编号
  1180. if (contractNo.contains(ys)) {
  1181. IdleContractNo i=new IdleContractNo();
  1182. i.setAid(TokenManager.getAdminId());
  1183. i.setContractNo(contractNo);
  1184. i.setUsedOrderNo(orderNo);
  1185. i.setYear(y);
  1186. //如果找不到订单部门,则取订单编号-前面的缩写
  1187. if(StringUtils.isNotBlank(orderDep)) {
  1188. Department o=departmentMapper.selectByPrimaryKey(orderDep);
  1189. i.setAbbreviation(o.getAbbreviation());
  1190. }else {
  1191. i.setAbbreviation(contractNo.substring(0, contractNo.indexOf("-")));
  1192. }
  1193. idleContractNoMapper.insertSelective(i);
  1194. }
  1195. }
  1196. @Override
  1197. public boolean checkOderSettlementAmount(String orderNo) {
  1198. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  1199. if (tOrder.getSettlementAmount()==null||
  1200. tOrder.getSettlementAmount().doubleValue()==0||
  1201. tOrder.getOrderStatus().equals(OrderNewState.TDZ.getCode())){
  1202. return true;
  1203. }
  1204. return false;
  1205. }
  1206. @SuppressWarnings("unchecked")
  1207. @Override
  1208. public Pagination<TOrderRefundBo> orderRefundList(String name, String orderNo, String starTime, String endTime, Integer specially,
  1209. Integer pageNo, Integer pageSize) {
  1210. Map<String, Object> params = new HashMap<String, Object>();
  1211. params.put("aid", TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1212. if (StringUtils.isNotBlank(name)) {
  1213. params.put("name", name);
  1214. }
  1215. if (StringUtils.isNotBlank(orderNo)) {
  1216. params.put("orderNo", orderNo);
  1217. }
  1218. if (StringUtils.isNotBlank(starTime)) {
  1219. params.put("starTime", starTime);
  1220. }
  1221. if (StringUtils.isNotBlank(endTime)) {
  1222. params.put("endTime", endTime+" 23:59:59");
  1223. }
  1224. Pagination<TOrderRefundBo> p = (Pagination<TOrderRefundBo>)findPage("selectOrderRefundListByPage", "selectOrderRefundListCount", params, pageNo, pageSize);
  1225. return p;
  1226. }
  1227. @Override
  1228. public boolean checkORderTask(String orderNo) {
  1229. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo,0);
  1230. for (TOrderTaskBo t : list) {
  1231. if (t.getMain()==1) {
  1232. return false;
  1233. }
  1234. }
  1235. return true;
  1236. }
  1237. @Override
  1238. public boolean checkORderDun(String orderNo) {
  1239. List<OutNewOrderDunBo> list=newOrderDunMapper.selectListNewOrderDun(orderNo, null);
  1240. if (list==null||list.size()<1) {
  1241. return true;
  1242. }else {
  1243. return false;
  1244. }
  1245. }
  1246. /**
  1247. * 获取催款数据
  1248. * @throws IOException
  1249. */
  1250. @Override
  1251. public Result exportOrderDunData(String name, String orderNo, String contractNo, String starTime, String endTime, Integer specially, String aid, String adminName,
  1252. String depId, Integer newStatus, Integer approval, Integer amountStatus, Integer memberType,
  1253. Integer pageNo, Integer pageSize){
  1254. List<outOrderDunListBo> list=(List<outOrderDunListBo>) dunOrderNewList( name, orderNo, contractNo, starTime, endTime,specially,
  1255. aid, adminName, depId,newStatus, approval, amountStatus, memberType, pageNo, pageSize).getList();
  1256. NewExcelUtil<outOrderDunListBo> excelUtil = new NewExcelUtil<>(outOrderDunListBo.class);
  1257. return excelUtil.exportExcel(list,"催款截点统计表",uploadPath);
  1258. }
  1259. private String bigToString (BigDecimal o){
  1260. if(o==null){return "";}
  1261. else{
  1262. return o.stripTrailingZeros().toEngineeringString();
  1263. }
  1264. }
  1265. @Override
  1266. public int updateOrderOver(String orderNo) {
  1267. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
  1268. if (!t.getLiquidationStatus().equals(LiquidationNewState.ALREADY_PAY.getCode()) ||
  1269. !t.getProcessStatus().equals(ProcessStatus.YQBFPZXSGLY.getCode())) {
  1270. return -1;
  1271. }
  1272. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo,0);
  1273. for (TOrderTaskBo task : list) {
  1274. if (!task.getTaskStatus().equals(TaskState.CLYWC.getCode())) {
  1275. return -1;
  1276. }
  1277. }
  1278. t.setOrderStatus(OrderNewState.YJX.getCode());
  1279. t.setSettlementTime(new Date());
  1280. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  1281. }
  1282. @Override
  1283. public OrderRefundDetailBo orderRefundDetail(String id) {
  1284. return tOrderNewMapper.orderRefundDetail(id);
  1285. }
  1286. @Override
  1287. public int updateOrderRefund(TOrderRefundWithBLOBs t) {
  1288. checkDeleteSign(t.getOrderNo());
  1289. return tOrderRefundMapper.updateByPrimaryKeySelective(t);
  1290. }
  1291. @Override
  1292. public int updatetechnicianBackOrder(String orderNo,String reason) {
  1293. TOrderNew t = checkDeleteSign(orderNo);
  1294. if (t.getSettlementAmount().compareTo(new BigDecimal(0))!=0) {
  1295. return -1;
  1296. }
  1297. t.setOrderStatus(OrderNewState.YBH.getCode());
  1298. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  1299. t.setFinanceId("");
  1300. addBackOrder(orderNo, reason);
  1301. List<String> aids = new ArrayList<>();
  1302. aids.add(t.getSalesmanId());
  1303. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(orderNo);
  1304. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_NO.getCode(),order, TokenManager.getAdminId(),t.getApproval());
  1305. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  1306. }
  1307. private TOrderNew checkDeleteSign(String orderNo) {
  1308. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
  1309. //if(t.getDeleteSign()==2) throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, t.getOrderNo(),""));
  1310. return t;
  1311. }
  1312. @Override
  1313. public void addNotic(Integer type, TOrderNewBo b,String str) {
  1314. String aid=null;
  1315. StringBuffer sb=new StringBuffer();
  1316. //预设值 默认发给营销员
  1317. aid=b.getSalesmanId();
  1318. if (str==null){
  1319. if (type.equals(NoticeStatus.ORDER_ARREARS_DUN.getCode()) || type.equals(NoticeStatus.PAYMENT_DUN.getCode()) ||
  1320. type.equals(NoticeStatus.ORDER_DUN.getCode()) || type.equals(NoticeStatus.MENBER_DUN.getCode())){
  1321. sb=sb.append("客户名称【").append(b.getUserName()).append("】,按时触发应收款欠款,请按时催款,并及时增减项目,以免项目延期等问题。");
  1322. }
  1323. }else {
  1324. sb=sb.append(str);
  1325. }
  1326. addNotic(type,aid,sb.toString());
  1327. }
  1328. @Override
  1329. public void addNoticMember(Integer type, TOrderNewBo b,Integer shiroType,Integer result) {
  1330. StringBuffer sb=new StringBuffer();
  1331. String aid=null;
  1332. List<Admin>admins=new ArrayList<>();
  1333. sb.append("客户名称【").append(b.getUserName()).append("】,订单编号【").append(b.getOrderNo()).append("】,");
  1334. if (type.equals(NoticeStatus.MENBER_START.getCode())){
  1335. sb=sb.append("发起会员项目,请及时审核");
  1336. aid=b.getFinanceId();
  1337. }else if (type.equals(NoticeStatus.MENBER_YES.getCode())){
  1338. sb=sb.append("会员项目审核");
  1339. if(shiroType==0){
  1340. sb=sb.append("财务已通过。");
  1341. if (result==1) {
  1342. admins = MemberEnd(b);
  1343. }else{
  1344. admins=adminMapper.getAdminRoleList("总裁");
  1345. }
  1346. } else if(shiroType==1){
  1347. sb=sb.append("特批已通过。");
  1348. admins = MemberEnd(b);
  1349. }
  1350. }else if (type.equals(NoticeStatus.MENBER_NO.getCode())){
  1351. if(shiroType==0){
  1352. sb=sb.append("财务已驳回。");
  1353. } else if(shiroType==1){
  1354. sb=sb.append("特批已驳回。");
  1355. }
  1356. aid=b.getSalesmanId();
  1357. }
  1358. if (admins!=null&&admins.size()>0){
  1359. for (Admin admin : admins) {
  1360. addNotic(type,admin.getId(),sb.toString());
  1361. sendMemberEmail(type,admin.getId(),sb.toString());
  1362. }
  1363. }else {
  1364. addNotic(type,aid,sb.toString());
  1365. sendMemberEmail(type,aid,sb.toString());
  1366. }
  1367. }
  1368. /**
  1369. * 会员项目完成审核调用
  1370. * @param b
  1371. * @return
  1372. */
  1373. private List<Admin> MemberEnd(TOrderNewBo b) {
  1374. List<Admin> admins;
  1375. admins=adminMapper.getAdminRoleList("咨询师管理员");
  1376. Admin admin = new Admin();
  1377. admin.setId(b.getSalesmanId());
  1378. admins.add(admin);
  1379. pushTOrderNew(b);
  1380. return admins;
  1381. }
  1382. /**
  1383. * 新建完成会员项目修改订单状态
  1384. * @param b
  1385. */
  1386. private void pushTOrderNew(TOrderNewBo b) {
  1387. List<TOrderTaskBo> l = tOrderTaskMapper.selectOrderTask(b.getOrderNo(), 0);
  1388. int counts =l.size();
  1389. int x=0;
  1390. for (TOrderTaskBo t : l) {
  1391. if (t.getTaskStatus()>0) {
  1392. x++;
  1393. }
  1394. }
  1395. TOrderNew n = new TOrderNew();
  1396. n.setOrderNo(b.getOrderNo());
  1397. if (x==0) {
  1398. n.setProcessStatus(4);
  1399. } else if(x<counts) {
  1400. n.setProcessStatus(5);
  1401. } else if(x==counts) {
  1402. n.setProcessStatus(6);
  1403. }
  1404. tOrderNewMapper.updateByPrimaryKeySelective(n);
  1405. }
  1406. /**
  1407. * 发送邮件使用
  1408. * @param type
  1409. * @param aid
  1410. * @param content
  1411. */
  1412. private void sendMemberEmail(Integer type,String aid,String content) {
  1413. Admin admin = adminMapper.selectByPrimaryKey(aid);
  1414. EmailBo bo = new EmailBo(NoticeStatus.getValueByCode(type), admin.getEmail(),content);
  1415. if(StringUtils.isNotBlank(admin.getEmail())) {
  1416. asyncUtils.send(bo);
  1417. }
  1418. }
  1419. /**
  1420. *
  1421. * @param type 通知类型
  1422. * @param aid 被通知人
  1423. * @param str 信息
  1424. */
  1425. public void addNotic(Integer type, String aid,String str) {
  1426. Notice n =new Notice();
  1427. n.setId(UUID.randomUUID().toString());
  1428. n.setAid(aid);
  1429. n.setNoticeType(type);
  1430. n.setContent(str);
  1431. n.setReaded(0);//未读
  1432. asyncUtils.addNotice(n);
  1433. }
  1434. public void
  1435. sendEmail(String dunId,AdminListBo a,TOrderNewBo b){
  1436. LoggerUtils.debug(logger, "======================邮件信息发送===================");
  1437. String content = "<div>客户名称: "+ b.getUserName() +"</div><div>订单编号: " + b.getOrderNo() + "</div><div>合同编号: " + b.getContractNo() + "</div>";
  1438. String tite="订单驳回";
  1439. if(StringUtils.isNotBlank(dunId)) {
  1440. TOrderDun tDun=tOrderDunMapper.selectByPrimaryKey(dunId);
  1441. content +="<div>催收时间: " + new SimpleDateFormat("yyyy-MM-dd").format(tDun.getCreateTime()) +
  1442. "</div><div>催收科目: " + OrderDunSubject.getValueByCode(tDun.getDunSubject()) +
  1443. "</div><div>催收情况: " + (tDun.getDunStatus()==2?"已完成":"已启动") +"</div>";
  1444. tite="催收通知";
  1445. }
  1446. //发送驳回邮件
  1447. EmailBo bo = new EmailBo(tite, b.getEmail(), b.getSalesmanName(), a.getDepartmentName(), a.getName(), content);
  1448. if(StringUtils.isNotBlank(b.getEmail())) {
  1449. asyncUtils.send(bo);
  1450. }
  1451. LoggerUtils.debug(logger, "=========================================发送邮件成功");
  1452. }
  1453. @Override
  1454. public int updateFinance(String orderNo, String newFinance) {
  1455. String aid=TokenManager.getAdminId();
  1456. String[] l=orderNo.split(",");
  1457. List<String> orderNos=new ArrayList<>(Arrays.asList(l));
  1458. tOrderNewMapper.updateFinance(aid,orderNos,newFinance);
  1459. return 1;
  1460. }
  1461. @Override
  1462. public List<TOrderLogBo> selectOrderLog(String orderNo) {
  1463. return tOrderLogMapper.selectOrderByNo(orderNo);
  1464. }
  1465. @Override
  1466. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type, TOrderNewBo order, String adminId, Integer approval) {
  1467. pushGeneralSendNoticeAndEmail( alist, type, order, adminId, approval,null);
  1468. }
  1469. @Override
  1470. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type, TOrderNewBo order, String adminId, Integer approval, Integer tid) {
  1471. AdminListBo a = adminMapper.getDeptNameByAid(adminId);
  1472. String approvalType="";
  1473. String noticeTypeName = NoticeStatus.getValueByCode(type);
  1474. if (!approval.equals(ApprovalNewState.FTP.getCode())) {
  1475. approvalType="[特批]";
  1476. }
  1477. StringBuffer str=new StringBuffer(approvalType).append(noticeTypeName).append(":");
  1478. if (tid != null) {str=str.append("项目编号[").append(tid).append("],");}
  1479. str=str.append("客户名称[") .append(order.getUserName()).append("],");
  1480. if(StringUtils.isNotBlank(order.getContractNo())) {
  1481. str=str.append("合同编号[").append(order.getContractNo()).append("],");
  1482. }
  1483. str=str.append("订单编号[").append(order.getOrderNo()).append("],").append("操作人:")
  1484. .append(a.getDepartmentName()).append("-").append(a.getName()).append("。");
  1485. String adminIds="";
  1486. List<Notice> nlist=new ArrayList<>();
  1487. for (String string : alist) {
  1488. Notice n =new Notice();
  1489. n.setId(UUID.randomUUID().toString());
  1490. n.setNoticeType(type);
  1491. n.setContent(str.toString());
  1492. n.setCreateTime(new Date());
  1493. n.setReaded(0);//未读
  1494. n.setAid(string);
  1495. nlist.add(n);
  1496. Admin admin = adminMapper.selectAllByid(string);
  1497. //去除邮件重复的
  1498. if(admin!=null&&admin.getEmail()!=null&&SendEmailUtil.isEmail(admin.getEmail().trim())){
  1499. if (!adminIds.contains(admin.getEmail())){
  1500. adminIds+=admin.getEmail()+",";
  1501. }
  1502. }
  1503. }
  1504. if(!nlist.isEmpty()) {
  1505. asyncUtils.addNoticeBatch(nlist);
  1506. }
  1507. if (!nlist.isEmpty()&&StringUtils.isNotBlank(adminIds)) {
  1508. adminIds=adminIds.substring(0, adminIds.length()-1);
  1509. EmailBo bo=new EmailBo(noticeTypeName,adminIds,str.toString());
  1510. asyncUtils.send(bo);
  1511. }
  1512. }
  1513. @Override
  1514. @Transactional
  1515. public int pushOutsourceProjectAudit(TOrderOutsource o) {
  1516. //前端加载缓慢避免重复提交
  1517. if(o.getId()==null){
  1518. OrderOutsourceDtails ood=tOrderOutsourceMapper.selectByOrderNo(null,o.getTid().toString());
  1519. if (ood!=null){
  1520. return 1;
  1521. }
  1522. }
  1523. o.setRefundStatus(0);
  1524. o.setCreateTime(new Date());
  1525. if(o.getAmount()==null) {
  1526. o.setAmount(new BigDecimal(0));
  1527. }
  1528. if(o.getStartType()==null) {
  1529. o.setStartType(0);
  1530. }
  1531. if (o.getStartType()==0) {
  1532. List<String> aids = new ArrayList<>();
  1533. for (Admin admin : adminMapper.getAdminRoleList("外包审核员")) {
  1534. aids.add(admin.getId());
  1535. }
  1536. TOrderNew t2= checkDeleteSign(o.getOrderNo());
  1537. Admin a =adminMapper.selectByPrimaryKey(TokenManager.getAdminId());
  1538. OutsourceLog ol=new OutsourceLog(o.getTid(),0,o.getReason(), TokenManager.getAdminId(),a.getName());
  1539. outsourceLogMapper.insertSelective(ol);
  1540. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  1541. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.PROJECT_OUTSOURCE_START.getCode(),order, TokenManager.getAdminId(),t2.getApproval(),o.getTid());
  1542. }
  1543. List<OutPaymentNode> list=paymentNodeMapper.selectByStatus(0);
  1544. for (OutPaymentNode outPaymentNode : list) {
  1545. if (outPaymentNode.getDunType()==1) {
  1546. PaymentNode pn=new PaymentNode();
  1547. pn.setId(outPaymentNode.getId());
  1548. pn.setDunStatus(1);
  1549. paymentNodeMapper.updateByPrimaryKeySelective(pn);
  1550. }
  1551. }
  1552. if (o.getStartType()==1) {//供应商无需审核
  1553. o.setRefundStatus(1);
  1554. }
  1555. if (o.getId()==null) {
  1556. tOrderOutsourceMapper.insertSelective(o);
  1557. }else {
  1558. tOrderOutsourceMapper.updateByPrimaryKeySelective(o);
  1559. //旧项目变更,如果驳回修改成新的项目变更
  1560. if(o.getUnitNumber()!=null) {
  1561. tOrderOutsourceMapper.updateByidNull(o.getId());
  1562. }
  1563. }
  1564. updateOrderCostAmount(o.getTid(),o.getStartType());
  1565. return 1;
  1566. }
  1567. /**
  1568. * 发起外包时,通过计算获取项目的成本,订单的成本
  1569. *
  1570. * @param tid 项目编号
  1571. * @param type 0外包 1供应商
  1572. */
  1573. @Override
  1574. public void updateOrderCostAmount(Integer tid,Integer type) {
  1575. //计算项目成本
  1576. List<OutThirdPartyCompany>list=thirdPartyCompanyMapper.selectByTid(tid);
  1577. BigDecimal tCount=new BigDecimal(0);
  1578. for (OutThirdPartyCompany op : list) {
  1579. tCount=tCount.add(new BigDecimal(op.getTotalAmount()));
  1580. }
  1581. if(type==1) {
  1582. ProjectTypePuls tt=tOrderTaskMapper.selectByTidGetDtails(tid);
  1583. if (tt.getOutPatentType()==0){
  1584. if (tt.getOfficialCost()==1) {
  1585. if (tt.getCostReduction()==1) {
  1586. tCount=tCount.add(tt.getProportion85().multiply(new BigDecimal(tt.getQuantity())));
  1587. }else {
  1588. tCount=tCount.add(tt.getOfficialAmount().multiply(new BigDecimal(tt.getQuantity())));
  1589. }
  1590. }
  1591. }
  1592. }
  1593. tTaskMidMapper.updateCostAmount(tid,tCount);
  1594. //计算订单成本
  1595. BigDecimal oCount=new BigDecimal(0);
  1596. List <TTaskMid> tlist=tTaskMidMapper.selectListByTid(tid);
  1597. for (TTaskMid tm : tlist) {
  1598. if (tm!=null&&tm.getCostAmount()!=null) {
  1599. oCount=oCount.add(tm.getCostAmount()==null?new BigDecimal(0):tm.getCostAmount());
  1600. }
  1601. }
  1602. tOrderMidMapper.updateCostAmount(tid,oCount,null);
  1603. }
  1604. @Override
  1605. @Cacheable(cacheNames = "statisticsList#500",key = "'statisticsList:depId:'+#in.depId+'province:'+#in.province+" +
  1606. "'startCreate:'+#in.startCreate+'endCreate:'+#in.endCreate+'startSign:'+#in.startSign+'endSign:'+#in.endSign+'sort:'+#in.sort")
  1607. public List<outStatisticsList> statisticsList(InputStatistics in) {
  1608. if(in.getSort()==null) {
  1609. in.setSort(0);
  1610. }
  1611. if(in.getEndCreate()!=null) {
  1612. in.setEndCreate(in.getEndCreate()+" 23:59:59");
  1613. }
  1614. if(in.getEndSign()!=null) {
  1615. in.setEndSign(in.getEndSign()+" 23:59:59");
  1616. }
  1617. return tOrderNewMapper.statisticsList(in);
  1618. }
  1619. @Override
  1620. @Cacheable(cacheNames = "provinceStatisticsList#500",key = "'provinceStatisticsList:depId:'+#in.depId+'province:'+#in.province+" +
  1621. "'startCreate:'+#in.startCreate+'endCreate:'+#in.endCreate+'startSign:'+#in.startSign+'endSign:'+#in.endSign+'sort:'+#in.sort")
  1622. public List<outProvinceStatisticsList> provinceStatisticsList(InputStatistics in) {
  1623. if(in.getSort()==null) {
  1624. in.setSort(0);
  1625. }
  1626. if(in.getEndCreate()!=null) {
  1627. in.setEndCreate(in.getEndCreate()+" 23:59:59");
  1628. }
  1629. if(in.getEndSign()!=null) {
  1630. in.setEndSign(in.getEndSign()+" 23:59:59");
  1631. }
  1632. return tOrderNewMapper.provinceStatisticsList(in);
  1633. }
  1634. @SuppressWarnings("unchecked")
  1635. @Override
  1636. public Pagination<OutArrearsDunListBo> arrearsDunList(InputArrearsDunListBo in) {
  1637. Map<String, Object> params = new HashMap<String, Object>();
  1638. if(in.getPageSize()==null||in.getPageSize()<0) {
  1639. in.setPageSize(10);
  1640. }
  1641. if(in.getPageNo()==null||in.getPageNo()<0) {
  1642. in.setPageNo(1);
  1643. }
  1644. if (StringUtils.isNotBlank(in.getName())) {
  1645. params.put("name", in.getName());
  1646. }
  1647. if (StringUtils.isNotBlank(in.getDepId())) {
  1648. params.put("deps", departmentService.getLowerDep(in.getDepId()));
  1649. }
  1650. if (StringUtils.isNotBlank(in.getAdminName())) {
  1651. params.put("adminName", in.getAdminName());
  1652. }
  1653. if (StringUtils.isNotBlank(in.getOrderNo())) {
  1654. params.put("orderNo", in.getOrderNo());
  1655. }
  1656. if (StringUtils.isNotBlank(in.getContractNo())) {
  1657. params.put("contractNo", in.getContractNo());
  1658. }
  1659. if (StringUtils.isNotBlank(in.getStarTime())) {
  1660. params.put("starTime", in.getStarTime());
  1661. }
  1662. if (StringUtils.isNotBlank(in.getEndTime())) {
  1663. params.put("endTime", in.getEndTime()+" 23:59:59");
  1664. }
  1665. if (StringUtils.isNotBlank(in.gettStarTime())) {
  1666. params.put("tStarTime", in.gettStarTime());
  1667. }
  1668. if (StringUtils.isNotBlank(in.gettEndTime())) {
  1669. params.put("tEndTime", in.gettEndTime()+" 23:59:59");
  1670. }
  1671. Integer i=null;
  1672. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  1673. i=1;
  1674. params.put("fid", TokenManager.getAdminId());
  1675. }else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  1676. i=2;
  1677. params.put("fid", TokenManager.getAdminId());
  1678. }else{
  1679. params.put("aid", TokenManager.getAdminId());
  1680. }
  1681. if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
  1682. TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CED)||
  1683. TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)) {
  1684. i=3;
  1685. }
  1686. if(i!=null) {
  1687. params.put("shiroType", i);
  1688. }
  1689. Pagination<OutArrearsDunListBo> p = (Pagination<OutArrearsDunListBo>)findPage("selectArrearsDunListByPage", "selectArrearsDunListByCount", params, in.getPageNo(), in.getPageSize());
  1690. return p;
  1691. }
  1692. @Override
  1693. public boolean checkOfficialType(TOrderOutsource o) {
  1694. TOrderTaskDetailBo t=tOrderTaskMapper.getOrderTaskDetail(o.getTid().toString());
  1695. //项目类型是专利不是转让就需要获取专利官费
  1696. if(t.getPatentTransfer()==0){
  1697. if(t.getBpType()==1) {
  1698. OfficialFeePrice of=officialFeePriceMapper.selectBytype(o.getPatentNameType(), t.getPatentType());
  1699. if (of==null) {
  1700. return true;
  1701. }
  1702. }
  1703. }
  1704. return false;
  1705. }
  1706. }