ThirdPartyCompanyServiceImpl.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. package com.goafanti.organization.service.impl;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.io.UnsupportedEncodingException;
  5. import java.math.BigDecimal;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.UUID;
  13. import javax.mail.MessagingException;
  14. import javax.servlet.http.HttpServletResponse;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.apache.poi.xssf.usermodel.XSSFCell;
  17. import org.apache.poi.xssf.usermodel.XSSFRow;
  18. import org.apache.poi.xssf.usermodel.XSSFSheet;
  19. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import com.goafanti.admin.bo.AdminListBo;
  23. import com.goafanti.common.bo.EmailBo;
  24. import com.goafanti.common.bo.Error;
  25. import com.goafanti.common.constant.AFTConstants;
  26. import com.goafanti.common.dao.AdminMapper;
  27. import com.goafanti.common.dao.CompanyLibraryMapper;
  28. import com.goafanti.common.dao.FinancialPaymentMapper;
  29. import com.goafanti.common.dao.NoticeMapper;
  30. import com.goafanti.common.dao.OfficialFeePriceMapper;
  31. import com.goafanti.common.dao.PatentPriceMapper;
  32. import com.goafanti.common.dao.PaymentLogMapper;
  33. import com.goafanti.common.dao.PaymentNodeMapper;
  34. import com.goafanti.common.dao.SoftWritingPriceMapper;
  35. import com.goafanti.common.dao.TOrderOutsourceMapper;
  36. import com.goafanti.common.dao.TOrderPaymentMapper;
  37. import com.goafanti.common.dao.TOrderTaskMapper;
  38. import com.goafanti.common.dao.ThirdPartyCompanyMapper;
  39. import com.goafanti.common.enums.NoticeStatus;
  40. import com.goafanti.common.error.BusinessException;
  41. import com.goafanti.common.model.CompanyLibrary;
  42. import com.goafanti.common.model.Notice;
  43. import com.goafanti.common.model.OfficialFeePrice;
  44. import com.goafanti.common.model.PatentPrice;
  45. import com.goafanti.common.model.PaymentLog;
  46. import com.goafanti.common.model.PaymentNode;
  47. import com.goafanti.common.model.SoftWritingPrice;
  48. import com.goafanti.common.model.TOrderPayment;
  49. import com.goafanti.common.model.TOrderTask;
  50. import com.goafanti.common.model.ThirdPartyCompany;
  51. import com.goafanti.common.utils.DateUtils;
  52. import com.goafanti.common.utils.ExportExcelUtil;
  53. import com.goafanti.common.utils.SendEmailUtil;
  54. import com.goafanti.core.mybatis.BaseMybatisDao;
  55. import com.goafanti.core.mybatis.page.Pagination;
  56. import com.goafanti.core.shiro.token.TokenManager;
  57. import com.goafanti.order.bo.OrderOutsourceDtails;
  58. import com.goafanti.order.bo.TOrderTaskDetailBo;
  59. import com.goafanti.order.enums.NewOrderDunType;
  60. import com.goafanti.order.enums.ProjectNewStage;
  61. import com.goafanti.organization.bo.InputNodeList;
  62. import com.goafanti.organization.bo.InputPaymentList;
  63. import com.goafanti.organization.bo.InputPaymentNode;
  64. import com.goafanti.organization.bo.InuptFinancialPayment;
  65. import com.goafanti.organization.bo.NoticeInformationBo;
  66. import com.goafanti.organization.bo.OutPaymentLog;
  67. import com.goafanti.organization.bo.OutPaymentNode;
  68. import com.goafanti.organization.bo.OutThirdPartyCompany;
  69. import com.goafanti.organization.bo.outFinancialPayment;
  70. import com.goafanti.organization.bo.outNodeList;
  71. import com.goafanti.organization.bo.outPaymentList;
  72. import com.goafanti.organization.bo.outProjectBo;
  73. import com.goafanti.organization.bo.outOrderPayment;
  74. import com.goafanti.organization.service.ThirdPartyCompanyService;
  75. @Service
  76. public class ThirdPartyCompanyServiceImpl extends BaseMybatisDao<ThirdPartyCompanyMapper> implements ThirdPartyCompanyService {
  77. @Autowired
  78. private ThirdPartyCompanyMapper thirdPartyCompanyMapper;
  79. @Autowired
  80. private CompanyLibraryMapper companyLibraryMapper;
  81. @Autowired
  82. private PaymentNodeMapper paymentNodeMapper;
  83. @Autowired
  84. private TOrderPaymentMapper tOrderPaymentMapper;
  85. @Autowired
  86. private PaymentLogMapper paymentLogMapper;
  87. @Autowired
  88. private AdminMapper adminMapper;
  89. @Autowired
  90. private NoticeMapper noticeMapper;
  91. @Autowired
  92. private FinancialPaymentMapper financialPaymentMapper;
  93. @Autowired
  94. private TOrderTaskMapper tOrderTaskMapper;
  95. @Autowired
  96. private SoftWritingPriceMapper softWritingPriceMapper;
  97. @Autowired
  98. private OfficialFeePriceMapper officialFeePriceMapper;
  99. @Autowired
  100. private PatentPriceMapper patentPriceMapper;
  101. @Autowired
  102. private TOrderOutsourceMapper tOrderOutsourceMapper;
  103. @Override
  104. public int addCompany(ThirdPartyCompany t,Integer calculation) {
  105. CompanyLibrary c=new CompanyLibrary();
  106. String aid=TokenManager.getAdminId();
  107. if(calculation==0) {
  108. List<Integer> list=companyLibraryMapper.selectName(t.getCompanyName(),1,aid);
  109. if (list.size()<1) {
  110. c.setCompanyName(t.getCompanyName());
  111. c.setAid(aid);
  112. c.setType(1);//类型 0软著 1其他 2专利
  113. companyLibraryMapper.insertSelectiveGetId(c);
  114. t.setCid(c.getId());
  115. }else {
  116. t.setCid(list.get(0));
  117. }
  118. t.setTotalAmount(t.getUnitPrice().multiply(new BigDecimal(t.getQuantity())));
  119. }
  120. thirdPartyCompanyMapper.insertSelective(t);
  121. return 1;
  122. }
  123. @Override
  124. public int updateCompany(ThirdPartyCompany t,Integer calculation) {
  125. if (calculation==0) {//0其他 1计算
  126. CompanyLibrary c=new CompanyLibrary();
  127. String aid=TokenManager.getAdminId();
  128. List<Integer> list=companyLibraryMapper.selectName(t.getCompanyName(),1,aid);
  129. if (list.size()<1) {
  130. c.setCompanyName(t.getCompanyName());
  131. c.setAid(aid);
  132. c.setType(1);//0系统 1录入
  133. companyLibraryMapper.insertSelectiveGetId(c);
  134. t.setCid(c.getId());
  135. }else {
  136. t.setCid(list.get(0));
  137. }
  138. t.setTotalAmount(t.getUnitPrice().multiply(new BigDecimal(t.getQuantity())));
  139. }
  140. thirdPartyCompanyMapper.updateByPrimaryKeySelective(t);
  141. return 1;
  142. }
  143. @Override
  144. public List<CompanyLibrary> selectVague(String name,Integer type) {
  145. String aid = null;
  146. if(type==null)type=1;
  147. if (type==1) aid=TokenManager.getAdminId();
  148. return companyLibraryMapper.selectVague(name,type,aid);
  149. }
  150. @Override
  151. public int addPaymentNode(InputPaymentNode p) {
  152. if (StringUtils.isNoneBlank(p.getPartyTimes())) {
  153. p.setPartyTime(DateUtils.StringToDate(p.getPartyTimes(), AFTConstants.YYYYMMDD));
  154. }
  155. return paymentNodeMapper.insertSelective(p);
  156. }
  157. @Override
  158. public boolean addNodeCheck(InputPaymentNode p) {
  159. ThirdPartyCompany t=thirdPartyCompanyMapper.selectByPrimaryKey(p.getCid());
  160. List<OutPaymentNode> list=paymentNodeMapper.selectByTidAndCid(p.getTid(),p.getCid());
  161. BigDecimal sum=p.getTotalAmount()==null?new BigDecimal(0):p.getTotalAmount();
  162. for (OutPaymentNode pn : list) {
  163. if (p.getId()==null || !pn.getId().equals(p.getId())) {
  164. sum=sum.add(pn.getTotalAmount());
  165. }
  166. }
  167. if(p.getUnitPrice()==null)p.setUnitPrice(t.getUnitPrice());
  168. if(p.getTotalAmount()==null)p.setTotalAmount(p.getUnitPrice().multiply(new BigDecimal(p.getQuantity())));
  169. if(p.getTotalAmount()==null)p.setTotalAmount(new BigDecimal(0));
  170. if (p.getTotalAmount().compareTo(t.getTotalAmount())>0) {
  171. return true;
  172. }
  173. if (sum.compareTo(t.getTotalAmount())>0) {
  174. return true;
  175. }
  176. return false;
  177. }
  178. @Override
  179. public int updatePaymentNode(InputPaymentNode p) {
  180. if (StringUtils.isNoneBlank(p.getPartyTimes())) {
  181. p.setPartyTime(DateUtils.StringToDate(p.getPartyTimes(), AFTConstants.YYYYMMDD));
  182. }
  183. if (p.getDunType()!=0) {
  184. PaymentNode pn=paymentNodeMapper.selectByPrimaryKey(p.getId());
  185. pn.setPartyTime(null);
  186. paymentNodeMapper.updateByPrimaryKey(pn);
  187. }
  188. return paymentNodeMapper.updateByPrimaryKeySelective(p);
  189. }
  190. @Override
  191. public List<OutThirdPartyCompany> selectCompany(Integer tid) {
  192. List<OutThirdPartyCompany> list=thirdPartyCompanyMapper.selectByTid(tid);
  193. if (!TokenManager.hasRole(AFTConstants.FINANCE)&&
  194. !TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)&&
  195. !TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)&&
  196. !TokenManager.hasRole(AFTConstants.OUTSOURCE_AUDITOR)) {
  197. outProjectBo op =null;
  198. if(!list.isEmpty()) op=tOrderOutsourceMapper.selectByTid(tid);
  199. //外包type
  200. if (op!=null && op.getStartType()!=null&&op.getStartType()==1) {
  201. for (OutThirdPartyCompany oc : list) {
  202. if(op.getProjectType()==null)op.setProjectType(0);
  203. if((op.getProjectType()==1&&oc.getType()==1)||(op.getProjectType()==2)) {
  204. oc.setUnitPrice("***");
  205. oc.setTotalAmount("***");
  206. }
  207. }
  208. }
  209. }
  210. return list;
  211. }
  212. @Override
  213. public List<OutPaymentNode> selectPaymentNode(Integer tid) {
  214. List<OutPaymentNode> list=paymentNodeMapper.selectByTid(tid,null);
  215. return list;
  216. }
  217. @Override
  218. public int deleteCompany(String id) {
  219. if (id.contains(",")) {
  220. String []ids =id.split(",");
  221. for (String s : ids) {
  222. thirdPartyCompanyMapper.deleteByPrimaryKey(Integer.valueOf(s));
  223. }
  224. }else {
  225. thirdPartyCompanyMapper.deleteByPrimaryKey(Integer.valueOf(id));
  226. }
  227. return 1;
  228. }
  229. @Override
  230. public int deletePaymentNode(String id) {
  231. if (id.contains(",")) {
  232. String []ids =id.split(",");
  233. for (String s : ids) {
  234. paymentNodeMapper.deleteByPrimaryKey(Integer.valueOf(s));
  235. }
  236. }else paymentNodeMapper.deleteByPrimaryKey(Integer.valueOf(id));
  237. return 1;
  238. }
  239. @Override
  240. public int addOrderPayment(TOrderPayment p) {
  241. p.setStatus(0);
  242. AdminListBo a =adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  243. p.setAid(a.getId());
  244. p.setAname(a.getName());
  245. tOrderPaymentMapper.insertSelectiveGetId(p);
  246. NoticeInformationBo ni=financialPaymentMapper.selectBypidGetNotice(p.getId());
  247. addNoticAndSendEmail(ni,a,NoticeStatus.PAYMENT_NODE.getCode());
  248. PaymentLog pl=new PaymentLog(p.getId(),0,"发起付款:"+p.getRemarks(),a.getId(),a.getName());
  249. paymentLogMapper.insertSelective(pl);
  250. return 1;
  251. }
  252. @Override
  253. public outOrderPayment OrderPaymentDetails(Integer id) {
  254. TOrderPayment tp=tOrderPaymentMapper.selectByPrimaryKey(id);
  255. Integer type=tp.getChooseType();
  256. outOrderPayment op=tOrderPaymentMapper.selectByidGetDetails(id);
  257. op.setChooseType(type);
  258. ThirdPartyCompany tpc=thirdPartyCompanyMapper.selectByPrimaryKey(tp.getTpcId());
  259. if(!op.getCompanyName().equals(tpc.getCompanyName()))op.setCompanyName(op.getCompanyName()+"("+tpc.getCompanyName()+")");
  260. if (type==0) {//支付种类 0第三方 1催款 2官费
  261. op.setInitialQuantity(tpc.getQuantity());
  262. op.setInitialTotalAmount(tpc.getTotalAmount().toString());
  263. op.setInitialUnitPrice(tpc.getUnitPrice().toString());
  264. op.setInitialPaymentAmount(tpc.getPartyAmount().toString());
  265. }else if (type==1) {
  266. PaymentNode pn=paymentNodeMapper.selectByPrimaryKey(tp.getNodeId());
  267. op.setInitialQuantity(pn.getQuantity());
  268. op.setInitialTotalAmount(pn.getTotalAmount().toString());
  269. op.setInitialUnitPrice(pn.getUnitPrice().toString());
  270. op.setInitialPaymentAmount(pn.getPartyAmount().toString());
  271. }else if (type==2) {
  272. op.setInitialQuantity(tpc.getQuantity());
  273. TOrderTask tk=tOrderTaskMapper.selectByPrimaryKey(tp.getTid());
  274. OrderOutsourceDtails out=tOrderOutsourceMapper.selectByOrderNo(null, tp.getTid().toString());
  275. OfficialFeePrice of=officialFeePriceMapper.selectBytype(out.getPatentNameType());
  276. if (tk.getCostReduction()==0) {
  277. op.setInitialUnitPrice(of.getAmount().toString());
  278. }else {
  279. op.setInitialUnitPrice(of.getProportion85().toString());
  280. }
  281. op.setInitialTotalAmount(new BigDecimal( op.getInitialUnitPrice()).multiply(new BigDecimal(op.getInitialQuantity())).toString());
  282. }
  283. if (!TokenManager.hasRole(AFTConstants.FINANCE)&&
  284. !TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)&&
  285. !TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)&&
  286. !TokenManager.hasRole(AFTConstants.OUTSOURCE_AUDITOR)) {
  287. outProjectBo ob=tOrderOutsourceMapper.selectByTid(tp.getTid());
  288. if (ob!=null &&ob.getStartType()!=null&& ob.getStartType()==1) {
  289. if((ob.getProjectType()==1&&ob.getPatentType()==0)||(ob.getProjectType()==2)) {
  290. op.setInitialUnitPrice("***");
  291. op.setInitialTotalAmount("***");
  292. }
  293. }
  294. }
  295. return op;
  296. }
  297. @Override
  298. public int updateOrderPayment(TOrderPayment p) {
  299. TOrderPayment tp=new TOrderPayment();
  300. tp.setId(p.getId());
  301. tp.setRemarks(p.getRemarks());
  302. tp.setStatus(p.getStatus());
  303. Integer type=NoticeStatus.PAYMENT_NODE.getCode();
  304. String auditStr="重新发起付款:";
  305. //状态 0审核 1待支付 2驳回 3已支付 4取消
  306. if (p.getStatus()==0) {
  307. tp.setApplicationAmount(p.getApplicationAmount());
  308. tp.setChooseType(p.getChooseType());
  309. tp.setPaymentType(p.getPaymentType());
  310. tp.setPaymentAmount(p.getPaymentAmount());
  311. tp.setQuantity(p.getQuantity());
  312. tp.setPaymentStatus(p.getPaymentStatus());
  313. }else if (p.getStatus()==1) {
  314. type= NoticeStatus.PAYMENT_YES.getCode();
  315. tp.setApplicationAmount(p.getApplicationAmount());
  316. tp.setQuantity(p.getQuantity());
  317. auditStr="审核通过:";
  318. }else if(p.getStatus()==2) {
  319. type= NoticeStatus.PAYMENT_NO.getCode();
  320. tp.setApplicationAmount(p.getApplicationAmount());
  321. auditStr="审核驳回:";
  322. }else if (p.getStatus()==3) {
  323. type=NoticeStatus.PAYMENT_COMPLETE.getCode();
  324. tp.setPaymentAmount(p.getPaymentAmount()==null?p.getPaymentAmount():p.getApplicationAmount());
  325. confirmPayment(p);
  326. auditStr="审核完成";
  327. }else if(p.getStatus()==4) {
  328. auditStr="付款取消";
  329. }
  330. NoticeInformationBo ni=financialPaymentMapper.selectBypidGetNotice(p.getId());
  331. AdminListBo a =adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  332. addNoticAndSendEmail(ni,a,type);
  333. PaymentLog pl=new PaymentLog(p.getId(),p.getStatus(),auditStr+p.getAuditNotes()==null?"":p.getAuditNotes(),a.getId(),a.getName());
  334. paymentLogMapper.insertSelective(pl);
  335. return tOrderPaymentMapper.updateByPrimaryKeySelective(tp);
  336. }
  337. private void confirmPayment(TOrderPayment p) {
  338. //如果确定支付
  339. int flag=0;
  340. TOrderPayment tp=tOrderPaymentMapper.selectByPrimaryKey(p.getId());
  341. ThirdPartyCompany tpc=new ThirdPartyCompany();
  342. if (p.getPaymentAmount()==null||p.getPaymentAmount().compareTo(new BigDecimal(0))==0) {
  343. p.setPaymentAmount(tp.getApplicationAmount());
  344. }
  345. if(tp.getChooseType()==0){
  346. tpc=thirdPartyCompanyMapper.selectByPrimaryKey(tp.getTpcId());
  347. }else if (tp.getChooseType()==1) {
  348. PaymentNode pn=paymentNodeMapper.selectByPrimaryKey(tp.getNodeId());
  349. BigDecimal count=pn.getTotalAmount();
  350. BigDecimal party=pn.getPartyAmount();
  351. party=party.add(p.getPaymentAmount());
  352. if (party.compareTo(new BigDecimal(0))==0) {
  353. flag=0;
  354. }else if (party.compareTo(count)==0) {
  355. flag=2;
  356. }else if (party.compareTo(count)==-1) {
  357. flag=1;
  358. }
  359. pn.setStatus(flag);
  360. pn.setPartyAmount(p.getPaymentAmount());
  361. paymentNodeMapper.updateByPrimaryKeySelective(pn);
  362. tpc=thirdPartyCompanyMapper.selectByPrimaryKey(pn.getCid());
  363. }else if(tp.getChooseType()==2){
  364. tpc=thirdPartyCompanyMapper.selectByPrimaryKey(tp.getTpcId());
  365. tpc.setOfficialAmount(tpc.getOfficialAmount().add(p.getPaymentAmount()));
  366. }
  367. tpc.setPartyAmount(tpc.getPartyAmount().add(p.getPaymentAmount()));
  368. p.setPaymentAmount(p.getApplicationAmount());
  369. financialPaymentMapper.updateOrderCost(p.getId(),p.getPaymentAmount());
  370. thirdPartyCompanyMapper.updateByPrimaryKeySelective(tpc);
  371. }
  372. @Override
  373. public List<OutPaymentLog> selectPaymentLog(Integer id) {
  374. return paymentLogMapper.selectByPid(id);
  375. }
  376. @Override
  377. public List<outOrderPayment> selectOrderPayment(Integer id) {
  378. List<outOrderPayment> list=tOrderPaymentMapper.selectByTid(id);
  379. if (!TokenManager.hasRole(AFTConstants.FINANCE)&&
  380. !TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)&&
  381. !TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)&&
  382. !TokenManager.hasRole(AFTConstants.OUTSOURCE_AUDITOR)) {
  383. outProjectBo op =null;
  384. if(!list.isEmpty()) op=tOrderOutsourceMapper.selectByTid(id);
  385. if (op!=null &&op.getStartType()!=null&&op.getStartType()==1) {
  386. if((op.getProjectType()==1&&op.getPatentType()==0)||(op.getProjectType()==2)) {
  387. for (outOrderPayment oc : list) {
  388. if (oc.getChooseType()!=2) {
  389. oc.setApplicationAmount("***");
  390. }
  391. }
  392. }
  393. }
  394. }
  395. return list;
  396. }
  397. @Override
  398. public int addfinancialPayment(InuptFinancialPayment f) {
  399. f.setPaymentTime(DateUtils.StringToDate(f.getPaymentTimes(), AFTConstants.YYYYMMDD));
  400. financialPaymentMapper.insertSelectiveGetId(f);
  401. return f.getId();
  402. }
  403. @Override
  404. public List<outFinancialPayment> selectfinancialPayment(Integer id) {
  405. return financialPaymentMapper.selectByPid(id);
  406. }
  407. public void addNoticAndSendEmail(NoticeInformationBo in,AdminListBo a,Integer type) {
  408. String str=NoticeStatus.getValueByCode(type)+": 订单编号 -"+in.getOrderNo()+
  409. ",客户名称:"+in.getBuyerName()+", 操作人:"+a.getName()+"-"+a.getDepartmentName()+"。";
  410. Notice n =new Notice();
  411. EmailBo bo = new EmailBo(NoticeStatus.getValueByCode(type), a.getEmail(), a.getDepartmentName(), a.getName(),
  412. in.getOrderNo(), in.getSalesmanName());
  413. n.setId(UUID.randomUUID().toString());
  414. if (type==NoticeStatus.PAYMENT_NODE.getCode()||type==NoticeStatus.PAYMENT_NODE.getCode()) {
  415. n.setAid(in.getFinanceId());
  416. bo.setAddress(in.getFinanceEmail());
  417. } else if(type==NoticeStatus.PAYMENT_NO.getCode()||type==NoticeStatus.PAYMENT_YES.getCode()
  418. ||type==NoticeStatus.PAYMENT_COMPLETE.getCode()) {
  419. n.setAid(in.getTechId());
  420. bo.setAddress(in.getTechEmail());
  421. }
  422. n.setNoticeType(type);
  423. n.setContent(str);
  424. n.setReaded(0);//未读
  425. noticeMapper.insertSelective(n);
  426. if(StringUtils.isNotBlank(a.getEmail())) {
  427. try {
  428. SendEmailUtil.getInstance().send(bo);
  429. } catch (UnsupportedEncodingException | MessagingException e) {
  430. e.printStackTrace();
  431. }
  432. }
  433. }
  434. @Override
  435. public boolean checkPayment(TOrderPayment p) {
  436. BigDecimal total=new BigDecimal(0);
  437. BigDecimal a=p.getApplicationAmount()==null?new BigDecimal(0):p.getApplicationAmount();
  438. List<outOrderPayment> list=new ArrayList<>();
  439. //支付种类 0第三方 1催款2官费
  440. if (p.getChooseType()==0) {
  441. //首先不能大于第三方
  442. list=tOrderPaymentMapper.selectList(p.getTpcId(),null,p.getChooseType());
  443. }else if (p.getChooseType()==1) {
  444. list=tOrderPaymentMapper.selectList(null,p.getNodeId(),p.getChooseType());
  445. }else if (p.getChooseType()==2) {
  446. list=tOrderPaymentMapper.selectList(p.getTpcId(),null,p.getChooseType());
  447. }
  448. for (outOrderPayment o : list) {
  449. a=a.add(new BigDecimal(o.getApplicationAmount()));
  450. }
  451. if (p.getChooseType()==0) {
  452. ThirdPartyCompany t=thirdPartyCompanyMapper.selectByPrimaryKey(p.getTpcId());
  453. total=t.getTotalAmount();
  454. }else if (p.getChooseType()==1) {
  455. PaymentNode n=paymentNodeMapper.selectByPrimaryKey(p.getNodeId());
  456. total=n.getTotalAmount();
  457. }else if (p.getChooseType()==2) {
  458. OutThirdPartyCompany ot=thirdPartyCompanyMapper.selectByIdPuls(p.getTpcId());
  459. if (ot.getCostReduction()==0) {
  460. total=new BigDecimal(ot.getOfficialUnitPrice()).multiply(new BigDecimal(ot.getQuantity()));
  461. }else {
  462. total=new BigDecimal(ot.getReductionAmount()).multiply(new BigDecimal(ot.getQuantity()));
  463. }
  464. }
  465. if (a.compareTo(total) != 1) {
  466. return false;
  467. }
  468. return true;
  469. }
  470. @Override
  471. public boolean checkprojectDun(TOrderPayment p) {
  472. PaymentNode pn=paymentNodeMapper.selectByPrimaryKey(p.getNodeId());
  473. TOrderTaskDetailBo tt=tOrderTaskMapper.getOrderTaskDetail(p.getTid().toString());
  474. // 项目状态 0-项目待提交 1-项目已提交,2-项目评审,3-项目立项,4-项目公示,5-项目抽查,6-项目备案,7-项目下证,8-项目验收,
  475. // 9-项目拨款 10- 项目进度10% 11- 项目进度30% 12- 项目进度70%
  476. if(pn.getDunType()==1) {
  477. return false;
  478. }
  479. if (pn.getDunType()==0&&pn.getPartyTime().getTime()<new Date().getTime()) {//如果自定义则看触发时间
  480. return false;
  481. }else if (NewOrderDunType.CGZH_WC.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  482. &&(tt.getProjectStatus()>7&&tt.getProjectStatus()<10)) {
  483. return false;
  484. }else if (NewOrderDunType.COMMON_NGS.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  485. &&(tt.getProjectStatus()>3&&tt.getProjectStatus()<10)) {
  486. return false;
  487. }else if (NewOrderDunType.COMMON_XZ.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  488. &&(tt.getProjectStatus()>6&&tt.getProjectStatus()<10)) {
  489. return false;
  490. } else if (NewOrderDunType.KJXM_LX.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  491. &&(tt.getProjectStatus()>2&&tt.getProjectStatus()<10)) {
  492. return false;
  493. } else if (NewOrderDunType.KJXM_BK.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  494. &&(tt.getProjectStatus()>8&&tt.getProjectStatus()<10)) {
  495. return false;
  496. } else if (NewOrderDunType.KJJR_BK.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  497. &&(tt.getProjectStatus()>8&&tt.getProjectStatus()<10)) {
  498. return false;
  499. } else if (NewOrderDunType.RJKF_LX.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  500. &&(tt.getProjectStatus()>2&&tt.getProjectStatus()<10)) {
  501. return false;
  502. } else if (NewOrderDunType.RJKF_WZ.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  503. &&(tt.getProjectStatus()>7&&tt.getProjectStatus()<10)) {
  504. return false;
  505. } else if (NewOrderDunType.ZSCQ_GS_SL_XZ.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())) {
  506. if (tt.getBpType()==1&&(tt.getProjectStatus()>7&&tt.getProjectStatus()<10)) {
  507. return false;
  508. }else if (tt.getBpType()!=1&&(tt.getProjectStatus()>3&&tt.getProjectStatus()<10)){
  509. return false;
  510. }
  511. } else if (NewOrderDunType.ZSCQ_XZ.getCode()==Integer.valueOf(""+pn.getProjectType()+pn.getDunType())
  512. &&(tt.getProjectStatus()>6&&tt.getProjectStatus()<10)) {
  513. return false;
  514. }
  515. return true;
  516. }
  517. @SuppressWarnings("unchecked")
  518. @Override
  519. public Pagination<outPaymentList> selectPaymentList(InputPaymentList i) {
  520. Map<String, Object> map =new HashMap<>();
  521. map.put("aid", TokenManager.getAdminId());
  522. if (i.getContractNo()!=null)map.put("contractNo", i.getContractNo());
  523. if (i.getOrderNo()!=null)map.put("orderNo", i.getOrderNo());
  524. if (i.getUserName()!=null)map.put("userName", i.getUserName());
  525. if (i.getDepId()!=null)map.put("depId", i.getDepId());
  526. if (i.getAname()!=null)map.put("aname", i.getAname());
  527. if (i.getFinanceName()!=null)map.put("financeName", i.getFinanceName());
  528. if (i.getCname()!=null)map.put("cname", i.getCname());
  529. if (i.getPname()!=null)map.put("pname", i.getPname());
  530. if (i.getStatus()!=null)map.put("status", i.getStatus());
  531. if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  532. map.put("lvl", 1);
  533. }else if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
  534. TokenManager.hasRole(AFTConstants.CED)||TokenManager.hasRole(AFTConstants.SUPERADMIN)||
  535. TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)) {
  536. map.put("lvl", 2);
  537. }else if (TokenManager.hasRole(AFTConstants.TECH)||TokenManager.hasRole(AFTConstants.TECH_MANAGER)) {
  538. map.put("lvl", 3);
  539. }else {
  540. map.put("lvl", 0);
  541. }
  542. return (Pagination<outPaymentList>)findPage("selectPaymentList","selectPaymentCount",
  543. map,i.getPageNo(),i.getPageSize());
  544. }
  545. @SuppressWarnings("unchecked")
  546. @Override
  547. public Pagination<outNodeList> selectPaymentList(InputNodeList i) {
  548. Map<String, Object> map =new HashMap<>();
  549. map.put("aid", TokenManager.getAdminId());
  550. if (i.getContractNo()!=null)map.put("contractNo", i.getContractNo());
  551. if (i.getOrderNo()!=null)map.put("orderNo", i.getOrderNo());
  552. if (i.getUserName()!=null)map.put("userName", i.getUserName());
  553. if (i.getCname()!=null)map.put("cname", i.getCname());
  554. if (i.getPname()!=null)map.put("pname", i.getPname());
  555. if (i.getStatus()!=null)map.put("status", i.getStatus());
  556. if (i.getStartTime()!=null&&i.getEndTime()!=null) {
  557. map.put("startTime", DateUtils.StringToDate(i.getStartTime(), AFTConstants.YYYYMMDD));
  558. map.put("endTime", DateUtils.StringToDate(i.getEndTime()+" 23:59:59", AFTConstants.YYYYMMDDHHMMSS));
  559. }
  560. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  561. map.put("lvl", 1);
  562. }else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  563. map.put("lvl", 2);
  564. }else if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
  565. TokenManager.hasRole(AFTConstants.CED)||TokenManager.hasRole(AFTConstants.SUPERADMIN)||
  566. TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)) {
  567. map.put("lvl", 3);
  568. }else {
  569. map.put("lvl", 0);
  570. }
  571. return (Pagination<outNodeList>)findPage("selectNodeList","selectNodeCount",
  572. map,i.getPageNo(),i.getPageSize());
  573. }
  574. @Override
  575. public int insertSoftWritingPrice(SoftWritingPrice s) {
  576. return softWritingPriceMapper.insertSelective(s);
  577. }
  578. @Override
  579. public int updateSoftWritingPrice(SoftWritingPrice s) {
  580. //
  581. return softWritingPriceMapper.updateByPrimaryKeySelective(s);
  582. }
  583. @Override
  584. public Integer pushSelectByCid(String companyName,int i) {
  585. String aid=null;
  586. if (i==1) {
  587. aid=TokenManager.getAdminId();
  588. }
  589. List<Integer> list=companyLibraryMapper.selectName(companyName,i,aid);
  590. if (list.size()<1) {
  591. CompanyLibrary c=new CompanyLibrary();
  592. c.setCompanyName(companyName);
  593. c.setType(i);
  594. companyLibraryMapper.insertSelectiveGetId(c);
  595. return c.getId();
  596. }else {
  597. return list.get(0);
  598. }
  599. }
  600. @SuppressWarnings("unchecked")
  601. @Override
  602. public Pagination<SoftWritingPrice> listSoftWritingPrice(SoftWritingPrice s, Integer pageNo, Integer pageSize) {
  603. Map<String, Object> map =new HashMap<>();
  604. map.put("s", s);
  605. return (Pagination<SoftWritingPrice>)findPage("softWritingPriceList","softWritingPriceCount",
  606. map,pageNo,pageSize);
  607. }
  608. @Override
  609. public int deleteSoftWritingPrice(Integer id) {
  610. SoftWritingPrice sw=softWritingPriceMapper.selectByPrimaryKey(id);
  611. if (sw.getCid()!=null) {
  612. companyLibraryMapper.deleteByPrimaryKey(sw.getCid());
  613. }
  614. return softWritingPriceMapper.deleteByPrimaryKey(id);
  615. }
  616. @Override
  617. public boolean checkSoftWritingPrice(SoftWritingPrice s) {
  618. SoftWritingPrice sw=new SoftWritingPrice();
  619. if(s.getId()!=null)sw=softWritingPriceMapper.selectByPrimaryKey(s.getId());
  620. if (s.getId()!=null) {
  621. s.setCid(sw.getCid());
  622. }
  623. List<SoftWritingPrice>list=softWritingPriceMapper.checkSoftWritingPrice(s);
  624. if (list.size()<1) {
  625. return false;
  626. }else if (list.size()==1&&s.getId()!=null) {
  627. for (SoftWritingPrice ss : list) {
  628. if(ss.getId().equals(s.getId()))return false;
  629. }
  630. }
  631. return true;
  632. }
  633. @Override
  634. public Map<String ,Object> updateGroupPayment(String ids) {
  635. String [] idss=ids.split(",");
  636. List<Integer>elist=new ArrayList<>();
  637. List<Integer> list=new ArrayList<>();
  638. List<Notice> nlist=new ArrayList<>();
  639. Date date=new Date();
  640. for (String s : idss) {
  641. TOrderPayment top=tOrderPaymentMapper.selectByPrimaryKey(Integer.valueOf(s));
  642. if (top!=null&&top.getStatus()==1) {
  643. top.setStatus(3);
  644. top.setPaymentAmount(top.getApplicationAmount());
  645. tOrderPaymentMapper.updateByPrimaryKeySelective(top);
  646. list.add(top.getId());
  647. //做已付款金额计算
  648. confirmPayment(top);
  649. //发送站内通知
  650. Notice n =new Notice();
  651. n.setId(UUID.randomUUID().toString());
  652. NoticeInformationBo ni=financialPaymentMapper.selectBypidGetNotice(Integer.valueOf(s));
  653. AdminListBo a =adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  654. n.setAid(ni.getTechId());
  655. n.setCreateTime(date);
  656. n.setNoticeType(NoticeStatus.PAYMENT_COMPLETE.getCode());
  657. String str=NoticeStatus.getValueByCode(n.getNoticeType())+": 订单编号 -"+ni.getOrderNo()+
  658. ",客户名称:"+ni.getBuyerName()+", 操作人:"+a.getName()+"-"+a.getDepartmentName()+"。";
  659. n.setContent(str);
  660. n.setReaded(0);//未读
  661. nlist.add(n);
  662. }else {
  663. elist.add(Integer.valueOf(s));
  664. }
  665. }
  666. if(!nlist.isEmpty())noticeMapper.insertBatch(nlist);
  667. // if(!list.isEmpty())tOrderPaymentMapper.updateByids(list);
  668. Map<String ,Object> map=new HashMap<>();
  669. map.put("OK", list);
  670. map.put("fail", elist);
  671. return map;
  672. }
  673. @Override
  674. public int addOfficialFeePrice(OfficialFeePrice o) {
  675. return officialFeePriceMapper.insertSelective(o);
  676. }
  677. @Override
  678. public int updateOfficialFeePrice(OfficialFeePrice o) {
  679. return officialFeePriceMapper.updateByPrimaryKeySelective(o);
  680. }
  681. @Override
  682. public int deleteOfficialFeePrice(Integer id) {
  683. return officialFeePriceMapper.deleteByPrimaryKey(id);
  684. }
  685. @Override
  686. public List<OfficialFeePrice> listOfficialFeePrice(String name) {
  687. return officialFeePriceMapper.selectListByname(name);
  688. }
  689. @Override
  690. public int deleteFinancialPayment(Integer id) {
  691. return financialPaymentMapper.deleteByPrimaryKey(id);
  692. }
  693. @Override
  694. public void calculationUnitPrice(ThirdPartyCompany t) {
  695. SoftWritingPrice s=new SoftWritingPrice();
  696. s.setCid(t.getCid());
  697. s.setMaterial(t.getMaterial());
  698. s.setUrgent(t.getUrgent());
  699. List<SoftWritingPrice> list=softWritingPriceMapper.checkSoftWritingPrice(s);
  700. for (SoftWritingPrice sw : list) {
  701. t.setUnitPrice(sw.getUnitPrice());
  702. t.setTotalAmount(sw.getUnitPrice().multiply(new BigDecimal(t.getQuantity())));
  703. }
  704. }
  705. @Override
  706. public void calculationPatentUnitPrice(ThirdPartyCompany t,Integer patentType) {
  707. PatentPrice p=patentPriceMapper.selectBycid(t.getCid());
  708. // 专利名称 0实用新型 1发明专利 2外观专利 3 其他
  709. BigDecimal unitPrice=null;
  710. if (patentType==0) {
  711. unitPrice=p.getUtilityModel();
  712. }else if (patentType==1) {
  713. unitPrice=p.getInventionPatent();
  714. }else if (patentType==2) {
  715. unitPrice=p.getAppearancePatent();
  716. }
  717. t.setUnitPrice(unitPrice);
  718. t.setTotalAmount(unitPrice.multiply(new BigDecimal(t.getQuantity())));
  719. }
  720. @Override
  721. public int addpatentPrice(PatentPrice p) {
  722. return patentPriceMapper.insertSelective(p);
  723. }
  724. @Override
  725. public int updatepatentPrice(PatentPrice p) {
  726. return patentPriceMapper.updateByPrimaryKeySelective(p);
  727. }
  728. @Override
  729. public int deletepatentPrice(Integer id) {
  730. PatentPrice pp=patentPriceMapper.selectByPrimaryKey(id);
  731. if (pp.getCid()!=null) {
  732. companyLibraryMapper.deleteByPrimaryKey(pp.getCid());
  733. }
  734. return patentPriceMapper.deleteByPrimaryKey(id);
  735. }
  736. @Override
  737. public List<PatentPrice> listpatentPrice(String name) {
  738. return patentPriceMapper.selectlist(name);
  739. }
  740. @Override
  741. public boolean addCompanyChekeNumber(ThirdPartyCompany t) {
  742. TOrderTask tt=tOrderTaskMapper.selectByPrimaryKey(t.getTid());
  743. List<OutThirdPartyCompany> list =thirdPartyCompanyMapper.selectByTid(t.getTid());
  744. Integer count=t.getQuantity();
  745. for (OutThirdPartyCompany out : list) {
  746. if (t.getId()==null||!t.getId().equals(out.getId())) {
  747. count+=out.getQuantity();
  748. }
  749. }
  750. if (tt.getCommodityQuantity()>=count) {
  751. return false;
  752. }
  753. return true;
  754. }
  755. @Override
  756. public void checkGetAmount(TOrderPayment p) {
  757. if(p.getApplicationAmount()==null) {
  758. ThirdPartyCompany tpc=thirdPartyCompanyMapper.selectByPrimaryKey(p.getTpcId());
  759. BigDecimal count =tpc.getUnitPrice().multiply(new BigDecimal(p.getQuantity()));
  760. p.setApplicationAmount(count);
  761. }
  762. }
  763. @Override
  764. public void exportPaymentList(HttpServletResponse response, InputPaymentList ip) throws IOException {
  765. OutputStream out = response.getOutputStream();
  766. try {
  767. @SuppressWarnings("unchecked")
  768. List<outPaymentList> list=(List<outPaymentList>) selectPaymentList(ip).getList();
  769. //支付编号 项目编号 项目名称 项目状态 分类名称 合同编号 订单编号 客户名称 部门名称 付款类型 本次申请金额 已支付 申请人 财务名称 状态 创建时间
  770. String[] comment = {"支付编号","项目编号","项目名称","项目状态","分类名称","合同编号","订单编号","客户名称","部门名称","第三方机构名称","付款类型","本次申请金额",
  771. "已支付","申请人","财务名称","状态","创建时间"};
  772. String fileName ="财务成本列表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls";
  773. //type 0 变更
  774. XSSFWorkbook wb =ExportExcelUtil.exportTemplateInfoS(comment,"财务成本列表");
  775. //根据列表编写文档
  776. XSSFSheet sheet =wb.getSheetAt(0);
  777. for (outPaymentList ob : (List<outPaymentList>)list) {
  778. //新增一行
  779. XSSFRow r = sheet.createRow(sheet.getLastRowNum()+1);
  780. for (int i = 0; i < comment.length; i++) {
  781. //当前列的只
  782. String o = "";
  783. switch (comment[i]) {
  784. // "支付编号","项目编号","项目名称","项目状态","分类名称","合同编号","订单编号","客户名称","部门名称","第三方机构名称","付款类型","本次申请金额",
  785. // "已支付","申请人","财务名称","状态","创建时间"
  786. case "支付编号": o = ob.getId().toString(); break;
  787. case "项目编号": o = ob.getTid().toString(); break;
  788. case "项目名称": o = ob.getPname(); break;
  789. case "项目状态": o = ProjectNewStage.getValueByCode(ob.getProjectStatus()); break;
  790. case "分类名称": o = ob.getCname(); break;
  791. case "合同编号": o = ob.getContractNo(); break;
  792. case "订单编号": o = ob.getOrderNo(); break;
  793. case "客户名称": o = ob.getCname(); break;
  794. case "部门名称": o = ob.getDepName(); break;
  795. case "第三方机构名称": o = ob.getCname(); break;
  796. case "付款类型": o = ob.getChooseType()==0?"第三方成本":
  797. ob.getChooseType()==1?"催款节点":ob.getChooseType()==2?"官费":"";
  798. break;
  799. case "本次申请金额": o = ob.getApplicationAmount().toString(); break;
  800. case "已支付": o = ob.getPaymentAmount(); break;
  801. case "申请人": o = ob.getAname(); break;
  802. case "财务名称": o = ob.getFinanceName(); break;
  803. case "状态": o = ob.getStatus()==0?"审核":ob.getStatus()==1?"待支付":
  804. ob.getStatus()==2?"驳回":ob.getStatus()==3?"已支付":
  805. ob.getStatus()==4?"已取消":"";
  806. break;
  807. case "创建时间": o = ob.getCreateTime(); break;
  808. default: o = ""; break;
  809. }
  810. XSSFCell c = r.createCell(i);
  811. c.setCellValue(o);
  812. }
  813. }
  814. //返回名称及参数
  815. response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1"));
  816. response.setContentType("application/octet-stream;charset=utf-8");
  817. // 返回数据流
  818. wb.write(out);
  819. out.flush();
  820. out.close();
  821. } catch (Exception e) {
  822. e.printStackTrace();
  823. throw new BusinessException(new Error("表格生成错误。"));
  824. }finally {
  825. out.flush();
  826. out.close();
  827. }
  828. }
  829. }