OrderNewServiceImpl.java 95 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706
  1. package com.goafanti.order.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.goafanti.admin.bo.AdminListBo;
  4. import com.goafanti.admin.service.DepartmentService;
  5. import com.goafanti.business.bo.BusinessProjectBo;
  6. import com.goafanti.common.bo.EmailBo;
  7. import com.goafanti.common.bo.Error;
  8. import com.goafanti.common.bo.OrderOperator;
  9. import com.goafanti.common.bo.Result;
  10. import com.goafanti.common.constant.AFTConstants;
  11. import com.goafanti.common.constant.ErrorConstants;
  12. import com.goafanti.common.dao.*;
  13. import com.goafanti.common.enums.NoticeStatus;
  14. import com.goafanti.common.enums.OfficialPatentType;
  15. import com.goafanti.common.enums.OrderLogProcess;
  16. import com.goafanti.common.error.BusinessException;
  17. import com.goafanti.common.model.*;
  18. import com.goafanti.common.utils.*;
  19. import com.goafanti.common.utils.excel.NewExcelUtil;
  20. import com.goafanti.core.mybatis.BaseMybatisDao;
  21. import com.goafanti.core.mybatis.JDBCIdGenerator;
  22. import com.goafanti.core.mybatis.page.Pagination;
  23. import com.goafanti.core.shiro.token.TokenManager;
  24. import com.goafanti.customer.bo.LockingReleaseBo;
  25. import com.goafanti.order.bo.*;
  26. import com.goafanti.order.enums.*;
  27. import com.goafanti.order.service.OrderNewService;
  28. import com.goafanti.order.service.OrderProjectService;
  29. import com.goafanti.organization.bo.*;
  30. import com.goafanti.patent.service.PatentNewService;
  31. import groovy.transform.Synchronized;
  32. import org.apache.commons.io.IOUtils;
  33. import org.slf4j.Logger;
  34. import org.slf4j.LoggerFactory;
  35. import org.springframework.beans.BeanUtils;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.beans.factory.annotation.Value;
  38. import org.springframework.cache.annotation.Cacheable;
  39. import org.springframework.scheduling.annotation.EnableAsync;
  40. import org.springframework.stereotype.Service;
  41. import org.springframework.transaction.annotation.Transactional;
  42. import javax.annotation.Resource;
  43. import javax.mail.MessagingException;
  44. import javax.servlet.http.HttpServletResponse;
  45. import java.io.ByteArrayOutputStream;
  46. import java.io.File;
  47. import java.io.IOException;
  48. import java.io.UnsupportedEncodingException;
  49. import java.math.BigDecimal;
  50. import java.math.RoundingMode;
  51. import java.text.ParseException;
  52. import java.text.SimpleDateFormat;
  53. import java.time.LocalDate;
  54. import java.util.*;
  55. import java.util.regex.Matcher;
  56. import java.util.regex.Pattern;
  57. import java.util.stream.Collectors;
  58. import java.util.zip.ZipEntry;
  59. import java.util.zip.ZipOutputStream;
  60. @Service
  61. @EnableAsync
  62. public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> implements OrderNewService {
  63. @Autowired
  64. private TOrderNewMapper tOrderNewMapper;
  65. @Autowired
  66. private TOrderTaskMapper tOrderTaskMapper;
  67. @Autowired
  68. private NewOrderDunMapper newOrderDunMapper;
  69. @Autowired
  70. private TOrderDunMapper tOrderDunMapper;
  71. @Autowired
  72. private TDunLogMapper tDunLogMapper;
  73. @Autowired
  74. private TOrderMidMapper tOrderMidMapper;
  75. @Autowired
  76. private TOrderRefundMapper tOrderRefundMapper;
  77. @Autowired
  78. private TOrderBackMapper tOrderBackMapper;
  79. @Autowired
  80. private OrganizationContactBookMapper organizationContactBookMapper;
  81. @Autowired
  82. private DepartmentMapper departmentMapper ;
  83. @Autowired
  84. private JDBCIdGenerator idGenerator;
  85. @Autowired
  86. private AdminMapper adminMapper;
  87. @Autowired
  88. private TOrderLogMapper tOrderLogMapper;
  89. @Autowired
  90. private TOrderExamineMapper tOrderExamineMapper;
  91. @Autowired
  92. private IdleContractNoMapper idleContractNoMapper;
  93. @Autowired
  94. private TOrderOutsourceMapper tOrderOutsourceMapper;
  95. @Autowired
  96. private UserLockReleaseMapper userLockReleaseMapper;
  97. @Autowired
  98. private TArrearsDunMapper tArrearsDunMapper;
  99. @Autowired
  100. private TOrderExtendMapper tOrderExtendMapper;
  101. @Autowired
  102. private UserMapper userMapper;
  103. @Autowired
  104. private OutsourceLogMapper outsourceLogMapper;
  105. @Autowired
  106. private PaymentNodeMapper paymentNodeMapper;
  107. @Autowired
  108. private ThirdPartyCompanyMapper thirdPartyCompanyMapper;
  109. @Autowired
  110. private TTaskMidMapper tTaskMidMapper;
  111. @Autowired
  112. private UserMidMapper userMidMapper;
  113. @Autowired
  114. private ProjcetCheckLogMapper projcetCheckLogMapper;
  115. @Autowired
  116. private OfficialFeePriceMapper officialFeePriceMapper;
  117. @Autowired
  118. private PatentNewService patentNewService;
  119. @Autowired
  120. private AsyncUtils asyncUtils;
  121. @Autowired
  122. private PushOrderService pushOrderService;
  123. @Autowired
  124. private BusinessProjectMapper businessProjectMapper;
  125. @Autowired
  126. private BusinessCategoryMapper businessCategoryMapper;
  127. @Autowired
  128. private OrderProjectService orderProjectService;
  129. @Autowired
  130. private TTaskMemberMapper tTaskMemberMapper;
  131. @Autowired
  132. private DepartmentService departmentService;
  133. @Autowired
  134. private TOrderPaymentMapper tOrderPaymentMapper;
  135. @Autowired
  136. private TOrderHighTechMapper tOrderHighTechMapper;
  137. @Autowired
  138. private FinanceCountMapper financeCountMapper;
  139. @Autowired
  140. private PublicReleaseMapper publicReleaseMapper;
  141. @Autowired
  142. private OrderYearMaxDurationMapper orderYearMaxDurationMapper;
  143. @Autowired
  144. private TOrderApprovalMapper tOrderApprovalMapper;
  145. @Autowired
  146. private TOrderPublicReleaseCountMapper tOrderPublicReleaseCountMapper;
  147. @Autowired
  148. private PublicConfigMapper publicConfigMapper;
  149. @Resource
  150. private TemporaryReceivablesMapper temporaryReceivablesMapper;
  151. @Value(value = "${upload.path}")
  152. private String uploadPath = null;
  153. Logger logger = LoggerFactory.getLogger(OrderNewServiceImpl.class);
  154. @Override
  155. public int createServiceOrder(String uid,Integer userType, Integer orderType,Integer salesType,String channelId,String other) {
  156. BigDecimal initial = new BigDecimal(0);
  157. Date date=new Date();
  158. TOrderNew t=new TOrderNew();
  159. String orderNo=idGenerator.generateId().toString();
  160. t.setOrderNo(orderNo);
  161. t.setOrderType(orderType);
  162. t.setUserType(userType);
  163. t.setOrderStatus(OrderNewState.DQD.getCode());
  164. t.setFirstAmount(initial);
  165. t.setTotalAmount(initial);
  166. t.setSettlementAmount(initial);
  167. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_FIRST_BALANCE.getCode());
  168. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  169. t.setProjectStatus(NewProjectStatus.WQD.getCode());
  170. t.setApproval(ApprovalNewState.FTP.getCode());
  171. //0-正常,1-作废,2-锁定
  172. t.setDeleteSign(0);
  173. t.setSalesmanId(TokenManager.getAdminId());
  174. t.setCreater(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  175. t.setOrderDep(adminMapper.queryById(TokenManager.getAdminId()).getDepartmentId());
  176. t.setCreateTime(date);
  177. t.setUpdateTime(date);
  178. t.setBuyerId(uid);
  179. t.setSalesType(salesType);
  180. if (salesType.equals(SalesTypes.qd.getCode()) &&channelId!=null){
  181. t.setChannelId(channelId);
  182. }
  183. if (other!=null ) {
  184. t.setOther(other);
  185. }
  186. User u=userMapper.queryById(uid);
  187. if(u.getShareType()!=null&&u.getShareType()==2){
  188. t.setNewUser(1);
  189. }else {
  190. t.setNewUser(0);
  191. }
  192. TOrderExtend te=new TOrderExtend();
  193. te.setOrderNo(orderNo);
  194. te.setServiceStatus(0);
  195. tOrderExtendMapper.insertSelective(te);
  196. addOrderExamine(t);
  197. return tOrderNewMapper.insertSelective(t);
  198. }
  199. private void addOrderExamine(TOrderNew o) {
  200. List<TOrderExamine> tOrderExamines = tOrderExamineMapper.selectByOrderNo(o.getOrderNo(),0);
  201. if (tOrderExamines.isEmpty()){
  202. addTOrderExamines(o);
  203. }
  204. }
  205. private List<TOrderExamine> addTOrderExamines(TOrderNew o) {
  206. tOrderExamineMapper.deleteByOrderNo(o.getOrderNo());
  207. OrganizationListOut dep = departmentMapper.selectAllById(o.getOrderDep());
  208. List<TOrderExamine> list =new ArrayList<>();
  209. if(!Objects.isNull(dep)){
  210. if (StringUtils.isNotBlank(dep.getFinanceId())){
  211. list.add(new TOrderExamine(o.getOrderNo(),0,dep.getFinanceId(),dep.getFinanceName()));
  212. }
  213. if (StringUtils.isNotBlank(dep.getRetrialFinanceId())){
  214. list.add(new TOrderExamine(o.getOrderNo(),0,dep.getRetrialFinanceId(),dep.getRetrialFinanceName()));
  215. }
  216. if(StringUtils.isNotBlank(dep.getTechAdminId())){
  217. list.add(new TOrderExamine(o.getOrderNo(),0,dep.getTechAdminId(),dep.getTechAdminName()));
  218. }
  219. }
  220. if (!list.isEmpty())tOrderExamineMapper.insertBatch(list);
  221. return list;
  222. }
  223. @Override
  224. public InputAddTask addOrderTask(InputAddTask t) {
  225. TOrderNew order=tOrderNewMapper.queryById(t.getOrderNo());
  226. checkOrder(order,t);
  227. t.setTaskStatus(TaskState.WFP.getCode());
  228. t.setProjectStatus(NewProjectStatus.WQD.getCode());
  229. if(t.getCommodityPrice()!=null) {
  230. order.setTotalAmount(order.getTotalAmount());
  231. }
  232. addTTaskMember(t);
  233. addTaskMid(t);
  234. //如果是会员添加同性质不同项目
  235. BusinessProject bp=businessProjectMapper.selectById(t.getCommodityId());
  236. InputAddTask t2=new InputAddTask();
  237. BeanUtils.copyProperties(t,t2);
  238. if (bp.getProjectType().equals(NewProjectTypeEnum.HT.getCode())){
  239. if (t.getHtMember()==1){
  240. //会员项目替换
  241. List<BusinessProjectBo> additionalDeductionList = businessProjectMapper.selectByFirstBName("高新会员",1);
  242. for (BusinessProjectBo e : additionalDeductionList) {
  243. if(!e.getId().equals(t.getCommodityId())){
  244. t2.setCommodityId(e.getId());
  245. t2.setCommodityName(e.getBname());
  246. t2.setMain(0);
  247. t2.setCommodityPrice(new BigDecimal(0));
  248. t2.setId(null);
  249. addTTaskMember(t2);
  250. addTaskMid(t2);
  251. }
  252. }
  253. }
  254. if(t.getAdditionalDeduction()==1){
  255. //加计扣除
  256. List<BusinessProjectBo> additionalDeductionList = businessProjectMapper.selectByFirstBName("加计扣除", 1);
  257. for (BusinessProjectBo e : additionalDeductionList) {
  258. t2.setCommodityId(e.getId());
  259. t2.setCommodityName(e.getBname());
  260. t2.setMain(0);
  261. t2.setCommodityPrice(new BigDecimal(0));
  262. t2.setId(null);
  263. addTTaskMember(t2);
  264. addTaskMid(t2);
  265. }
  266. }
  267. if(t.getRdAwardsubsidy()==1){
  268. //研发奖补
  269. List<BusinessProjectBo> list = businessProjectMapper.selectByFirstBName("研发奖补", 1);
  270. for (BusinessProjectBo e : list) {
  271. t2.setCommodityId(e.getId());
  272. t2.setCommodityName(e.getBname());
  273. t2.setMain(0);
  274. t2.setCommodityPrice(new BigDecimal(0));
  275. t2.setId(null);
  276. addTTaskMember(t2);
  277. addTaskMid(t2);
  278. }
  279. }
  280. }
  281. if (bp.getProjectType().equals(NewProjectTypeEnum.SIMPLE.getCode())){
  282. List<BusinessProjectBo> list = businessProjectMapper.selectByFirstBName("简单会员", 2);
  283. for (BusinessProjectBo e : list) {
  284. if(!e.getId().equals(t.getCommodityId())){
  285. t2.setCommodityId(e.getId());
  286. t2.setCommodityName(e.getBname());
  287. t2.setMain(0);
  288. t2.setCommodityPrice(new BigDecimal(0));
  289. t2.setId(null);
  290. addTTaskMember(t2);
  291. addTaskMid(t2);
  292. }
  293. }
  294. }
  295. return t;
  296. }
  297. private void addTTaskMember(InputAddTask t) {
  298. String str=tOrderTaskMapper.selectByidGetCname(t.getCommodityId());
  299. t.setCname(str);
  300. tOrderTaskMapper.insertSelective(t);
  301. addTTaskMember(t.getId(),t.getServiceLife(),t.getServiceYear(),t.getYearSum(),t.getContractTerm());
  302. }
  303. @Override
  304. public void addTTaskMember(Integer id, String serviceLife, String serviceYear, Integer yearSum, String contractTerm) {
  305. if (serviceLife!=null|| serviceYear!=null||yearSum!=null|| contractTerm!=null){
  306. TTaskMember ttm=new TTaskMember();
  307. ttm.setTid(id);
  308. if(serviceLife!=null)ttm.setServiceLife(serviceLife);
  309. if(serviceYear!=null)ttm.setServiceYear(serviceYear);
  310. if(yearSum!=null)ttm.setYearSum(yearSum);
  311. if(contractTerm!=null)ttm.setContractTerm(contractTerm);
  312. tTaskMemberMapper.insertSelective(ttm);
  313. }
  314. }
  315. @Override
  316. public int updateTag(String orderNo, Integer tag) {
  317. String[] str= orderNo.split(",");
  318. if(str.length>0){
  319. List<String> orderNos= Arrays.asList(str);
  320. tOrderNewMapper.updateTagByListOrderNo(orderNos,tag);
  321. return 1;
  322. }
  323. return 0;
  324. }
  325. @Override
  326. public int addTaskMid(Integer id, String commodityId, String orderNo) {
  327. InputAddTask t = new InputAddTask();
  328. t.setId(id);
  329. t.setCommodityId(commodityId);
  330. t.setOrderNo(orderNo);
  331. return addTaskMid( t);
  332. }
  333. @Override
  334. public int addTaskMid(Integer id, String commodityId, String orderNo, Integer change) {
  335. InputAddTask t = new InputAddTask();
  336. t.setId(id);
  337. t.setCommodityId(commodityId);
  338. t.setOrderNo(orderNo);
  339. t.setChange(change);
  340. return addTaskMid( t);
  341. }
  342. @Override
  343. public int addTaskMid(InputAddTask t) {
  344. TTaskMid tm=new TTaskMid();
  345. tm.setTid(t.getId());
  346. //判断这个项目是不是高新复审
  347. int highNewRetrial=0;
  348. BusinessProject b=businessProjectMapper.selectById(t.getCommodityId());
  349. if (b.getType()==5){
  350. int i=tOrderTaskMapper.getHighNewRetrial(t.getOrderNo());
  351. if (i>0) {
  352. highNewRetrial =1;
  353. }
  354. BusinessCategory bc =businessCategoryMapper.selectByPrimaryKey(b.getCid());
  355. if (bc !=null && bc.getSort().equals(6)){
  356. TOrderMid tom=new TOrderMid();
  357. tom.setOrderNo(t.getOrderNo());
  358. tom.setProjectType(1);
  359. tOrderMidMapper.updateByOrderNo(tom);
  360. }
  361. }
  362. tm.setHighNewRetrial(highNewRetrial);
  363. tm.setLastYear(t.getLastYear());
  364. tm.setLastYearCapital(t.getLastYearCapital());
  365. tm.setLastYearIncome(t.getLastYearIncome());
  366. //获取派单省份与部门
  367. TTaskMid dtails = tTaskMidMapper.getDtails(t.getId());
  368. tm.setDispatchProvince(dtails.getDispatchProvince());
  369. tm.setDutyDep(dtails.getDutyDep());
  370. tm.setChange(t.getChange());
  371. return tTaskMidMapper.insertSelective(tm);
  372. }
  373. @Override
  374. public int addMemberProject(InputAddTask t){
  375. TOrderNewBo tn = tOrderNewMapper.getSaleIdByOno(t.getOrderNo());
  376. addOrderTask(t);
  377. orderProjectService.addMemberLog(t.getId(),0,"新增会员项目",TokenManager.getAdminId());
  378. orderProjectService.addNoticMember(NoticeStatus.MENBER_START.getCode(),tn,null,0);
  379. return 1;
  380. }
  381. public void checkOrder(TOrderNew order,TOrderTask t){
  382. if(order == null) {
  383. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  384. }
  385. if(order.getDeleteSign().equals(ActiveState.ABOLISH.getCode()) ) {
  386. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, order.getOrderNo(),""));
  387. }
  388. if(order.getDeleteSign().equals( ActiveState.LOCKING.getCode())) {
  389. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, order.getOrderNo(),""));
  390. }
  391. List<LockingReleaseBo> list=userLockReleaseMapper.checkTask(order.getBuyerId(),t.getCommodityId());
  392. if (list.size()>0) {
  393. for (LockingReleaseBo lockingReleaseBo : list) {
  394. if (!lockingReleaseBo.getAid().equals(order.getSalesmanId())) {
  395. throw new BusinessException(new Error( "该业务已经被其他人锁定","该业务已经被其他人锁定"));
  396. }
  397. }
  398. }
  399. }
  400. @Override
  401. public int updateOrderTask(InputAddTask t) {
  402. TOrderTask use=tOrderTaskMapper.queryById(t.getId());
  403. boolean flag=false;
  404. if(use.getCheckStatus()==1) {
  405. t.setCheckStatus(2);
  406. ProjcetCheckLog log=new ProjcetCheckLog();
  407. log.setTid(t.getId());
  408. log.setAid(TokenManager.getAdminId());
  409. StringBuffer str=new StringBuffer();
  410. if ((t.getOfficialCost()==null&&t.getCostReduction()==null&&t.getPatentType()==null)||
  411. (t.getOfficialCost().equals(use.getOfficialCost()) && t.getPatentType().equals(use.getPatentType()) && t.getCostReduction().equals(use.getCostReduction()))) {
  412. str.append("未做任何修改。");
  413. }else {
  414. str.append("修改了:");
  415. if (t.getPatentType()!=null&&
  416. (use.getPatentType()==null||!use.getPatentType().equals(t.getPatentType()))) {
  417. str.append("官费类型");
  418. }
  419. if (t.getOfficialCost()!=null&& !use.getOfficialCost().equals(t.getOfficialCost())) {
  420. str.append(",").append("有无官费");
  421. flag=true;
  422. }
  423. if (t.getCostReduction()!=null&& !use.getCostReduction().equals(t.getCostReduction())) {
  424. str.append(",").append("有无费减");
  425. flag=true;
  426. }
  427. str.append("。");
  428. }
  429. log.setRemarks(str.toString());
  430. log.setStatus(1);
  431. OrderOperator oo=tOrderTaskMapper.selectAidByParam(t.getId());
  432. if (oo!=null&&oo.getOrderNo()!=null&&oo.getSalesmanId()!=null) {
  433. Notice n =new Notice();
  434. String str2=String.format("[%s]完成了专利核对,客户名称[%s]订单编号[%s]项目编号[%s]。", oo.getSalesmanName(),oo.getBuyerName(),oo.getOrderNo(),oo.getTid());
  435. n.setId(UUID.randomUUID().toString());
  436. n.setAid(oo.getTechId());
  437. n.setNoticeType(NoticeStatus.ITEM_CHECK_END.getCode());
  438. n.setContent(str2);
  439. n.setReaded(0);//未读
  440. asyncUtils.addNoticAndEmail(n);
  441. }
  442. projcetCheckLogMapper.insertSelective(log);
  443. }
  444. int i=tOrderTaskMapper.update(t);
  445. if (t.getServiceLife()!=null||t.getServiceYear()!=null||t.getYearSum()!=null||t.getContractTerm()!=null){
  446. TTaskMember ttm=new TTaskMember();
  447. ttm.setTid(t.getId());
  448. if(t.getServiceLife()!=null)ttm.setServiceLife(t.getServiceLife());
  449. if(t.getServiceYear()!=null)ttm.setServiceYear(t.getServiceYear());
  450. if(t.getYearSum()!=null)ttm.setYearSum(t.getYearSum());
  451. if(t.getContractTerm()!=null)ttm.setContractTerm(t.getContractTerm());
  452. if (tTaskMemberMapper.updateByTid(ttm)==0){
  453. tTaskMemberMapper.insertSelective(ttm);
  454. }
  455. //如果是拆分主项目则同时改变子项目
  456. if (use.getSplitStatus()==1){
  457. tTaskMemberMapper.updateSplitSuper(use.getId(),t.getServiceLife(),t.getServiceYear(),t.getYearSum(),t.getContractTerm());
  458. }
  459. }
  460. if (t.getLastYear()!=null||t.getLastYearIncome()!=null||t.getLastYearCapital()!=null){
  461. TTaskMid tTaskMid = new TTaskMid();
  462. tTaskMid.setTid(t.getId());
  463. tTaskMid.setLastYear(t.getLastYear());
  464. tTaskMid.setLastYearIncome(t.getLastYearIncome());
  465. tTaskMid.setLastYearCapital(t.getLastYearCapital());
  466. tTaskMidMapper.updateByTid(tTaskMid);
  467. }
  468. if (flag) {
  469. patentNewService.updateCostReduction(t.getId());
  470. }
  471. return i;
  472. }
  473. @Override
  474. public int delectOrderTask(Integer id) {
  475. //连带催款一起删除
  476. newOrderDunMapper.deleteByTid(id);
  477. tOrderTaskMapper.deleteBySplitId(id);
  478. return tOrderTaskMapper.deleteById(id);
  479. }
  480. @Override
  481. public List<TOrderTaskBo> selectOrderTask(String orderNo,Integer type) {
  482. if (TokenManager.hasRole(AFTConstants.SALESMAN)||TokenManager.hasRole(AFTConstants.SALESMAN_MANAGER)){
  483. if (type==null) {
  484. type=0;
  485. }
  486. }else {
  487. if (type==null) {
  488. type=1;
  489. }
  490. }
  491. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo,type);
  492. for (TOrderTaskBo t : list) {
  493. if (TokenManager.hasRole(AFTConstants.SALESMAN)&&TokenManager.hasRole(AFTConstants.TECH)) {
  494. //如果是双角色不做处理。
  495. } else if (TokenManager.hasRole(AFTConstants.SALESMAN)) {
  496. t.setOutsourceName("****");
  497. t.setOutsourcePrice(new BigDecimal(0));
  498. t.setDeclareUser("****");
  499. t.setDeclarePwd("****");
  500. t.setCertificateNumber("****");
  501. }else if (TokenManager.hasRole(AFTConstants.TECH)) {
  502. //设置隐藏金额
  503. t.setCommodityPrice(null);
  504. }
  505. if(t.getPatentType()!=null) {
  506. t.setPatentTypeName(OfficialPatentType.getValueByCode(t.getPatentType()));
  507. }
  508. //如果有拆分获取拆分数据
  509. if (t.getSplitStatus()==1){
  510. List<TOrderTaskListBo> l=orderProjectService.splitProjectList(t.getId(),type);
  511. t.setSplitList(l);
  512. }
  513. }
  514. return list;
  515. }
  516. @Override
  517. @Transactional
  518. public int updateServiceOrder(TOrderNewWithBLOBs t, Integer isSubmit) {
  519. Date date=new Date();
  520. TOrderNew t2=tOrderNewMapper.queryById(t.getOrderNo());
  521. //判断手机号码是否存在
  522. if (StringUtils.isNotBlank(t.getContacts())&&StringUtils.isNotBlank(t.getContactMobile())&&
  523. organizationContactBookMapper.checkContacts(t2.getBuyerId(), t2.getContactMobile(),TokenManager.getAdminId()==null?"1":TokenManager.getAdminId() )>0) {
  524. OrganizationContactBook contactBook=new OrganizationContactBook();
  525. contactBook.setId(UUID.randomUUID().toString());
  526. contactBook.setAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  527. contactBook.setUid(t2.getBuyerId());
  528. contactBook.setName(t.getContacts());
  529. contactBook.setMobile(t.getContactMobile());
  530. organizationContactBookMapper.insertSelective(contactBook);
  531. }
  532. Admin a = adminMapper.queryById(TokenManager.getAdminId());
  533. if (StringUtils.isBlank(t.getOrderDep())) {
  534. t.setOrderDep(a.getDepartmentId());
  535. }
  536. //处理特批类型相关字段
  537. pushApprovalType(t);
  538. if (t.getKnowledgeServices()!=null||t.getAuditServices()!=null||t.getAddDeductionServices()!=null){
  539. TOrderHighTech tighTech=new TOrderHighTech();
  540. tighTech.setOrderNo(t.getOrderNo());
  541. tighTech.setKnowledgeServices(t.getKnowledgeServices());
  542. tighTech.setAuditServices(t.getAuditServices());
  543. tighTech.setAddDeductionServices(t.getAddDeductionServices());
  544. tighTech.setKnowledgeOther(t.getKnowledgeOther());
  545. tighTech.setAuditOther(t.getAuditOther());
  546. tighTech.setAddDeductionOther(t.getAddDeductionOther());
  547. int i=tOrderHighTechMapper.updateByOrder(tighTech);
  548. if(i==0){
  549. tOrderHighTechMapper.insertSelective(tighTech);
  550. }
  551. }else {
  552. tOrderHighTechMapper.deleteByOrderNo(t.getOrderNo());
  553. }
  554. //如果修改了部门she审核财务也要切换
  555. if(!t.getOrderDep().equals(t2.getOrderDep())) {
  556. tOrderExamineMapper.deleteByOrderNo(t.getOrderNo());
  557. addOrderExamine(t);
  558. }
  559. //订单提交
  560. if (isSubmit==1) {
  561. t2.setApproval(t.getApproval());
  562. addOrderLog(t2.getOrderNo(),OrderLogProcess.TJ.getCode(), null);
  563. if(t2.getProcessStatus()<ProcessStatus.YPYXJL.getCode()) {
  564. //添加营销管理员审核经理
  565. Integer orderStatus=OrderNewState.QDDS.getCode();
  566. if (a.getManagerId()!=null){
  567. t.setProcessStatus(ProcessStatus.YPYXJL.getCode());
  568. }else {
  569. if (TokenManager.hasRole(AFTConstants.SALESMAN_ADMIN)){
  570. addOrderLog(t2.getOrderNo(),OrderLogProcess.SH.getCode(), "管理员跳过自己审核");
  571. t.setProcessStatus(ProcessStatus.YPCW_JSZJ.getCode());
  572. orderStatus=OrderNewState.QDSHTG.getCode();
  573. Admin admin=adminMapper.selectFinanceAdminByOrderDep(t2.getOrderDep());
  574. updateFinanceCount(admin.getId(),t2.getCreateTime());
  575. }else {
  576. addOrderLog(t2.getOrderNo(),OrderLogProcess.YXJLTT.getCode(), "无经理跳过审核");
  577. t.setProcessStatus(ProcessStatus.YPYXGLY.getCode());
  578. }
  579. }
  580. t.setOrderStatus(orderStatus);
  581. }
  582. //特批逻辑处理
  583. if (t2.getApproval()==ApprovalNewState.TPBH.getCode()||
  584. t2.getApproval()==ApprovalNewState.DSZBH.getCode()||
  585. t2.getApproval()==ApprovalNewState.TPDSH.getCode()){
  586. if (a.getId().equals(AFTConstants.CAOJIN_AID)){
  587. t.setApproval(ApprovalNewState.DSZDSH.getCode());
  588. }else {
  589. t.setApproval(ApprovalNewState.TPDSH.getCode());
  590. }
  591. }
  592. //生成流转
  593. if (StringUtils.isBlank(t2.getContractNo())) {
  594. //没有合同编号则生成
  595. createContractNo(t);
  596. }else if(!t.getOrderDep().equals(t2.getOrderDep())) {
  597. contractNoReplace(t.getOrderNo(), t2.getContractNo(),t2.getOrderDep());
  598. createContractNo(t);
  599. }
  600. t.setBuyerId(t2.getBuyerId());
  601. // 修改订单信息与中间表信息
  602. updateOrderMid(t);
  603. List<String> aids = new ArrayList<>();
  604. Integer type=NoticeStatus.OTHER.getCode();
  605. StringBuffer str =new StringBuffer();
  606. if (t.getProcessStatus()==ProcessStatus.YPYXJL.getCode()){
  607. type=NoticeStatus.ORDER_START.getCode();
  608. aids.add(a.getManagerId());
  609. Admin manager = adminMapper.queryById(a.getManagerId());
  610. str=str.append(manager.getName()).append(",");
  611. }else if (t.getProcessStatus()==ProcessStatus.YPYXGLY.getCode()){
  612. type=NoticeStatus.ORDER_YES.getCode();
  613. List<Admin> admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(),AFTConstants.SALESMAN_ADMIN);
  614. if (!admins.isEmpty()){
  615. for (Admin admin : admins) {
  616. aids.add(admin.getId());
  617. if (!str.toString().contains(admin.getName()))str.append(admin.getName()).append(",");
  618. }
  619. }
  620. }else if (t.getProcessStatus()==ProcessStatus.YPCW_JSZJ.getCode()){
  621. type=NoticeStatus.ORDER_YES.getCode();
  622. //为了防止中间加或者删除复审,在营销管理员审核的时候重新刷新
  623. List<TOrderExamine> tOrderExamines1 = addTOrderExamines(t2);
  624. for (TOrderExamine e : tOrderExamines1) {
  625. aids.add(e.getAid());
  626. str=str.append(e.getAname()).append(",");
  627. }
  628. }
  629. if (str.length()>0)t.setExamineName(str.substring(0,str.length()-1));
  630. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  631. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),t.getApproval());
  632. //如果有投标,标记成投标订单
  633. tOrderMidMapper.updateBidTypeByOrderNo(t.getOrderNo());
  634. }
  635. //驳回重新发起,需要刷新当天和今天
  636. boolean newOrderFlag=false;
  637. if (t2.getApproval().equals(ApprovalNewState.TPBH.getCode()) ||
  638. t2.getApproval().equals(ApprovalNewState.DSZBH.getCode()) ||
  639. t2.getOrderStatus().equals(OrderNewState.QDSHJJ.getCode()) ||
  640. t2.getOrderStatus().equals(OrderNewState.YBH.getCode())) {
  641. t.setCreateTime(date);
  642. newOrderFlag=true;
  643. tOrderBackMapper.updateByOrderNoAndBackStatus(t.getOrderNo());
  644. }
  645. // 0 相等
  646. // -1 小于
  647. // 1 大于
  648. //liquidation_status 清算状态 0-首付待付请,1-尾款待付清,2-已付请,3-部分退款,4-全部退款
  649. //settlement_amount 已付 total_amount 总价格 first_amount首付
  650. if(!t2.getLiquidationStatus().equals(LiquidationNewState.FULL_REFUND.getCode())) {
  651. if(t2.getSettlementAmount().compareTo(t.getTotalAmount()) == 0){//如果已付等于总价
  652. t.setLiquidationStatus(LiquidationNewState.ALREADY_PAY.getCode());
  653. }else if(t2.getSettlementAmount().compareTo(t.getFirstAmount()) >= 0){//如果大于等于首付
  654. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_LAST_BALANCE.getCode());
  655. } else if(t2.getSettlementAmount().compareTo(t.getFirstAmount()) < 0){//如果小于首付
  656. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_FIRST_BALANCE.getCode());
  657. }
  658. }
  659. tOrderNewMapper.update(t);
  660. pushOrderDunContent(t2);
  661. //计算公出统计
  662. pushOrderPublicReleaseCount(t2);
  663. return 1;
  664. }
  665. private void pushApprovalType(TOrderNewWithBLOBs t) {
  666. if (StringUtils.isBlank(t.getType())|| Objects.equals(t.getApproval(), ApprovalNewState.FTP.getCode())){
  667. tOrderApprovalMapper.deleteByOderNo(t.getOrderNo());
  668. }else {
  669. String[] split = t.getType().split(",");
  670. List<TOrderApproval> tOrderApprovals = tOrderApprovalMapper.selectByOrderNo(t.getOrderNo());
  671. //删除
  672. int index = 0;
  673. for (TOrderApproval e : tOrderApprovals) {
  674. boolean flag=false;
  675. for (String s : split) {
  676. if (Integer.valueOf(s).equals(e.getType())){
  677. flag=true;
  678. break;
  679. }
  680. }
  681. if(!flag){
  682. tOrderApprovalMapper.deleteByPrimaryKey(e.getId());
  683. }else if(e.getType()==0&&index==0){
  684. index++;
  685. if (t.getTypeExplain()!=null){
  686. e.setTypeExplain(t.getTypeExplain());
  687. tOrderApprovalMapper.updateByPrimaryKeySelective(e);
  688. }
  689. }
  690. }
  691. //新增
  692. for (String s : split) {
  693. boolean flag=false;
  694. for (TOrderApproval e : tOrderApprovals) {
  695. if (Integer.valueOf(s).equals(e.getType())){
  696. flag=true;
  697. }
  698. }
  699. if (!flag){
  700. TOrderApproval newTOA=new TOrderApproval();
  701. newTOA.setType(Integer.valueOf(s));
  702. newTOA.setOrderNo(t.getOrderNo());
  703. if(t.getTypeExplain()!=null&&newTOA.getType()==0){
  704. newTOA.setTypeExplain(t.getTypeExplain());
  705. }
  706. tOrderApprovalMapper.insertSelective(newTOA);
  707. }
  708. }
  709. }
  710. }
  711. /**
  712. * 处理订单公出&报销之间数据统计
  713. */
  714. public void pushOrderPublicReleaseCount(TOrderNew orderNew) {
  715. //获取公出信息
  716. List<PublicRelease> list = publicReleaseMapper.selectByOrderNo(orderNew.getOrderNo());
  717. //公出时间统计
  718. BigDecimal durationCount = BigDecimal.ZERO;
  719. //公出次数
  720. int count=0;
  721. List<String> peopleList = new ArrayList<>();
  722. for (PublicRelease e : list) {
  723. durationCount=durationCount.add(BigDecimal.valueOf(e.getDuration()));
  724. if (!peopleList.contains(e.getAid())){
  725. peopleList.add(e.getAid());
  726. }
  727. count++;
  728. }
  729. TOrderPublicReleaseCount out = new TOrderPublicReleaseCount();
  730. out.setOrderNo(orderNew.getOrderNo());
  731. out.setActualDuration(durationCount.doubleValue());
  732. out.setPeopleCount(peopleList.size());
  733. out.setFrequency(count);
  734. TOrderPublicReleaseCount tOrderPublicReleaseCount = tOrderPublicReleaseCountMapper.selectByOrderNo(orderNew.getOrderNo());
  735. //将最大值、审核状态与最大分类传入
  736. pushOrderMaxDuration(orderNew,out);
  737. if (tOrderPublicReleaseCount!=null){
  738. tOrderPublicReleaseCountMapper.updateByOrderNo(out);
  739. }else {
  740. tOrderPublicReleaseCountMapper.insert(out);
  741. }
  742. }
  743. private void pushOrderMaxDuration(TOrderNew orderNew,TOrderPublicReleaseCount out) {
  744. BigDecimal maxDuration;
  745. //获取会员信息
  746. List<TTaskMember> tTaskMembers = tTaskMemberMapper.selectByOrderNo(orderNew.getOrderNo());
  747. int yearSum=0;
  748. String serviceLife = null;
  749. if (tTaskMembers.isEmpty()){
  750. OrderYearMaxDuration orderYearMaxDuration = new OrderYearMaxDuration();
  751. orderYearMaxDuration.setYear(0);
  752. maxDuration = pushMaxDuration(orderNew.getTotalAmount());
  753. //需修改成判定
  754. if (maxDuration.compareTo(new BigDecimal(-1))==0){
  755. orderYearMaxDuration.setMaxDuration(BigDecimal.ZERO);
  756. orderYearMaxDuration.setStatus(1);
  757. out.setMaxProcess(0);
  758. out.setMaxDuration(BigDecimal.ZERO.doubleValue());
  759. out.setMaxType(2);
  760. }else if (maxDuration.compareTo(new BigDecimal(0))==0){
  761. orderYearMaxDuration.setMaxDuration(BigDecimal.ZERO);
  762. orderYearMaxDuration.setStatus(0);
  763. out.setMaxDuration(BigDecimal.ZERO.doubleValue());
  764. out.setMaxType(0);
  765. }else {
  766. orderYearMaxDuration.setMaxDuration(maxDuration);
  767. orderYearMaxDuration.setStatus(0);
  768. out.setMaxDuration(maxDuration.doubleValue());
  769. out.setMaxType(1);
  770. }
  771. orderYearMaxDuration.setOrderNo(orderNew.getOrderNo());
  772. int x = orderYearMaxDurationMapper.queryAllByCount(new OrderYearMaxDuration(orderNew.getOrderNo(), 0));
  773. if (x>0){
  774. orderYearMaxDurationMapper.updateByOrderNoAndYear(orderYearMaxDuration);
  775. }else {
  776. orderYearMaxDurationMapper.insert(orderYearMaxDuration);
  777. }
  778. }else {
  779. for (TTaskMember e : tTaskMembers) {
  780. if (e.getYearSum()!=null&&e.getYearSum()>yearSum){
  781. yearSum=e.getYearSum();
  782. serviceLife=e.getServiceLife();
  783. }
  784. }
  785. List<String> strings = JSON.parseArray(serviceLife, String.class);
  786. List<Integer> collect;
  787. if (strings != null) {
  788. collect = strings.stream().map(this::extractYear).collect(Collectors.toList());
  789. int size = collect.size();
  790. //算出来平均值
  791. BigDecimal divide = orderNew.getTotalAmount().divide(new BigDecimal(size), RoundingMode.HALF_EVEN);
  792. maxDuration = pushMaxDuration(divide);
  793. BigDecimal yearMax=BigDecimal.ZERO;
  794. //如果是无限制或者限制公出则无需判定年份只有是限制需要单独判定
  795. boolean flag=false;
  796. for (Integer year : collect) {
  797. OrderYearMaxDuration orderYearMaxDuration = new OrderYearMaxDuration();
  798. orderYearMaxDuration.setYear(year);
  799. //需修改成判定
  800. if (maxDuration.compareTo(new BigDecimal(-1))==0){
  801. orderYearMaxDuration.setMaxDuration(BigDecimal.ZERO);
  802. orderYearMaxDuration.setStatus(1);
  803. out.setMaxProcess(0);
  804. out.setMaxDuration(BigDecimal.ZERO.doubleValue());
  805. out.setMaxType(2);
  806. }else if (maxDuration.compareTo(new BigDecimal(0))==0){
  807. orderYearMaxDuration.setMaxDuration(BigDecimal.ZERO);
  808. orderYearMaxDuration.setStatus(0);
  809. out.setMaxDuration(BigDecimal.ZERO.doubleValue());
  810. out.setMaxType(0);
  811. }else {
  812. yearMax = yearMax.add(maxDuration);
  813. orderYearMaxDuration.setYear(year);
  814. orderYearMaxDuration.setMaxDuration(yearMax);
  815. orderYearMaxDuration.setStatus(0);
  816. flag=true;
  817. }
  818. orderYearMaxDuration.setOrderNo(orderNew.getOrderNo());
  819. int x = orderYearMaxDurationMapper.queryAllByCount(new OrderYearMaxDuration(orderNew.getOrderNo(), year));
  820. if (x>0){
  821. orderYearMaxDurationMapper.updateByOrderNoAndYear(orderYearMaxDuration);
  822. }else {
  823. orderYearMaxDurationMapper.insert(orderYearMaxDuration);
  824. }
  825. }
  826. if(flag){
  827. List<OrderYearMaxDuration> orderYearMaxDurations = orderYearMaxDurationMapper.selectByOrderNo(orderNew.getOrderNo());
  828. // 获取当前日期,提取当前年份
  829. LocalDate currentDate = LocalDate.now();
  830. int currentYear = currentDate.getYear();
  831. OrderYearMaxDuration matchedYearOrLast = findMatchedYearOrLast(orderYearMaxDurations, currentYear);
  832. out.setMaxDuration(matchedYearOrLast.getMaxDuration().doubleValue());
  833. out.setMaxType(1);
  834. }
  835. }else {
  836. //异常单处理
  837. OrderYearMaxDuration orderYearMaxDuration = new OrderYearMaxDuration();
  838. orderYearMaxDuration.setYear(0);
  839. orderYearMaxDuration.setOrderNo(orderNew.getOrderNo());
  840. maxDuration = pushMaxDuration(orderNew.getTotalAmount());
  841. //需修改成判定
  842. if (maxDuration.compareTo(new BigDecimal(-1))==0){
  843. orderYearMaxDuration.setMaxDuration(BigDecimal.ZERO);
  844. orderYearMaxDuration.setStatus(1);
  845. out.setMaxDuration(BigDecimal.ZERO.doubleValue());
  846. out.setMaxProcess(0);
  847. out.setMaxType(2);
  848. }else if (maxDuration.compareTo(new BigDecimal(0))==0){
  849. orderYearMaxDuration.setMaxDuration(BigDecimal.ZERO);
  850. orderYearMaxDuration.setStatus(0);
  851. out.setMaxDuration(BigDecimal.ZERO.doubleValue());
  852. out.setMaxType(0);
  853. }else {
  854. orderYearMaxDuration.setMaxDuration(maxDuration);
  855. orderYearMaxDuration.setStatus(0);
  856. out.setMaxDuration(maxDuration.doubleValue());
  857. out.setMaxType(1);
  858. }
  859. int x = orderYearMaxDurationMapper.queryAllByCount(new OrderYearMaxDuration(orderNew.getOrderNo(), 0));
  860. if (x>0){
  861. orderYearMaxDurationMapper.updateByOrderNoAndYear(orderYearMaxDuration);
  862. }else {
  863. orderYearMaxDurationMapper.insert(orderYearMaxDuration);
  864. }
  865. }
  866. }
  867. if(out.getMaxProcess()==null)out.setMaxProcess(0);
  868. }
  869. private OrderYearMaxDuration findMatchedYearOrLast(List<OrderYearMaxDuration> orderYearMaxDurations, int currentYear) {
  870. for (OrderYearMaxDuration e : orderYearMaxDurations) {
  871. if (e.getYear()==currentYear){
  872. return e;
  873. }
  874. }
  875. return orderYearMaxDurations.get(orderYearMaxDurations.size()-1);
  876. }
  877. private Integer extractYear(String yearStr) {
  878. Pattern pattern = Pattern.compile("(\\d{4})");
  879. Matcher matcher = pattern.matcher(yearStr);
  880. if (matcher.find()) {
  881. return Integer.parseInt(matcher.group(1));
  882. }
  883. throw new BusinessException("年份提取失败");
  884. }
  885. @Override
  886. public List<TOrderNew> selectGetAll() {
  887. return tOrderNewMapper.selectgetAll();
  888. }
  889. @Override
  890. public Object addOperationGuaranteeAudit(String orderNo, Integer type, String reason) {
  891. TOrderNew t= new TOrderNew();
  892. TOrderNew t2= checkDeleteSign(orderNo);
  893. if (!Objects.equals(t2.getProcessStatus(), ProcessStatus.YYBZSH.getCode())){
  894. throw new BusinessException("订单审核状态错误");
  895. }
  896. List<String> aids = new ArrayList<>();
  897. StringBuffer str =new StringBuffer();
  898. t.setOrderNo(orderNo);
  899. TOrderLog tl=new TOrderLog();
  900. tl.setAid(TokenManager.getAdminId());
  901. tl.setOrderNo(orderNo);
  902. tl.setProcess(OrderLogProcess.YYBZSHTG.getCode());
  903. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  904. Integer noticeType=0;
  905. if (type==0){
  906. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  907. t.setOrderStatus(OrderNewState.YBH.getCode());
  908. tl.setProcess(OrderLogProcess.YYBZSHBH.getCode());
  909. aids.add(t.getSalesmanId());
  910. noticeType= NoticeStatus.ORDER_NO.getCode();
  911. } else if (type==1) {
  912. t.setProcessStatus(ProcessStatus.YPTPSH.getCode());
  913. tl.setProcess(OrderLogProcess.YYBZSHTG.getCode());
  914. if (t2.getApproval().equals(ApprovalNewState.TPDSH.getCode())){
  915. str.append(order.getApprovalName()).append(",");
  916. aids.add(order.getApprovalAid());
  917. }else if (t2.getApproval().equals(ApprovalNewState.DSZDSH.getCode())){
  918. List<Admin> admins = adminMapper.selectAdminByRoleType(AFTConstants.APPROVAL_DECISION);
  919. admins.forEach(e->{
  920. aids.add(e.getId());
  921. str.append(e.getName()).append(",");
  922. });
  923. }
  924. t.setExamineName(str.substring(0,str.length()-1));
  925. noticeType= NoticeStatus.ORDER_YES.getCode();
  926. }
  927. addOrderLog(tl,reason);
  928. pushGeneralSendNoticeAndEmail(aids, noticeType,order, TokenManager.getAdminId(),t2.getApproval());
  929. return tOrderNewMapper.update(t);
  930. }
  931. /**
  932. * 处理订单公出&报销最大公出
  933. */
  934. private BigDecimal pushMaxDuration(BigDecimal totalAmount) {
  935. BigDecimal res=BigDecimal.ZERO;
  936. int status=1;
  937. if (totalAmount.compareTo(BigDecimal.valueOf(1)) < 0) {
  938. res=BigDecimal.ZERO;
  939. } else if (totalAmount.compareTo(BigDecimal.valueOf(3))<0) {
  940. res=BigDecimal.valueOf(15);
  941. } else if (totalAmount.compareTo(BigDecimal.valueOf(5))<0) {
  942. res=BigDecimal.valueOf(45);
  943. } else if (totalAmount.compareTo(BigDecimal.valueOf(10))<0) {
  944. res=BigDecimal.valueOf(120);
  945. } else if (totalAmount.compareTo(BigDecimal.valueOf(10))>=0) {
  946. res=BigDecimal.valueOf(-1);
  947. }
  948. return res;
  949. }
  950. public void updateFinanceCount(String aid, Date createTime){
  951. String startTime= DateUtils.formatDate(createTime,AFTConstants.YYYYMMDD);
  952. String endTime=startTime+" 23:59:59";
  953. int i = financeCountMapper.selectByAidAndDatesGetCount(aid, startTime);
  954. if (i==0){
  955. FinanceCount financeCount= FinanceCount.initialization(aid,startTime);
  956. financeCount.setOrderCount(1);
  957. financeCount.setOrderUnauditedCount(1);
  958. financeCountMapper.insertSelective(financeCount);
  959. }else {
  960. financeCountMapper.updateOrderCountAdd(aid,startTime);
  961. }
  962. }
  963. private void updateOrderMid(TOrderNew t) {
  964. TOrderMid tm=tOrderMidMapper.selectByOrderNo(t.getOrderNo());
  965. Admin admin=adminMapper.selectFinanceAdminByOrderDep(t.getOrderDep());
  966. Admin a=adminMapper.selectAllByid(TokenManager.getAdminId());
  967. User u=userMapper.queryById(t.getBuyerId());
  968. if (tm==null) {
  969. tm=new TOrderMid();
  970. }
  971. tm.setOrderNo(t.getOrderNo());
  972. if (u!=null&&u.getNickname()!=null) {
  973. tm.setBuyerName(u.getNickname());
  974. }
  975. if (admin!=null&&admin.getName()!=null) {
  976. t.setFinanceId(admin.getId());
  977. tm.setFinanceId(admin.getId());
  978. tm.setFinanceName(admin.getName());
  979. }
  980. if(a.getId()!=null&&a.getName()!=null) {
  981. tm.setSalesmanId(a.getId());
  982. tm.setSalesmanName(a.getName());
  983. }
  984. //判断订单是否为会员订单
  985. int i =tOrderMidMapper.judgeProjectType(t.getOrderNo());
  986. UserMid um=new UserMid();
  987. boolean flag=false;
  988. um.setUid(t.getBuyerId());
  989. if (i>0){
  990. tm.setProjectType(1);
  991. um.setMember(1);
  992. flag=true;
  993. }else{
  994. tm.setProjectType(0);
  995. }
  996. //如果订单金额超过10W标记为大客户
  997. if(t.getTotalAmount().compareTo(new BigDecimal("10"))>=0) {
  998. um.setUid(t.getBuyerId());
  999. um.setAid(t.getSalesmanId());
  1000. um.setBigCustomer(1);
  1001. flag=true;
  1002. }
  1003. if (flag){
  1004. int x=userMidMapper.updateByUid(um);
  1005. if (x==0) {
  1006. um.setAid(t.getSalesmanId());
  1007. userMidMapper.insertSelective(um);
  1008. }
  1009. }
  1010. tm.setExpectProfit(t.getTotalAmount());
  1011. tm.setDepName(tOrderMidMapper.selectDepNameByDepid(t.getOrderDep()));
  1012. if (tm.getId()!=null) {
  1013. tOrderMidMapper.update(tm);
  1014. }else {
  1015. tOrderMidMapper.insertSelective(tm);
  1016. }
  1017. //
  1018. orderProjectService.updateMidServiceProject(t.getOrderNo());
  1019. }
  1020. /**
  1021. * 新建合同编号,优先获取闲置合同编号,否则按年份生成编号
  1022. */
  1023. private void createContractNo(TOrderNew t) {
  1024. //根据订单部门或许合同编号前缀
  1025. Department dep=departmentMapper.selectByPrimaryKey(t.getOrderDep());
  1026. //获取日期年份
  1027. Calendar c=Calendar.getInstance();
  1028. int y=c.get(Calendar.YEAR);
  1029. if (dep==null||StringUtils.isBlank(dep.getAbbreviation())) {
  1030. throw new BusinessException(new Error( "该部门缩写不存在","该部门缩写不存在"));
  1031. }
  1032. IdleContractNo i=idleContractNoMapper.selectByAbbreviation(dep.getAbbreviation(),y);
  1033. if (i!=null&&i.getContractNo()!=null) {
  1034. t.setContractNo(i.getContractNo());
  1035. idleContractNoMapper.deleteByPrimaryKey(i.getId());
  1036. }else {
  1037. //根据前缀查询最大编号
  1038. String max=departmentMapper.getMaxAbbreviation(dep.getAbbreviation()+"-");
  1039. String sno=null;
  1040. if (StringUtils.isBlank(max)||max.length()<13) {
  1041. String cn=""+dep.getAbbreviation()+"-"+y+"0001";
  1042. cn=iterationNo(cn,dep.getAbbreviation(),y,1);
  1043. t.setContractNo(cn);
  1044. }else {
  1045. int ty=Integer.parseInt(max.substring(max.indexOf("-")+1, max.length()-4));
  1046. int no=Integer.parseInt(max.substring(max.length()-4, max.length()));
  1047. //得出字符串
  1048. sno = countNo(dep.getAbbreviation(), sno, ty, no);
  1049. //迭代得出最后编码
  1050. sno=iterationNo(sno,dep.getAbbreviation(),ty,no);
  1051. //年份小于等于则获取最大值加1,大于则获取最新年份
  1052. if (y<=ty) {
  1053. t.setContractNo(sno);
  1054. }else {
  1055. t.setContractNo(""+dep.getAbbreviation()+"-"+y+"0001");
  1056. }
  1057. }
  1058. }
  1059. }
  1060. private String iterationNo(String sno ,Object mp, int ty, int no) {
  1061. if (tOrderNewMapper.checkContractNo(sno)>0) {
  1062. int i=Integer.parseInt(sno.substring(sno.indexOf("-")+5, sno.length()));
  1063. sno=countNo(mp, sno, ty, i);
  1064. sno=iterationNo(sno,mp,ty,i);
  1065. }
  1066. return sno;
  1067. }
  1068. private String countNo(Object object, String sno, int ty, int no) {
  1069. no++;
  1070. if (no>0&&no<10) {
  1071. sno=object+"-"+ty+"000"+no;
  1072. }else if (no>9&&no<100) {
  1073. sno=object+"-"+ty+"00"+no;
  1074. } else if (no>99&&no<1000) {
  1075. sno=object+"-"+ty+"0"+no;
  1076. } else if(no>1000){
  1077. sno=object+"-"+ty+no;
  1078. }
  1079. return sno;
  1080. }
  1081. public void addOrderLog(TOrderLog tl, String reason) {
  1082. tl.setAid(TokenManager.getAdminId());
  1083. if(reason!=null) {
  1084. tl.setRemarks(reason);
  1085. }
  1086. tOrderLogMapper.insertSelective(tl);
  1087. }
  1088. public void addOrderLog(String orderNo,Integer process , String reason) {
  1089. TOrderLog tl=new TOrderLog();
  1090. tl.setOrderNo(orderNo);
  1091. tl.setProcess(process);
  1092. addOrderLog( tl, reason);
  1093. }
  1094. @Override
  1095. public TOrderNewBo getOrderNewDetail(String orderNo) {
  1096. TOrderNewBo tOrder= tOrderNewMapper.getOrderNewDetail(orderNo);
  1097. //设置合同查看权限
  1098. tOrder.setContractPictureUrl(pushOrderService.processStatusConstant(tOrder));
  1099. pushMyExamine(orderNo, tOrder);
  1100. if (TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CUSTOMER_SERVICE)||
  1101. tOrder.getSalesmanId().equals(TokenManager.getAdminId())) {
  1102. }else {
  1103. tOrder.setContacts("***");
  1104. tOrder.setContactMobile("***");
  1105. tOrder.setLegalPerson("***");
  1106. tOrder.setLegalPersonTel("***");
  1107. }
  1108. return tOrder;
  1109. }
  1110. private void pushMyExamine(String orderNo, TOrderNewBo tOrder) {
  1111. if (TokenManager.hasRole(AFTConstants.FINANCE)||TokenManager.hasRole(AFTConstants.TECH_ADMIN)){
  1112. int i = tOrderExamineMapper.selectByOrderNoAndAid(orderNo, TokenManager.getAdminId());
  1113. if (i==0) tOrder.setMyExamine(1);
  1114. else tOrder.setMyExamine(0);
  1115. }
  1116. }
  1117. @Override
  1118. public int createOrderDun(String orderDun,String orderNo) {
  1119. List<TOrderDun> l= JSON.parseArray(orderDun, TOrderDun.class);
  1120. List<TOrderDun> l2=tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
  1121. if (l!=null&&!l.isEmpty()) {
  1122. for (TOrderDun t : l) {
  1123. if (t.getId()==null||t.getId().equals("")) {//Id为空新增
  1124. if (tOrderDunMapper.checkOrderDun(t.getDunSubject(),orderNo)>0) {
  1125. throw new BusinessException(new Error( "该截点已经存在","该截点已经存在"));
  1126. }
  1127. t.setId(UUID.randomUUID().toString());
  1128. t.setDunBy(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1129. t.setDunStatus(0);//未启动
  1130. tOrderDunMapper.insertSelective(t);
  1131. }else {
  1132. tOrderDunMapper.updateByPrimaryKeySelective(t);
  1133. }
  1134. }
  1135. }
  1136. boolean flag=true;
  1137. for (TOrderDun t2 : l2) {
  1138. if (l.isEmpty()) {
  1139. tOrderDunMapper.deleteByPrimaryKey(t2.getId());
  1140. }else {
  1141. for (TOrderDun t : l) {
  1142. if (t2.getId().equals(t.getId())) {//查询集合与返回集合比较查出删除项
  1143. flag=false;
  1144. }
  1145. }
  1146. if (t2.getId()!=null&&flag) {
  1147. tOrderDunMapper.deleteByPrimaryKey(t2.getId());
  1148. }
  1149. flag=true;
  1150. }
  1151. }
  1152. return 1;
  1153. }
  1154. @SuppressWarnings("unchecked")
  1155. @Override
  1156. public Pagination<TOrderNewBo> orderNewList(InputOrderNewListBo in) {
  1157. Map<String, Object> params = new HashMap<>();
  1158. Pagination<TOrderNewBo> x = addParams(in, params);
  1159. if (x != null) return x;
  1160. Pagination<TOrderNewBo> p = (Pagination<TOrderNewBo>)findPage("selectOrderNewListByPage", "selectOrderNewListCount", params, in.getPageNo(), in.getPageSize());
  1161. if (TokenManager.hasRole(AFTConstants.TECH_ADMIN)){
  1162. List<TOrderNewBo> list = (List<TOrderNewBo>) p.getList();
  1163. for (TOrderNewBo o : list) {
  1164. int i = tOrderExamineMapper.selectByOrderNoAndAid(o.getOrderNo(), TokenManager.getAdminId());
  1165. if (i==0) o.setMyExamine(1);
  1166. else o.setMyExamine(0);
  1167. }
  1168. }
  1169. return p;
  1170. }
  1171. private Pagination<TOrderNewBo> addParams(InputOrderNewListBo in, Map<String, Object> params) {
  1172. // specially 0 个人 1 营销员管理 2 驳回 3 特批 4 咨询师管理 5部门订单查询 6客服查询 7统计签单订单 8客户订单列表 9 复审订单 10 营销经理
  1173. if (in.getSpecially()!=null&&(in.getSpecially()==0|| in.getSpecially()==1|| in.getSpecially()==2||
  1174. in.getSpecially()==4|| in.getSpecially()==5|| in.getSpecially()==7|| in.getSpecially()==10|| in.getSpecially()==11)) {
  1175. //0 个人 1 营销员管理 2 驳回 3 特批 4 咨询师管理 5部门订单查询
  1176. if (in.getSpecially()==0){
  1177. params.put("maxStatus", in.getMaxStatus());
  1178. }
  1179. if (in.getSpecially()!=3&& in.getSpecially()!=4) {
  1180. if (in.getAid() ==null){
  1181. params.put("aid", TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1182. }else{
  1183. params.put("aid", in.getAid());
  1184. }
  1185. }
  1186. //(咨询师管理列表 0 未分配 1部分 2全部)
  1187. if(in.getSpecially()==4) {
  1188. params.put("distribution", in.getDistribution());
  1189. }
  1190. }else if(in.getSpecially()==8){
  1191. if (StringUtils.isNotBlank(in.getUid())) {
  1192. params.put("uid", in.getUid());
  1193. }
  1194. }else if (in.getSpecially()==9){
  1195. if (StringUtils.isNotBlank(in.getAid())) {
  1196. params.put("aid", in.getAid());
  1197. }
  1198. }else if (in.getSpecially()==3){
  1199. params.put("aid", TokenManager.getAdminId());
  1200. }else if (in.getSpecially()==12){
  1201. PublicConfig config=publicConfigMapper.queryById(1);
  1202. String aid=TokenManager.getAdminId();
  1203. int configType=9;
  1204. if (aid.equals(config.getTechAuditor())){
  1205. configType=1;
  1206. }else if (aid.equals(config.getFinanceAuditor())){
  1207. configType=2;
  1208. }else if (aid.equals(config.getOtherAuditor())){
  1209. configType=3;
  1210. }
  1211. params.put("configType", configType);
  1212. params.put("aid", aid);
  1213. }
  1214. params.put("specially", in.getSpecially());
  1215. if (StringUtils.isNotBlank(in.getName())) {
  1216. params.put("name", in.getName());
  1217. }
  1218. if(in.getMaxProcessStatus()!=null)params.put("maxProcessStatus", in.getMaxProcessStatus());
  1219. // 计算出所有本部门及所属部门的ID
  1220. if(in.getSpecially()==1|| in.getSpecially()==5) {
  1221. List<String>departmentList=new ArrayList<>();
  1222. if (in.getDeps()!=null){
  1223. departmentList=departmentService.selectSubDeps(in.getDeps());
  1224. if (departmentList==null||departmentList.isEmpty()){
  1225. return new Pagination<>(1,10,0);
  1226. }
  1227. }else {
  1228. departmentList=departmentService.selectMyDeps();
  1229. }
  1230. params.put("deps",departmentList);
  1231. }else {
  1232. if (in.getDeps()!=null) {
  1233. params.put("deps",departmentService.parseArray(in.getDeps()));
  1234. }
  1235. }
  1236. if (StringUtils.isNotBlank(in.getContractNo())) {
  1237. params.put("contractNo", in.getContractNo());
  1238. }
  1239. if (null!= in.getLiquidationStatus()) {
  1240. params.put("liquidationStatus", in.getLiquidationStatus());
  1241. }
  1242. if (null != in.getApproval()) {
  1243. params.put("approval", in.getApproval());
  1244. }
  1245. if(null != in.getAmountStatus()) {
  1246. params.put("amountStatus", in.getAmountStatus());
  1247. }
  1248. if (StringUtils.isNotBlank(in.getOrderNo())) {
  1249. params.put("orderNo", in.getOrderNo().trim());
  1250. }
  1251. if (StringUtils.isNotBlank(in.getStarTime())) {
  1252. params.put("starTime", in.getStarTime());
  1253. }
  1254. if (StringUtils.isNotBlank(in.getEndTime())) {
  1255. params.put("endTime", in.getEndTime()+" 23:59:59");
  1256. }
  1257. if (StringUtils.isNotBlank(in.getContractStart())) {
  1258. params.put("contractStart", in.getContractStart());
  1259. }
  1260. if (StringUtils.isNotBlank(in.getContractEnd())) {
  1261. params.put("contractEnd", in.getContractEnd()+" 23:59:59");
  1262. }
  1263. if(null != in.getProjectType()) {
  1264. params.put("projectType", in.getProjectType());
  1265. }
  1266. if(null != in.getProcessStatus()) {
  1267. params.put("processStatus", in.getProcessStatus());
  1268. }
  1269. if(null != in.getTag()){
  1270. params.put("tag",in.getTag());
  1271. }
  1272. if(in.getType()!=null){
  1273. if (!in.getType().equals("0,1,2,3,4,5,6,7")){
  1274. String[] split = in.getType().split(",");
  1275. params.put("type", split);
  1276. }
  1277. }
  1278. params.put("outsource", in.getOutsource());
  1279. params.put("scoreStatus", in.getScoreStatus());
  1280. if (in.getManageType()!=null){
  1281. params.put("manageType", in.getManageType());
  1282. }
  1283. return null;
  1284. }
  1285. @Override
  1286. public Pagination<TOrderNewBo> statisticsOrderList(InputStatisticsOrderList in) {
  1287. Map<String, Object> params = new HashMap<String, Object>();
  1288. if (in.getProvince()!=null) {
  1289. params.put("province",in.getProvince());
  1290. if (in.getSalesType()!=null) {
  1291. params.put("salesType",in.getSalesType());
  1292. }
  1293. if (in.getOrderNo()!=null) {
  1294. params.put("orderNo",in.getOrderNo());
  1295. }
  1296. if (in.getName()!=null) {
  1297. params.put("name",in.getName());
  1298. }
  1299. if (in.getContractNo()!=null) {
  1300. params.put("contractNo",in.getContractNo());
  1301. }
  1302. if (in.getLiquidationStatus()!=null) {
  1303. params.put("liquidationStatus",in.getLiquidationStatus());
  1304. }
  1305. if (in.getApproval()!=null) {
  1306. params.put("approval",in.getApproval());
  1307. }
  1308. if (in.getAmountStatus()!=null) {
  1309. params.put("amountStatus",in.getAmountStatus());
  1310. }
  1311. if (in.getStartDate()!=null) {
  1312. params.put("startDate",in.getStartDate());
  1313. }
  1314. if (in.getEndDate()!=null) {
  1315. params.put("endDate",in.getEndDate()+" 23:59:59");
  1316. }
  1317. } else {
  1318. if (in.getSalesType()!=null) {
  1319. params.put("salesType",in.getSalesType());
  1320. }
  1321. if (in.getOrderNo()!=null) {
  1322. params.put("orderNo",in.getOrderNo());
  1323. }
  1324. if (in.getName()!=null) {
  1325. params.put("name",in.getName());
  1326. }
  1327. if (in.getContractNo()!=null) {
  1328. params.put("contractNo",in.getContractNo());
  1329. }
  1330. if (in.getLiquidationStatus()!=null) {
  1331. params.put("liquidationStatus",in.getLiquidationStatus());
  1332. }
  1333. if (in.getApproval()!=null) {
  1334. params.put("approval",in.getApproval());
  1335. }
  1336. if (in.getAmountStatus()!=null) {
  1337. params.put("amountStatus",in.getAmountStatus());
  1338. }
  1339. if (in.getStartDate()!=null) {
  1340. params.put("startDate",in.getStartDate());
  1341. }
  1342. if (in.getEndDate()!=null) {
  1343. params.put("endDate",in.getEndDate()+" 23:59:59");
  1344. }
  1345. }
  1346. if (in.getDepId()!=null) {
  1347. params.put("depId",in.getDepId());
  1348. }
  1349. Pagination<TOrderNewBo> p = (Pagination<TOrderNewBo>)findPage("selectstatisticsOrderListPage",
  1350. "selectstatisticsOrderListCount", params, in.getPageNo(), in.getPageSize());
  1351. return p;
  1352. }
  1353. @Override
  1354. public int updateSalesType(TOrderNew in) {
  1355. return tOrderNewMapper.update(in);
  1356. }
  1357. @Override
  1358. public int updateOrderNew(String orderNo, Integer orderStatus,String reason,Integer outsource, TOrderOutsource o) {
  1359. TOrderNew t= new TOrderNew();
  1360. TOrderNew t2= checkDeleteSign(orderNo);
  1361. t.setOrderNo(orderNo);
  1362. t.setOrderDep(t2.getOrderDep());
  1363. t.setSalesmanId(t2.getSalesmanId());
  1364. List<String> aids = new ArrayList<>();
  1365. Integer type=null;
  1366. TOrderLog tl=new TOrderLog();
  1367. tl.setAid(TokenManager.getAdminId());
  1368. tl.setOrderNo(orderNo);
  1369. if (orderStatus.equals(OrderNewState.QDSHTG.getCode())) {
  1370. t.setOutsource(outsource);
  1371. if (t2.getProcessStatus()==ProcessStatus.YPYXJL.getCode()){
  1372. tl.setProcess(OrderLogProcess.YXJLTT.getCode());
  1373. t.setProcessStatus(ProcessStatus.YPYXGLY.getCode());
  1374. aids.addAll(adminMapper.listNameByDepAndName(t2.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  1375. }else if (t2.getProcessStatus()==ProcessStatus.YPYXGLY.getCode()){
  1376. tl.setProcess(OrderLogProcess.SH.getCode());
  1377. t.setProcessStatus(ProcessStatus.YPCW_JSZJ.getCode());
  1378. //为了防止中间加或者删除复审,在营销管理员审核的时候重新刷新
  1379. List<TOrderExamine> tOrderExamines1 = addTOrderExamines(t2);
  1380. for (TOrderExamine e : tOrderExamines1) {
  1381. aids.add(e.getAid());
  1382. }
  1383. Admin admin=adminMapper.selectFinanceAdminByOrderDep(t2.getOrderDep());
  1384. updateFinanceCount(admin.getId(),t2.getCreateTime());
  1385. }
  1386. type=NoticeStatus.ORDER_YES.getCode();
  1387. //增加日志
  1388. addOrderLog(tl,reason);
  1389. }else if (orderStatus.equals(OrderNewState.QDSHJJ.getCode())) {//如果不通过新增驳回
  1390. if (outsource==0) {//非外包
  1391. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  1392. addBackOrder(orderNo, reason);
  1393. }
  1394. aids.add(t2.getSalesmanId());
  1395. type=NoticeStatus.ORDER_NO.getCode();
  1396. }
  1397. t.setOrderStatus(orderStatus);
  1398. //设置审核人员名称
  1399. pushExamineName(t);
  1400. tOrderNewMapper.update(t);
  1401. if (aids.isEmpty()) {
  1402. throw new BusinessException(new Error( "邮件发送失败,对方设置邮箱错误","邮件发送失败,对方设置邮箱错误"));
  1403. }
  1404. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  1405. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),t2.getApproval());
  1406. return 1;
  1407. }
  1408. @Override
  1409. public void pushExamineName(TOrderNew t){
  1410. StringBuffer str =new StringBuffer();
  1411. if (t.getProcessStatus()==ProcessStatus.YPYXY.getCode()){
  1412. Admin admin = adminMapper.queryById(t.getSalesmanId());
  1413. t.setExamineName(admin.getName());
  1414. }else if (t.getProcessStatus()==ProcessStatus.YPYXJL.getCode()){
  1415. Admin a = adminMapper.queryById(t.getSalesmanId());
  1416. Admin admin = adminMapper.queryById(a.getManagerId());
  1417. t.setExamineName(admin.getName());
  1418. }else if (t.getProcessStatus()==ProcessStatus.YPYXGLY.getCode()){
  1419. if (t.getOrderDep()!=null){
  1420. List<Admin> admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN);
  1421. for (Admin admin : admins) {
  1422. str=str.append(admin.getName()).append(",");
  1423. }
  1424. }
  1425. }else if (t.getProcessStatus()==ProcessStatus.YPCW_JSZJ.getCode()){
  1426. if (t.getOrderDep()!=null){
  1427. List<TOrderExamine> list = tOrderExamineMapper.selectByOrderNo(t.getOrderNo(),0);
  1428. for (TOrderExamine e : list) {
  1429. str=str.append(e.getAname()).append(",");
  1430. }
  1431. }
  1432. }else if (t.getProcessStatus()==ProcessStatus.YPYXY.getCode()){
  1433. t.setExamineName("");
  1434. } else {
  1435. t.setExamineName("");
  1436. }
  1437. if (StringUtils.isNotBlank(str))t.setExamineName(str.substring(0,str.length()-1));
  1438. }
  1439. /**
  1440. * 订单分配触发
  1441. */
  1442. @Override
  1443. public void pushOrderDun(TOrderNew b) {
  1444. if(b.getApproval()==0){
  1445. Date date = new Date();
  1446. List<OutNewOrderDunBo> list=newOrderDunMapper.selectListNewOrderDun(b.getOrderNo(),0);
  1447. for (OutNewOrderDunBo o : list) {
  1448. if (o.getDunType()==1) {
  1449. o.setStatus(1);
  1450. o.setStartTime(date);
  1451. newOrderDunMapper.updateByPrimaryKeySelective(o);
  1452. //催款统计算
  1453. TOrderMid tm = pushOrderMidDun(b.getOrderNo(), b.getSettlementAmount(), date);
  1454. TArrearsDun t=new TArrearsDun();
  1455. t.setOrderArrears(tm.getOrderArrears());
  1456. t.setOrderReceivables(tm.getOrderReceivables());
  1457. if (tArrearsDunMapper.checkOrderNo(b.getOrderNo(),null)<1) {
  1458. t.setOrderNo(b.getOrderNo());
  1459. tArrearsDunMapper.insertSelective(t);
  1460. }else if(tArrearsDunMapper.checkOrderNo(b.getOrderNo(),0)>0){
  1461. Integer i=tArrearsDunMapper.selectByStatus(b.getOrderNo(), 0);
  1462. t.setId(i);
  1463. tArrearsDunMapper.updateByPrimaryKeySelective(t);
  1464. }
  1465. addNewDunNoticAndSendEmail(b.getOrderNo(),o);
  1466. }
  1467. }
  1468. }
  1469. }
  1470. /**
  1471. * NewProjectStatus.YXZ.getCode()
  1472. * @param orderNo 订单编号
  1473. * @param settlementAmount 已收金额
  1474. * @param date 日期
  1475. * @return
  1476. */
  1477. @Override
  1478. @Synchronized
  1479. public TOrderMid pushOrderMidDun(String orderNo, BigDecimal settlementAmount, Date date) {
  1480. TOrderMid tm=tOrderMidMapper.selectByOrderNo(orderNo);
  1481. // 代码看不出异常,但是计算会出现重复,则修改方案,每一次触发,则重新统计
  1482. // tm.setOrderReceivables(tm.getOrderReceivables().add(o.getMoney()));
  1483. List<OutNewOrderDunBo> list =newOrderDunMapper.selectListNewOrderDun(orderNo,1);
  1484. BigDecimal cout=new BigDecimal(0);
  1485. for (OutNewOrderDunBo bo : list) {
  1486. BigDecimal money = bo.getMoney();
  1487. if (money!=null)cout=cout.add(money);
  1488. }
  1489. tm.setOrderReceivables(cout);
  1490. BigDecimal sum=tm.getOrderReceivables().subtract(settlementAmount);
  1491. //如果金额大于欠款修改欠款为0
  1492. if (sum.compareTo(new BigDecimal(0))<0) {
  1493. sum=new BigDecimal(0);
  1494. }
  1495. tm.setOrderArrears(sum);
  1496. if (tm.getDunStartTime()==null) {
  1497. tm.setDunStartTime(date);
  1498. }
  1499. tOrderMidMapper.update(tm);
  1500. return tm;
  1501. }
  1502. @Override
  1503. public TOrderMid pushOrderMidDun(TOrderNew t) {
  1504. return pushOrderMidDun(t.getOrderNo(),t.getSettlementAmount(),new Date());
  1505. }
  1506. @Override
  1507. public void addNewDunNoticAndSendEmail(String orderNo, OutNewOrderDunBo o) {
  1508. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1509. TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  1510. addNotic(NoticeStatus.ORDER_DUN.getCode(), b,null);
  1511. try {
  1512. NewDunsendEmail(o.getOrderNo(),o.getId(), a, b);
  1513. } catch (UnsupportedEncodingException | MessagingException e) {
  1514. throw new BusinessException(new Error("邮件发送错误。"));
  1515. }
  1516. }
  1517. @Override
  1518. public void addTimingTaskNewDunNoticAndSendEmail(OutNewOrderDunBo o, Integer type) {
  1519. AdminListBo a = adminMapper.getDeptNameByAid("1");
  1520. TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  1521. StringBuilder sb=new StringBuilder();
  1522. Integer noticType=NoticeStatus.ORDER_DUN.getCode();
  1523. if (type==1){
  1524. noticType=NoticeStatus.MENBER_DUN.getCode();
  1525. sb.append("客户名称【").append(b.getUserName()).append("】催款截点将于").append(o.getCustomizeTimes()).append("进行催款,会员项目请提前2个月催款,以免延误会员派单");
  1526. }else {
  1527. sb.append("客户名称【").append(b.getUserName()).append("】,按时触发应收款欠款,请按时催款,并及时增减项目,以免项目延期等问题。");
  1528. }
  1529. addNotic(noticType, b,sb.toString());
  1530. try {
  1531. NewDunsendEmail(o.getOrderNo(),o.getId(), a, b,noticType,sb.toString());
  1532. } catch (UnsupportedEncodingException | MessagingException e) {
  1533. throw new BusinessException(new Error("邮件发送错误。"));
  1534. }
  1535. }
  1536. public void NewDunsendEmail(String orderNo,Integer dunId,AdminListBo a,TOrderNewBo b) throws UnsupportedEncodingException, MessagingException{
  1537. NewDunsendEmail( orderNo, dunId, a, b, NoticeStatus.ORDER_DUN.getCode(),null);
  1538. }
  1539. public void NewDunsendEmail(String orderNo,Integer dunId,AdminListBo a,TOrderNewBo b,Integer noticType,String content) throws UnsupportedEncodingException, MessagingException{
  1540. NewOrderDun ob=newOrderDunMapper.selectByPrimaryKey(dunId);
  1541. AdminListBo a2 = adminMapper.getDeptNameByAid(b.getSalesmanId());
  1542. String dunTypeName="";
  1543. if(ob.getDunType()!=null&&ob.getProjectType()!=null&&ob.getDunType()!=0) {
  1544. dunTypeName= NewOrderDunType.getValueByCode(Integer.valueOf(""+ob.getProjectType()+ob.getDunType()));
  1545. }else if(ob.getDunType()!=null&&ob.getProjectType()!=null&&ob.getDunType()==0){
  1546. dunTypeName= NewOrderDunType.getValueByCode(Integer.valueOf(""+ob.getProjectType()+ob.getDunType()))+ob.getCustomizeName();
  1547. }
  1548. //发送驳回邮件
  1549. if(SendEmailUtil.isEmail(b.getEmail())) {
  1550. EmailBo bo =new EmailBo();
  1551. if (noticType.equals(NoticeStatus.MENBER_DUN.getCode())){
  1552. bo = new EmailBo("会员提前催收", b.getEmail(), content);
  1553. }else {
  1554. bo = new EmailBo("催收通知", b.getEmail(), a.getDepartmentName(), a.getName(),
  1555. "", orderNo,b.getContractNo(),new SimpleDateFormat("yyyy-MM-dd").format(ob.getCreateTime()),dunTypeName,a2.getName(),b.getUserName(),1,0);
  1556. }
  1557. if(StringUtils.isNotBlank(b.getEmail())) {
  1558. asyncUtils.patentSend(bo);
  1559. }
  1560. }
  1561. }
  1562. private void addBackOrder(String orderNo, String reason) {
  1563. TOrderBack ob=new TOrderBack();
  1564. TOrderNew tOrder= tOrderNewMapper.queryById(orderNo);
  1565. ob.setCreateTime(new Date());
  1566. ob.setOrderNo(orderNo);
  1567. ob.setReason(reason);
  1568. ob.setBackStatus(0);//待处理
  1569. ob.setInitiate(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1570. ob.setAccept(tOrder.getSalesmanId());
  1571. TOrderLog tl=new TOrderLog();
  1572. tl.setOrderNo(orderNo);
  1573. tl.setProcess(OrderLogProcess.BH.getCode());
  1574. addOrderLog(tl,reason);
  1575. tOrderBackMapper.insertSelective(ob);
  1576. }
  1577. @SuppressWarnings("unchecked")
  1578. @Override
  1579. public Pagination<outOrderDunListBo> dunOrderNewList(String name, String orderNo,String contractNo, String starTime, String endTime,
  1580. Integer specially,String aid, String adminName,String deps,Integer newStatus,Integer approval,Integer amountStatus,Integer memberType,Integer pageNo, Integer pageSize) {
  1581. Map<String, Object> params = new HashMap<String, Object>();
  1582. if(newStatus!=null&&newStatus==0) {
  1583. params.put("newStatus", 0);
  1584. } else {
  1585. params.put("newStatus", tOrderDunMapper.selectByOrderNo(orderNo).isEmpty()?1:0);
  1586. }
  1587. if (StringUtils.isNotBlank(name)) {
  1588. params.put("name", name);
  1589. }
  1590. if (StringUtils.isNotBlank(deps)) {
  1591. params.put("deps", departmentService.parseArray(deps));
  1592. }
  1593. if (StringUtils.isNotBlank(adminName)) {
  1594. params.put("adminName", adminName);
  1595. }
  1596. if (StringUtils.isNotBlank(orderNo)) {
  1597. params.put("orderNo", orderNo);
  1598. }
  1599. if (StringUtils.isNotBlank(contractNo)) {
  1600. params.put("contractNo", contractNo);
  1601. }
  1602. if (StringUtils.isNotBlank(starTime)) {
  1603. params.put("starTime", starTime);
  1604. }
  1605. if (StringUtils.isNotBlank(endTime)) {
  1606. params.put("endTime", endTime+" 23:59:59");
  1607. }
  1608. if (approval!=null ) {
  1609. params.put("approval",approval);
  1610. }
  1611. if (amountStatus!=null ) {
  1612. params.put("amountStatus",amountStatus);
  1613. }
  1614. if (memberType!=null ) {
  1615. params.put("memberType",memberType);
  1616. }
  1617. if (specially==null) {
  1618. specially=0;
  1619. }
  1620. params.put("specially", specially);
  1621. Integer i=null;
  1622. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  1623. i=1;
  1624. params.put("fid", TokenManager.getAdminId());
  1625. }else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  1626. i=2;
  1627. params.put("fid", TokenManager.getAdminId());
  1628. }else if(TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
  1629. TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CED)||
  1630. TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
  1631. i=3;
  1632. }else {
  1633. params.put("aid", TokenManager.getAdminId());
  1634. }
  1635. if (specially==1){
  1636. params.put("aid", aid);
  1637. params.put("dunStatus", 1);
  1638. }
  1639. if(i!=null) {
  1640. params.put("shiroType", i);
  1641. }
  1642. Pagination<outOrderDunListBo> p = (Pagination<outOrderDunListBo>)findPage("selectDunOrderNewListByPage", "selectDunOrderNewListCount", params, pageNo, pageSize);
  1643. List<outOrderDunListBo> list = (List<outOrderDunListBo>) p.getList();
  1644. for (outOrderDunListBo o : list) {
  1645. o.setDunSubject(getDunSubject(o));
  1646. }
  1647. return p;
  1648. }
  1649. public String getDunSubject(outOrderDunListBo o) {
  1650. //旧催款
  1651. if(o.getDunSubject()!=null) {
  1652. return OrderDunSubject.getValueByCode(Integer.valueOf(o.getDunSubject()));
  1653. }
  1654. //新催款
  1655. if(o.getDunType()!=null&&o.getDunType()!=0&&o.getProjectType()!=null) {
  1656. return NewOrderDunType.getValueByCode(Integer.valueOf(""+o.getProjectType()+o.getDunType()));
  1657. }
  1658. if(o.getDunType()!=null&&o.getDunType()==0&&o.getProjectType()!=null) {
  1659. return NewOrderDunType.getValueByCode(Integer.valueOf(""+o.getProjectType()+o.getDunType()))+o.getCustomizeName();
  1660. }
  1661. return "";
  1662. }
  1663. @Override
  1664. public int createDunLog( String dunId, String dumTime, String remarks, String attUrl) {
  1665. TDunLog d=new TDunLog();
  1666. d.setId(UUID.randomUUID().toString());
  1667. d.setDunId(dunId);
  1668. d.setDumBy(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1669. d.setAttachmentUrl(attUrl);
  1670. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1671. try {
  1672. d.setDumTime(sdf.parse(dumTime));
  1673. } catch (ParseException e) {
  1674. e.printStackTrace();
  1675. }
  1676. d.setRemarks(remarks);
  1677. return tDunLogMapper.insertSelective(d);
  1678. }
  1679. @Override
  1680. public List<TDunLogListBo> selectDunLogList(String dunId) {
  1681. return tDunLogMapper.selectByDunId(dunId);
  1682. }
  1683. @Override
  1684. public int addOrderRefund(TOrderRefundWithBLOBs t) {
  1685. TOrderNew order =checkDeleteSign(t.getOrderNo());
  1686. if(order.getDeleteSign()!=0) {
  1687. throw new BusinessException(new Error( "订单变更锁定中","订单变更锁定中"));
  1688. }
  1689. t.setRefundStatus(refundState.DSH.getCode());
  1690. t.setCreateTime(new Date());
  1691. t.setInitiate(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1692. //t.setAccept("1");
  1693. t.setAccept(order.getFinanceId());
  1694. t.setResult("");
  1695. TOrderNew tOrder=new TOrderNew();
  1696. tOrder.setOrderNo(t.getOrderNo());
  1697. tOrder.setOrderStatus(OrderNewState.TDZ.getCode());
  1698. tOrderNewMapper.update(tOrder);
  1699. TOrderLog tl=new TOrderLog();
  1700. tl.setOrderNo(t.getOrderNo());
  1701. tl.setProcess(OrderLogProcess.FQTD.getCode());
  1702. addOrderLog(tl,null);
  1703. return tOrderRefundMapper.insertSelective(t);
  1704. }
  1705. @Override
  1706. public int updateApprovalOrder(String orderNo,Integer confirm,String reason) {
  1707. TOrderNew t=new TOrderNew();
  1708. TOrderNew t2=checkDeleteSign(orderNo);
  1709. t.setOrderNo(orderNo);
  1710. List<String> aids = new ArrayList<>();
  1711. Integer type=null;
  1712. TOrderLog tl=new TOrderLog();
  1713. tl.setOrderNo(orderNo);
  1714. if (confirm==2) {
  1715. if (t2.getApproval()==ApprovalNewState.TPDSH.getCode())t.setApproval(ApprovalNewState.TPTG.getCode());
  1716. else if (t2.getApproval()==ApprovalNewState.DSZDSH.getCode())t.setApproval(ApprovalNewState.DSZTG.getCode());
  1717. t.setProcessStatus(ProcessStatus.YPZXSGLY.getCode());
  1718. OrganizationListOut oo=departmentMapper.selectAllById(t2.getOrderDep());
  1719. t.setFinanceId(oo.getFinanceId());
  1720. StringBuffer str=new StringBuffer();
  1721. for (Admin admin : adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN)) {
  1722. aids.add(admin.getId());
  1723. if (!str.toString().contains(admin.getName()))str.append(admin.getName()).append(",");
  1724. }
  1725. if (str.length()>0)t.setExamineName(str.substring(0,str.length()-1));
  1726. type=NoticeStatus.ORDER_APPROVA_YES.getCode();
  1727. tl.setProcess(OrderLogProcess.TP.getCode());
  1728. addOrderLog(tl,reason);
  1729. } else {
  1730. if (t2.getApproval()==ApprovalNewState.TPDSH.getCode())t.setApproval(ApprovalNewState.TPBH.getCode());
  1731. else if (t2.getApproval()==ApprovalNewState.DSZDSH.getCode())t.setApproval(ApprovalNewState.DSZBH.getCode());
  1732. t.setOrderStatus(OrderNewState.YBH.getCode());
  1733. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  1734. tl.setProcess(OrderLogProcess.BH.getCode());
  1735. aids.add(t2.getSalesmanId());
  1736. type=NoticeStatus.ORDER_APPROVA_NO.getCode();
  1737. addBackOrder(orderNo, reason);
  1738. }
  1739. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(orderNo);
  1740. order.setProcessStatus(t.getProcessStatus());
  1741. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),t2.getApproval());
  1742. //新增特批催款信息
  1743. tOrderNewMapper.update(t);
  1744. return 1;
  1745. }
  1746. @Override
  1747. public List<TOrderDun> selectOrderDun(String orderNo) {
  1748. return tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
  1749. }
  1750. @Override
  1751. public boolean checkOrderMain(TOrderTask t) {
  1752. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(t.getOrderNo(),0);
  1753. int flag=0;
  1754. if(t.getMain()==1) {
  1755. flag++;
  1756. }
  1757. for (TOrderTask t2 : list) {
  1758. if(t2.getMain()==1&&t.getId()==null) {
  1759. flag++;
  1760. }else if (t2.getMain()==1&&(!t.getId().equals(t2.getId()))) {
  1761. flag++;
  1762. }
  1763. }
  1764. if (flag>1) {
  1765. return true;
  1766. }
  1767. return false;
  1768. }
  1769. @Override
  1770. public boolean chekeOrderStatus(String orderNo) {
  1771. TOrderNew tOrder= tOrderNewMapper.queryById(orderNo);
  1772. if (tOrder.getOrderStatus().equals(OrderNewState.QDDS.getCode()) || tOrder.getOrderStatus().equals(OrderNewState.QDSHTG.getCode())) {
  1773. return false;
  1774. }
  1775. return true;
  1776. }
  1777. @Override
  1778. public boolean chekeProcessStatus(String orderNo) {
  1779. TOrderNew tOrder= tOrderNewMapper.queryById(orderNo);
  1780. if (tOrder.getProcessStatus().equals(ProcessStatus.YPYXY.getCode())) {
  1781. return false;
  1782. }
  1783. return true;
  1784. }
  1785. @Override
  1786. public boolean chekeApprovalOrderStatus(String orderNo) {
  1787. TOrderNew tOrder= tOrderNewMapper.queryById(orderNo);
  1788. if (tOrder.getApproval().equals(ApprovalNewState.FTP.getCode()) ||
  1789. tOrder.getOrderStatus().equals(OrderNewState.QDSHJJ.getCode()) ||
  1790. tOrder.getOrderStatus().equals(OrderNewState.YBH.getCode())) {
  1791. return true;
  1792. }
  1793. return false;
  1794. }
  1795. @Override
  1796. public int deleteOrderNew(String orderNo) {
  1797. TOrderNew t=tOrderNewMapper.queryById(orderNo);
  1798. if (t.getOrderStatus().equals(OrderNewState.YBH.getCode()) || t.getOrderStatus().equals(OrderNewState.YTD.getCode()) ||
  1799. t.getOrderStatus().equals(OrderNewState.DQD.getCode()) || t.getOrderStatus().equals(OrderNewState.QDSHJJ.getCode())) {
  1800. t.setOrderNo(orderNo);
  1801. t.setDeleteSign(1);//作废
  1802. if(t.getContractNo()!=null) {
  1803. contractNoReplace(orderNo, t.getContractNo(),t.getOrderDep());
  1804. }
  1805. if(t.getSettlementAmount().compareTo(BigDecimal.ZERO) > 0){
  1806. TemporaryReceivables tr=new TemporaryReceivables();
  1807. tr.setOrderNo(orderNo);
  1808. String financeId=null;
  1809. if(t.getFinanceId()!=null){
  1810. financeId=t.getFinanceId();
  1811. }else{
  1812. OrganizationListOut out = departmentMapper.selectAllById(t.getOrderDep());
  1813. if (out.getFinanceId()!=null){
  1814. financeId=out.getFinanceId();
  1815. }
  1816. }
  1817. if(financeId==null){
  1818. throw new BusinessException(new Error("订单部门财务负责人为空,请修改正确在操作","订单部门财务负责人为空,请修改正确在操作"));
  1819. }
  1820. tr.setAid(financeId);
  1821. tr.setAmount(t.getSettlementAmount());
  1822. User user = userMapper.queryById(t.getBuyerId());
  1823. tr.setCorporateName(user.getNickname());
  1824. tr.setStatus(ReceivablesStatus.DDYC.getCode());
  1825. tr.setRemarks("订单作废,金额返回订单财务负责人");
  1826. Date date = new Date();
  1827. tr.setCreateTime(date);
  1828. tr.setReceivablesTime(date);
  1829. tr.setMergeStatus(0);
  1830. temporaryReceivablesMapper.insertSelective(tr);
  1831. asyncUtils.addNoticAndEmail(new Notice(financeId,NoticeStatus.ORDER_CANCELLATION_AMOUNT_RETURN.getCode(),"订单作废,金额返回订单财务负责人" ));
  1832. }
  1833. t.setContractNo("");
  1834. return tOrderNewMapper.update(t);
  1835. }
  1836. return -1;
  1837. }
  1838. /**
  1839. * 将合同编号置为闲置编号
  1840. * @param orderNo
  1841. */
  1842. private void contractNoReplace(String orderNo, String contractNo,String orderDep) {
  1843. Calendar c=Calendar.getInstance();
  1844. int y=c.get(Calendar.YEAR);
  1845. String ys="-"+y;
  1846. //判断编号是否类似‘-2019’,是则为有效编号
  1847. if (contractNo.contains(ys)) {
  1848. IdleContractNo i=new IdleContractNo();
  1849. i.setAid(TokenManager.getAdminId());
  1850. i.setContractNo(contractNo);
  1851. i.setUsedOrderNo(orderNo);
  1852. i.setYear(y);
  1853. //如果找不到订单部门,则取订单编号-前面的缩写
  1854. if(StringUtils.isNotBlank(orderDep)) {
  1855. Department o=departmentMapper.selectByPrimaryKey(orderDep);
  1856. i.setAbbreviation(o.getAbbreviation());
  1857. }else {
  1858. i.setAbbreviation(contractNo.substring(0, contractNo.indexOf("-")));
  1859. }
  1860. idleContractNoMapper.insertSelective(i);
  1861. }
  1862. }
  1863. @Override
  1864. public boolean checkOderSettlementAmount(String orderNo) {
  1865. TOrderNew tOrder= tOrderNewMapper.queryById(orderNo);
  1866. if (tOrder.getSettlementAmount()==null||
  1867. tOrder.getSettlementAmount().doubleValue()==0||
  1868. tOrder.getOrderStatus().equals(OrderNewState.TDZ.getCode())){
  1869. return true;
  1870. }
  1871. return false;
  1872. }
  1873. @SuppressWarnings("unchecked")
  1874. @Override
  1875. public Pagination<TOrderRefundBo> orderRefundList(String name, String orderNo, String starTime, String endTime, Integer specially,
  1876. Integer pageNo, Integer pageSize) {
  1877. Map<String, Object> params = new HashMap<String, Object>();
  1878. params.put("aid", TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  1879. if (StringUtils.isNotBlank(name)) {
  1880. params.put("name", name);
  1881. }
  1882. if (StringUtils.isNotBlank(orderNo)) {
  1883. params.put("orderNo", orderNo);
  1884. }
  1885. if (StringUtils.isNotBlank(starTime)) {
  1886. params.put("starTime", starTime);
  1887. }
  1888. if (StringUtils.isNotBlank(endTime)) {
  1889. params.put("endTime", endTime+" 23:59:59");
  1890. }
  1891. Pagination<TOrderRefundBo> p = (Pagination<TOrderRefundBo>)findPage("selectOrderRefundListByPage", "selectOrderRefundListCount", params, pageNo, pageSize);
  1892. return p;
  1893. }
  1894. @Override
  1895. public boolean checkORderTask(String orderNo) {
  1896. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo,0);
  1897. for (TOrderTaskBo t : list) {
  1898. if (t.getMain()==1) {
  1899. return false;
  1900. }
  1901. }
  1902. return true;
  1903. }
  1904. @Override
  1905. public boolean checkOrderAmount(TOrderNewWithBLOBs t) {
  1906. BigDecimal orderAmount=t.getTotalAmount();
  1907. if (orderAmount==null){
  1908. TOrderNew tOrderNew=tOrderNewMapper.getOrderNewDetail(t.getOrderNo());
  1909. orderAmount=tOrderNew.getTotalAmount();
  1910. }
  1911. List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(t.getOrderNo(),3);
  1912. List<OutNewOrderDunBo> tOrderDuns = newOrderDunMapper.selectListNewOrderDun(t.getOrderNo(),null);
  1913. BigDecimal taskAmount=new BigDecimal(0);
  1914. for (TOrderTaskBo tOrderTaskBo : tOrderTaskBos) {
  1915. if (tOrderTaskBo.getCommodityPrice()!=null){
  1916. taskAmount=taskAmount.add(tOrderTaskBo.getCommodityPrice());
  1917. }
  1918. }
  1919. BigDecimal dunAmount=new BigDecimal(0);
  1920. for (OutNewOrderDunBo tOrderDun : tOrderDuns) {
  1921. if(tOrderDun.getMoney()!=null){
  1922. dunAmount=dunAmount.add(tOrderDun.getMoney());
  1923. }
  1924. }
  1925. if (orderAmount.compareTo(taskAmount)==0&&orderAmount.compareTo(dunAmount)==0){
  1926. return false;
  1927. }
  1928. return true;
  1929. }
  1930. /**
  1931. * 获取催款数据
  1932. */
  1933. @Override
  1934. public Result exportOrderDunData(String name, String orderNo, String contractNo, String starTime, String endTime, Integer specially, String aid, String adminName,
  1935. String depId, Integer newStatus, Integer approval, Integer amountStatus, Integer memberType,
  1936. Integer pageNo, Integer pageSize){
  1937. List<outOrderDunListBo> list=(List<outOrderDunListBo>) dunOrderNewList( name, orderNo, contractNo, starTime, endTime,specially,
  1938. aid, adminName, depId,newStatus, approval, amountStatus, memberType, pageNo, pageSize).getList();
  1939. NewExcelUtil<outOrderDunListBo> excelUtil = new NewExcelUtil<>(outOrderDunListBo.class);
  1940. return excelUtil.exportExcel(list,"催款截点统计表",uploadPath);
  1941. }
  1942. private String bigToString (BigDecimal o){
  1943. if(o==null){return "";}
  1944. else{
  1945. return o.stripTrailingZeros().toEngineeringString();
  1946. }
  1947. }
  1948. @Override
  1949. public int updateOrderOver(String orderNo) {
  1950. TOrderNew t=tOrderNewMapper.queryById(orderNo);
  1951. if (!t.getLiquidationStatus().equals(LiquidationNewState.ALREADY_PAY.getCode()) ||
  1952. !t.getProcessStatus().equals(ProcessStatus.YQBFPZXSGLY.getCode())) {
  1953. return -1;
  1954. }
  1955. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo,0);
  1956. for (TOrderTaskBo task : list) {
  1957. if (!task.getTaskStatus().equals(TaskState.CLYWC.getCode())) {
  1958. return -1;
  1959. }
  1960. }
  1961. t.setOrderStatus(OrderNewState.YJX.getCode());
  1962. t.setSettlementTime(new Date());
  1963. return tOrderNewMapper.update(t);
  1964. }
  1965. @Override
  1966. public OrderRefundDetailBo orderRefundDetail(String id) {
  1967. return tOrderNewMapper.orderRefundDetail(id);
  1968. }
  1969. @Override
  1970. public int updateOrderRefund(TOrderRefundWithBLOBs t) {
  1971. checkDeleteSign(t.getOrderNo());
  1972. return tOrderRefundMapper.updateByPrimaryKeySelective(t);
  1973. }
  1974. @Override
  1975. public int updatetechnicianBackOrder(String orderNo,String reason) {
  1976. TOrderNew t = checkDeleteSign(orderNo);
  1977. t.setOrderStatus(OrderNewState.YBH.getCode());
  1978. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  1979. t.setFinanceId("");
  1980. addBackOrder(orderNo, reason);
  1981. List<String> aids = new ArrayList<>();
  1982. aids.add(t.getSalesmanId());
  1983. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(orderNo);
  1984. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_NO.getCode(),order, TokenManager.getAdminId(),t.getApproval());
  1985. tOrderNewMapper.update(t);
  1986. financeCountOrderUnauditedSubtraction(t,2);
  1987. return 1;
  1988. }
  1989. /**
  1990. *
  1991. * @param use
  1992. * @param type 0 未审核减一 1未审核与派单数都减一 2 派单减一
  1993. */
  1994. @Override
  1995. public void financeCountOrderUnauditedSubtraction(TOrderNew use,Integer type) {
  1996. Admin admin = adminMapper.selectFinanceAdminByOrderDep(use.getOrderDep());
  1997. String startTime= DateUtils.formatDate(use.getCreateTime(),AFTConstants.YYYYMMDD);
  1998. FinanceCount financeCount = financeCountMapper.selectByAidAndDates(admin.getId(), startTime);
  1999. if(financeCount!=null){
  2000. FinanceCount newFinance=new FinanceCount();
  2001. newFinance.setId(financeCount.getId());
  2002. if(type==0){
  2003. newFinance.setOrderUnauditedCount(financeCount.getOrderUnauditedCount()-1);
  2004. }else if(type==1){
  2005. newFinance.setOrderCount(financeCount.getOrderCount()-1);
  2006. newFinance.setOrderUnauditedCount(financeCount.getOrderUnauditedCount()-1);
  2007. }else if(type==2){
  2008. newFinance.setOrderCount(financeCount.getOrderCount()-1);
  2009. }
  2010. financeCountMapper.updateByPrimaryKeySelective(newFinance);
  2011. }
  2012. }
  2013. @Override
  2014. public void orderNewListDownload(InputOrderNewListBo in,HttpServletResponse response) {
  2015. in.setPageSize(99999);
  2016. Pagination<TOrderNewBo> pagination = orderNewList(in);
  2017. List<TOrderNewBo> list = (List<TOrderNewBo>) pagination.getList();
  2018. downloadOrderImg( list, response);
  2019. }
  2020. public void downloadOrderImg(List<TOrderNewBo> list, HttpServletResponse response){
  2021. String downloadFileName = "";
  2022. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  2023. ZipOutputStream zip = new ZipOutputStream(outputStream);
  2024. downloadFileName="订单合同数据.zip";
  2025. for (TOrderNewBo t : list) {
  2026. String annexUrl = t.getContractPictureUrl();
  2027. if (StringUtils.isNotBlank(annexUrl)) {
  2028. String[] split = annexUrl.split(",");
  2029. if (split.length>0){
  2030. int index =0;
  2031. for (String s : split) {
  2032. if (StringUtils.isNotEmpty(s)){
  2033. index++;
  2034. String url=s.replace("/profile/upload","");
  2035. url=uploadPath+url;
  2036. System.out.println(url);
  2037. File file = new File(url);
  2038. if (file.exists()){
  2039. try {
  2040. String suffix = s.substring(s.indexOf("."));
  2041. String fileName=t.getUserName()+"("+t.getContractNo()+")"+"/"+t.getContractNo()+"_"+index+suffix;
  2042. ZipEntry e = new ZipEntry(fileName);
  2043. zip.putNextEntry(e);
  2044. IOUtils.write(FileUtils.getBytes(file),zip);
  2045. zip.closeEntry();
  2046. zip.flush();
  2047. } catch (IOException e){
  2048. throw new BusinessException("文件写入压缩失败:"+e.getLocalizedMessage());
  2049. }
  2050. }
  2051. }
  2052. }
  2053. }
  2054. }
  2055. }
  2056. IOUtils.closeQuietly(zip);
  2057. try {
  2058. byte[] data = outputStream.toByteArray();
  2059. response.reset();
  2060. response.addHeader("Access-Control-Allow-Origin", "*");
  2061. response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
  2062. response.setHeader("Content-Disposition", "attachment; filename=\"" + java.net.URLEncoder.encode(downloadFileName, "utf-8").replaceAll("\\+", "%20") + "\"");
  2063. response.addHeader("Content-Length", "" + data.length);
  2064. response.setContentType("application/octet-stream; charset=UTF-8");
  2065. IOUtils.write(data,response.getOutputStream());
  2066. } catch (IOException e) {
  2067. throw new RuntimeException(e);
  2068. }
  2069. }
  2070. private TOrderNew checkDeleteSign(String orderNo) {
  2071. TOrderNew t=tOrderNewMapper.queryById(orderNo);
  2072. //if(t.getDeleteSign()==2) throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, t.getOrderNo(),""));
  2073. return t;
  2074. }
  2075. @Override
  2076. public void addNotic(Integer type, TOrderNewBo b,String str) {
  2077. String aid=null;
  2078. StringBuffer sb=new StringBuffer();
  2079. //预设值 默认发给营销员
  2080. aid=b.getSalesmanId();
  2081. if (str==null){
  2082. if (type.equals(NoticeStatus.ORDER_ARREARS_DUN.getCode()) || type.equals(NoticeStatus.PAYMENT_DUN.getCode()) ||
  2083. type.equals(NoticeStatus.ORDER_DUN.getCode()) || type.equals(NoticeStatus.MENBER_DUN.getCode())){
  2084. sb=sb.append("客户名称【").append(b.getUserName()).append("】,按时触发应收款欠款,请按时催款,并及时增减项目,以免项目延期等问题。");
  2085. }
  2086. }else {
  2087. sb=sb.append(str);
  2088. }
  2089. asyncUtils.addNotic(type,aid,sb.toString());
  2090. }
  2091. public void sendEmail(String dunId,AdminListBo a,TOrderNewBo b){
  2092. LoggerUtils.debug(logger, "======================邮件信息发送===================");
  2093. String content = "<div>客户名称: "+ b.getUserName() +"</div><div>订单编号: " + b.getOrderNo() + "</div><div>合同编号: " + b.getContractNo() + "</div>";
  2094. String tite="订单驳回";
  2095. if(StringUtils.isNotBlank(dunId)) {
  2096. TOrderDun tDun=tOrderDunMapper.selectByPrimaryKey(dunId);
  2097. content +="<div>催收时间: " + new SimpleDateFormat("yyyy-MM-dd").format(tDun.getCreateTime()) +
  2098. "</div><div>催收科目: " + OrderDunSubject.getValueByCode(tDun.getDunSubject()) +
  2099. "</div><div>催收情况: " + (tDun.getDunStatus()==2?"已完成":"已启动") +"</div>";
  2100. tite="催收通知";
  2101. }
  2102. //发送驳回邮件
  2103. EmailBo bo = new EmailBo(tite, b.getEmail(), a.getDepartmentName(), b.getSalesmanName());
  2104. if(StringUtils.isNotBlank(b.getEmail())) {
  2105. asyncUtils.send(bo);
  2106. }
  2107. LoggerUtils.debug(logger, "=========================================发送邮件成功");
  2108. }
  2109. @Override
  2110. public int updateFinance(String orderNo, String newFinance) {
  2111. String aid=TokenManager.getAdminId();
  2112. String[] l=orderNo.split(",");
  2113. List<String> orderNos=new ArrayList<>(Arrays.asList(l));
  2114. tOrderNewMapper.updateFinance(aid,orderNos,newFinance);
  2115. return 1;
  2116. }
  2117. @Override
  2118. public List<TOrderLogBo> selectOrderLog(String orderNo) {
  2119. return tOrderLogMapper.selectOrderByNo(orderNo);
  2120. }
  2121. @Override
  2122. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type, TOrderNewBo order, String adminId, Integer approval) {
  2123. pushGeneralSendNoticeAndEmail( alist, type, order, adminId, approval,null);
  2124. }
  2125. @Override
  2126. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type, TOrderNewBo order, String adminId, Integer approval, Integer tid) {
  2127. AdminListBo a = adminMapper.getDeptNameByAid(adminId);
  2128. StringBuffer str=new StringBuffer();
  2129. String approvalType="";
  2130. String noticeTypeName = NoticeStatus.getValueByCode(type);
  2131. if (!approval.equals(ApprovalNewState.FTP.getCode())) {
  2132. approvalType="[特批]";
  2133. }
  2134. //只有到技术总监是派单,其他都是审核
  2135. if (order.getProcessStatus()==null||(!order.getProcessStatus().equals(ProcessStatus.YPZXSGLY.getCode()))){
  2136. str.append("[审核]");
  2137. }else {
  2138. str.append("[派单]");
  2139. }
  2140. str.append(approvalType).append(noticeTypeName).append(":");
  2141. if (tid != null) {
  2142. str.append("项目编号[").append(tid).append("],");
  2143. }
  2144. str.append("客户名称[") .append(order.getUserName()).append("],");
  2145. if(StringUtils.isNotBlank(order.getContractNo())) {
  2146. str.append("合同编号[").append(order.getContractNo()).append("],");
  2147. }
  2148. str.append("订单编号[").append(order.getOrderNo()).append("],").append("操作人:")
  2149. .append(a.getDepartmentName()).append("-").append(a.getName()).append("。");
  2150. StringBuilder adminIds= new StringBuilder();
  2151. List<Notice> nlist=new ArrayList<>();
  2152. for (String string : alist) {
  2153. Notice n =new Notice();
  2154. n.setId(UUID.randomUUID().toString());
  2155. n.setNoticeType(type);
  2156. n.setContent(str.toString());
  2157. n.setCreateTime(new Date());
  2158. n.setReaded(0);//未读
  2159. n.setAid(string);
  2160. nlist.add(n);
  2161. Admin admin = adminMapper.selectAllByid(string);
  2162. //去除邮件重复的
  2163. if(admin!=null&&admin.getEmail()!=null&&SendEmailUtil.isEmail(admin.getEmail().trim())){
  2164. if (!adminIds.toString().contains(admin.getEmail())){
  2165. adminIds.append(admin.getEmail()).append(",");
  2166. }
  2167. }
  2168. }
  2169. if(!nlist.isEmpty()) {
  2170. asyncUtils.addNoticeBatch(nlist);
  2171. }
  2172. if (!nlist.isEmpty()&&StringUtils.isNotBlank(adminIds.toString())) {
  2173. adminIds = new StringBuilder(adminIds.substring(0, adminIds.length() - 1));
  2174. EmailBo bo=new EmailBo(noticeTypeName, adminIds.toString(),str.toString());
  2175. asyncUtils.send(bo);
  2176. }
  2177. }
  2178. @Override
  2179. @Transactional
  2180. public int pushOutsourceProjectAudit(TOrderOutsource o) {
  2181. //前端加载缓慢避免重复提交
  2182. if(o.getId()==null){
  2183. OrderOutsourceDtails ood=tOrderOutsourceMapper.selectByOrderNo(null,o.getTid().toString());
  2184. if (ood!=null){
  2185. return 1;
  2186. }
  2187. }
  2188. o.setRefundStatus(0);
  2189. o.setCreateTime(new Date());
  2190. if(o.getAmount()==null) {
  2191. o.setAmount(new BigDecimal(0));
  2192. }
  2193. if(o.getStartType()==null) {
  2194. o.setStartType(0);
  2195. }
  2196. if (o.getStartType()==0) {
  2197. List<String> aids = new ArrayList<>();
  2198. for (Admin admin : adminMapper.getAdminRoleNameList("外包审核员")) {
  2199. aids.add(admin.getId());
  2200. }
  2201. TOrderNew t2= checkDeleteSign(o.getOrderNo());
  2202. Admin a =adminMapper.queryById(TokenManager.getAdminId());
  2203. OutsourceLog ol=new OutsourceLog(o.getTid(),0,o.getReason(), TokenManager.getAdminId(),a.getName());
  2204. outsourceLogMapper.insertSelective(ol);
  2205. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  2206. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.PROJECT_OUTSOURCE_START.getCode(),order, TokenManager.getAdminId(),t2.getApproval(),o.getTid());
  2207. }else {
  2208. o.setRefundStatus(1);
  2209. }
  2210. List<OutPaymentNode> list=paymentNodeMapper.selectByStatus(0);
  2211. for (OutPaymentNode outPaymentNode : list) {
  2212. if (outPaymentNode.getDunType()==1) {
  2213. PaymentNode pn=new PaymentNode();
  2214. pn.setId(outPaymentNode.getId());
  2215. pn.setDunStatus(1);
  2216. paymentNodeMapper.updateByPrimaryKeySelective(pn);
  2217. }
  2218. }
  2219. if (o.getId()==null) {
  2220. tOrderOutsourceMapper.insertSelective(o);
  2221. }else {
  2222. tOrderOutsourceMapper.updateByPrimaryKeySelective(o);
  2223. //旧项目变更,如果驳回修改成新的项目变更
  2224. if(o.getUnitNumber()!=null) {
  2225. tOrderOutsourceMapper.updateByidNull(o.getId());
  2226. }
  2227. }
  2228. if (o.getRefundStatus()==1){
  2229. updateOrderCostAmount(o.getTid(),o.getStartType());
  2230. }
  2231. return 1;
  2232. }
  2233. /**
  2234. * 发起外包时,通过计算获取项目的成本,订单的成本
  2235. *
  2236. * @param tid 项目编号
  2237. * @param type 0外包 1供应商
  2238. */
  2239. @Override
  2240. public void updateOrderCostAmount(Integer tid,Integer type) {
  2241. //计算项目成本
  2242. List<OutThirdPartyCompany>list=thirdPartyCompanyMapper.selectByTid(tid);
  2243. BigDecimal tCount=new BigDecimal(0);
  2244. for (OutThirdPartyCompany op : list) {
  2245. tCount=tCount.add(new BigDecimal(op.getTotalAmount()));
  2246. }
  2247. if(type==1) {
  2248. ProjectTypePuls tt=tOrderTaskMapper.selectByTidGetDtails(tid);
  2249. if (tt.getOutPatentType()==0){
  2250. if (tt.getOfficialCost()==1) {
  2251. if (tt.getCostReduction()==1) {
  2252. tCount=tCount.add(tt.getProportion85().multiply(new BigDecimal(tt.getQuantity())));
  2253. }else {
  2254. tCount=tCount.add(tt.getOfficialAmount().multiply(new BigDecimal(tt.getQuantity())));
  2255. }
  2256. }
  2257. }
  2258. }
  2259. BigDecimal party=new BigDecimal(0);
  2260. List<outOrderPayment> paymentList = tOrderPaymentMapper.selectByTid(tid, null, null);
  2261. for (outOrderPayment oo : paymentList) {
  2262. if (oo.getStatus()==3){
  2263. party=party.add(oo.getApplicationAmount());
  2264. }
  2265. }
  2266. tTaskMidMapper.updateCostAmount(tid,tCount,party);
  2267. // //计算订单成本 分类成本
  2268. ProjectTypePuls projectTypePuls = tOrderTaskMapper.selectByTidGetDtails(tid);
  2269. tOrderMidMapper.updateCostAmount(projectTypePuls.getOrderNo());
  2270. }
  2271. @Override
  2272. @Cacheable(cacheNames = "statisticsList#500",key = "'statisticsList:depId:'+#in.depId+'province:'+#in.province+" +
  2273. "'startCreate:'+#in.startCreate+'endCreate:'+#in.endCreate+'startSign:'+#in.startSign+'endSign:'+#in.endSign")
  2274. public List<OutStatisticsList> statisticsList(InputStatistics in) {
  2275. if(in.getEndCreate()!=null) {
  2276. in.setEndCreate(in.getEndCreate()+" 23:59:59");
  2277. }
  2278. if(in.getEndSign()!=null) {
  2279. in.setEndSign(in.getEndSign()+" 23:59:59");
  2280. }
  2281. List<OutStatisticsList> outStatisticsLists =new ArrayList<>();
  2282. //原来sql计算
  2283. // outStatisticsLists=tOrderNewMapper.statisticsList(in);
  2284. //新java内部计算
  2285. outStatisticsLists= CountStatisticOrderList(in);
  2286. return outStatisticsLists;
  2287. }
  2288. private List<OutStatisticsList> CountStatisticOrderList(InputStatistics in) {
  2289. List<OutStatisticsList> result=new ArrayList<>();
  2290. List<StatisOrderList> statisOrderLists = tOrderNewMapper.statisticsOrderList(in);
  2291. Map<Integer,List<StatisOrderList>> classmap= statisOrderLists.stream().collect(Collectors.groupingBy(StatisOrderList::getId));
  2292. for (Integer key : classmap.keySet()) {
  2293. Integer id= key;
  2294. String name=classmap.get(key).get(0).getProvince();
  2295. Double quantity = classmap.get(key).stream().mapToDouble(StatisOrderList::getQuantity).sum();
  2296. BigDecimal total =CountStatisticOrderTotal(classmap.get(key));
  2297. Integer counts=CountStatisticOrderCount(classmap.get(key));
  2298. OutStatisticsList out =new OutStatisticsList();
  2299. out.setId(id);
  2300. out.setProvince(name);
  2301. out.setQuantity(quantity);
  2302. out.setTotal(total);
  2303. out.setCounts(counts);
  2304. result.add(out);
  2305. }
  2306. return result;
  2307. }
  2308. private Integer CountStatisticOrderCount(List<StatisOrderList> statisOrderLists) {
  2309. Integer result =0;
  2310. List<String> list=new ArrayList<>();
  2311. for (StatisOrderList statisOrderList : statisOrderLists) {
  2312. if (!list.contains(statisOrderList.getAid())){
  2313. list.add(statisOrderList.getAid());
  2314. result++;
  2315. }
  2316. }
  2317. return result;
  2318. }
  2319. private BigDecimal CountStatisticOrderTotal(List<StatisOrderList> statisOrderLists) {
  2320. BigDecimal result=new BigDecimal(0);
  2321. for (StatisOrderList out : statisOrderLists) {
  2322. result=result.add(out.getTotal());
  2323. }
  2324. return result;
  2325. }
  2326. @Override
  2327. @Cacheable(cacheNames = "provinceStatisticsList#500",key = "'provinceStatisticsList:depId:'+#in.depId+'province:'+#in.province+" +
  2328. "'startCreate:'+#in.startCreate+'endCreate:'+#in.endCreate+'startSign:'+#in.startSign+'endSign:'+#in.endSign")
  2329. public List<OutProvinceStatisticsList> provinceStatisticsList(InputStatistics in) {
  2330. if(in.getSort()==null) {
  2331. in.setSort(0);
  2332. }
  2333. if(in.getEndCreate()!=null) {
  2334. in.setEndCreate(in.getEndCreate()+" 23:59:59");
  2335. }
  2336. if(in.getEndSign()!=null) {
  2337. in.setEndSign(in.getEndSign()+" 23:59:59");
  2338. }
  2339. List<OutProvinceStatisticsList> outProvinceStatisticsLists=null;
  2340. //原sql计算
  2341. // outProvinceStatisticsLists = tOrderNewMapper.provinceStatisticsList(in);
  2342. //java计算
  2343. outProvinceStatisticsLists= CountProvinceStatisticsOrder(in);
  2344. return outProvinceStatisticsLists;
  2345. }
  2346. private List<OutProvinceStatisticsList> CountProvinceStatisticsOrder(InputStatistics in) {
  2347. List<OutProvinceStatisticsList> result=new ArrayList<>();
  2348. List<StatisOrderList> statisOrderLists = tOrderNewMapper.statisticsOrderList(in);
  2349. Map<String,List<StatisOrderList>> classmap= statisOrderLists.stream().collect(Collectors.groupingBy(StatisOrderList::getAid));
  2350. for (String key : classmap.keySet()) {
  2351. String aid= key;
  2352. String name=classmap.get(key).get(0).getAname();
  2353. String depName=classmap.get(key).get(0).getDepName();
  2354. Double quantity = classmap.get(key).stream().mapToDouble(StatisOrderList::getQuantity).sum();
  2355. BigDecimal total =CountStatisticOrderTotal(classmap.get(key));
  2356. OutProvinceStatisticsList out =new OutProvinceStatisticsList();
  2357. out.setAid(aid);
  2358. out.setName(name);
  2359. out.setDepName(depName);
  2360. out.setQuantity(quantity);
  2361. out.setTotal(total);
  2362. result.add(out);
  2363. }
  2364. return result;
  2365. }
  2366. @SuppressWarnings("unchecked")
  2367. @Override
  2368. public Pagination<OutArrearsDunListBo> arrearsDunList(InputArrearsDunListBo in) {
  2369. Map<String, Object> params = new HashMap<String, Object>();
  2370. if(in.getPageSize()==null||in.getPageSize()<0) {
  2371. in.setPageSize(10);
  2372. }
  2373. if(in.getPageNo()==null||in.getPageNo()<0) {
  2374. in.setPageNo(1);
  2375. }
  2376. if (StringUtils.isNotBlank(in.getName())) {
  2377. params.put("name", in.getName());
  2378. }
  2379. if (in.getDeps()!=null) {
  2380. params.put("deps",departmentService.parseArray(in.getDeps()));
  2381. }
  2382. if (StringUtils.isNotBlank(in.getAdminName())) {
  2383. params.put("adminName", in.getAdminName());
  2384. }
  2385. if (StringUtils.isNotBlank(in.getOrderNo())) {
  2386. params.put("orderNo", in.getOrderNo());
  2387. }
  2388. if (StringUtils.isNotBlank(in.getContractNo())) {
  2389. params.put("contractNo", in.getContractNo());
  2390. }
  2391. if (StringUtils.isNotBlank(in.getStarTime())) {
  2392. params.put("starTime", in.getStarTime());
  2393. }
  2394. if (StringUtils.isNotBlank(in.getEndTime())) {
  2395. params.put("endTime", in.getEndTime()+" 23:59:59");
  2396. }
  2397. if (StringUtils.isNotBlank(in.gettStarTime())) {
  2398. params.put("tStarTime", in.gettStarTime());
  2399. }
  2400. if (StringUtils.isNotBlank(in.gettEndTime())) {
  2401. params.put("tEndTime", in.gettEndTime()+" 23:59:59");
  2402. }
  2403. Integer i=null;
  2404. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  2405. i=1;
  2406. params.put("fid", TokenManager.getAdminId());
  2407. }else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  2408. i=2;
  2409. params.put("fid", TokenManager.getAdminId());
  2410. }else{
  2411. params.put("aid", TokenManager.getAdminId());
  2412. }
  2413. if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
  2414. TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CED)||
  2415. TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)) {
  2416. i=3;
  2417. }
  2418. if(i!=null) {
  2419. params.put("shiroType", i);
  2420. }
  2421. Pagination<OutArrearsDunListBo> p = (Pagination<OutArrearsDunListBo>)findPage("selectArrearsDunListByPage", "selectArrearsDunListByCount", params, in.getPageNo(), in.getPageSize());
  2422. return p;
  2423. }
  2424. @Override
  2425. public boolean checkOfficialType(TOrderOutsource o) {
  2426. TOrderTaskDetailBo t=tOrderTaskMapper.getOrderTaskDetail(o.getTid());
  2427. //项目类型是专利不是转让就需要获取专利官费
  2428. if(t.getPatentTransfer()==0){
  2429. if(t.getBpType()==1) {
  2430. OfficialFeePrice of=officialFeePriceMapper.selectBytype(o.getPatentNameType(), t.getPatentType());
  2431. if (of==null) {
  2432. return true;
  2433. }
  2434. }
  2435. }
  2436. return false;
  2437. }
  2438. @Override
  2439. public int updateOrderUrl(String orderNo, String contractPictureUrl, String agreementUrl, String serviceContent) {
  2440. TOrderNew t=new TOrderNew();
  2441. t.setOrderNo(orderNo);
  2442. t.setContractPictureUrl(contractPictureUrl);
  2443. t.setAgreementUrl(agreementUrl);
  2444. t.setServiceContent(serviceContent);
  2445. if (t.getContractPictureUrl()!=null||t.getAgreementUrl()!=null||t.getServiceContent()!=null){
  2446. return tOrderNewMapper.update(t);
  2447. }
  2448. return 0;
  2449. }
  2450. @Override
  2451. public OrderProcessName getProcessName(String orderNo) {
  2452. OrderProcessName names=tOrderNewMapper.getProcessName(orderNo);
  2453. return names;
  2454. }
  2455. @Override
  2456. public void pushDunNodeContent() {
  2457. List<TOrderNew> tOrderNews = tOrderNewMapper.selectgetAll();
  2458. for (TOrderNew e : tOrderNews) {
  2459. pushOrderDunContent(e);
  2460. }
  2461. // TOrderNew tOrderNew = tOrderNewMapper.queryById("412255829035991040");
  2462. // pushOrderDunContent(tOrderNew);
  2463. }
  2464. @Override
  2465. public void pushOrderDunContent(TOrderNew e) {
  2466. String valueByCode = pushOrderGetDunContent(e);
  2467. if (StringUtils.isNotBlank(valueByCode)){
  2468. TOrderMid mid=new TOrderMid();
  2469. mid.setOrderNo(e.getOrderNo());
  2470. mid.setDunNodeContent(valueByCode);
  2471. tOrderMidMapper.updateByOrderNo(mid);
  2472. }
  2473. }
  2474. @Override
  2475. public String pushOrderGetDunContent(TOrderNew e) {
  2476. List<OutNewOrderDunBo> dunBoList = newOrderDunMapper.selectListNewOrderDun(e.getOrderNo(), null);
  2477. StringBuilder valueByCode= new StringBuilder();
  2478. for (OutNewOrderDunBo bo : dunBoList) {
  2479. String str =""+bo.getProjectType()+bo.getDunType();
  2480. valueByCode.append(NewOrderDunType.getValueByCode(Integer.valueOf(str)));
  2481. if (bo.getDunType().equals(0)){
  2482. valueByCode.append(bo.getCustomizeName());
  2483. if(StringUtils.isNotBlank(bo.getCustomizeTimes())){
  2484. valueByCode.append(" ").append(bo.getCustomizeTimes());
  2485. }
  2486. }else if (bo.getProjectType().equals(5)||bo.getProjectType().equals(6)){
  2487. if (bo.getDunType().equals(2)){
  2488. valueByCode.append(" ").append(bo.getStartDate());
  2489. }
  2490. }
  2491. if (bo.getAppropriationRatio()!=null){
  2492. valueByCode.append(" ").append(bo.getAppropriationRatio().multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString()).append("%");
  2493. }else {
  2494. valueByCode.append(" ").append(bo.getMoney().stripTrailingZeros().toPlainString());
  2495. }
  2496. if (bo.getStatus()==0){
  2497. valueByCode.append(" 未启动");
  2498. }else if (bo.getStatus()==1){
  2499. valueByCode.append(" 已启动");
  2500. }
  2501. valueByCode.append(",");
  2502. }
  2503. if (valueByCode.length()>0)valueByCode.deleteCharAt(valueByCode.length()-1);
  2504. return valueByCode.toString();
  2505. }
  2506. @Override
  2507. public void pushOrderMaxDuration() {
  2508. List<TOrderNew> tOrderNews = tOrderNewMapper.selectgetAll();
  2509. for (TOrderNew e : tOrderNews) {
  2510. // TOrderNew e = tOrderNewMapper.selectByPrimaryKey("1032662365591977984");
  2511. pushOrderPublicReleaseCount(e);
  2512. }
  2513. }
  2514. @Override
  2515. public Object updateAddGroupChat(TOrderMid in) {
  2516. TOrderMid update =new TOrderMid();
  2517. TOrderMid tOrderMid = tOrderMidMapper.selectByOrderNo(in.getOrderNo());
  2518. Date date = new Date();
  2519. if (tOrderMid !=null){
  2520. update.setId(tOrderMid.getId());
  2521. update.setAddGroupChat(in.getAddGroupChat());
  2522. if (update.getAddGroupChat()==1){
  2523. update.setAddGroupChatTime(date);
  2524. }
  2525. tOrderMidMapper.update(update);
  2526. }else {
  2527. if (in.getAddGroupChat()==1){
  2528. in.setAddGroupChatTime(date);
  2529. }
  2530. tOrderMidMapper.insertSelective(in);
  2531. }
  2532. return 1;
  2533. }
  2534. }