DemandAddImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. package u8c.impl;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.transaction.UserTransaction;
  9. import com.alibaba.fastjson.JSON;
  10. import com.alibaba.fastjson.JSONArray;
  11. import com.alibaba.fastjson.JSONObject;
  12. import com.microsoft.sqlserver.jdbc.StringUtils;
  13. import nc.bs.dao.BaseDAO;
  14. import nc.bs.framework.adaptor.IHttpServletAdaptor;
  15. import nc.bs.framework.common.NCLocator;
  16. import nc.bs.pub.billcodemanage.BillcodeGenerater;
  17. import nc.itf.uap.IUAPQueryBS;
  18. import nc.jdbc.framework.processor.ColumnProcessor;
  19. import nc.vo.jcom.lang.StringUtil;
  20. import nc.vo.pub.BusinessException;
  21. import nc.vo.pub.CircularlyAccessibleValueObject;
  22. import nc.vo.pub.lang.UFDate;
  23. import nc.vo.pub.lang.UFDouble;
  24. import nc.vo.trade.pub.IBillStatus;
  25. import u8c.bs.servlet.service.BaseServlet;
  26. import u8c.bs.servlet.service.GetBaseDAOUtil;
  27. import u8c.itf.po.IDemandPurchaseRequisition;
  28. import u8c.log.NcLog;
  29. import u8c.vo.DemandBVO;
  30. import u8c.vo.DemandVO;
  31. import nc.bs.framework.common.NCLocator;
  32. public class DemandAddImpl extends BaseServlet implements IHttpServletAdaptor{
  33. private IUAPQueryBS iuap = NCLocator.getInstance().lookup(IUAPQueryBS.class);
  34. BaseDAO dao = new BaseDAO();
  35. UserTransaction trans;
  36. @Override
  37. public void doAction(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  38. try {
  39. String createStr = buildJson(req, resp, this.getClass().getName());
  40. JSONObject json = JSON.parseObject(createStr);
  41. //接口返回结果
  42. JSONObject returnobj = new JSONObject();
  43. //正常返回json
  44. JSONArray result = new JSONArray();
  45. //报错返回json
  46. JSONArray errMessage = new JSONArray();
  47. String token =req.getParameter("token");
  48. if(!(token!=null && !token.equals("")&&("07a81a68-c60c-4ee4-83dc-25aa51a51497").equals(token))){
  49. errMessage.add(formatRSJsonData("失败","请确认通讯密码是否正确!",""));
  50. returnobj.put("info", "失败");
  51. returnobj.put("errMessage", "请确认通讯密码是否正确!");
  52. returnobj.put("result", errMessage);
  53. resp.getWriter().write(returnobj.toString());
  54. NcLog.info(returnobj.toString());
  55. return;
  56. }
  57. trans = NCLocator.getInstance().lookup(UserTransaction.class);
  58. trans.begin(); //开启事务
  59. String checkresult = checkJson(json);
  60. if(checkresult != null){
  61. errMessage.add(formatRSJsonData("失败",checkresult,""));
  62. returnobj.put("info", "失败");
  63. returnobj.put("errMessage", checkresult);
  64. returnobj.put("result", errMessage);
  65. resp.getWriter().write(returnobj.toString());
  66. NcLog.info(returnobj.toString());
  67. return;
  68. }
  69. JSONArray bodyArray = json.getJSONArray("result");
  70. for (Object Object : bodyArray) {
  71. JSONObject bodyObject = JSONObject.parseObject(Object.toString());
  72. String pk_corp = bodyObject.getString("pk_corp");//计划组织
  73. String vbillcode = bodyObject.getString("vbillcode");//单据号
  74. String prjcodehead=bodyObject.getString("prjcode");
  75. if(StringUtil.isEmpty(vbillcode)) {//如果单据号为空则自动生成
  76. vbillcode=new BillcodeGenerater().getBillCode("A2A3",pk_corp, null, null);
  77. }
  78. String pk_demandOld = getVbillcode(vbillcode);
  79. if(!StringUtils.isEmpty(pk_demandOld)) {
  80. errMessage.add(formatRSJsonData("失败","单据号"+ vbillcode +"已存在",""));
  81. returnobj.put("info", "失败");
  82. returnobj.put("errMessage", "单据号"+ vbillcode +"已存在");
  83. returnobj.put("result", errMessage);
  84. resp.getWriter().write(returnobj.toString());
  85. NcLog.info(returnobj.toString());
  86. return;
  87. }
  88. String dbilldate = bodyObject.getString("dbilldate");//单据日期
  89. String billmaker = GetBaseDAOUtil.getUserid(bodyObject.getString("billmaker"));//制单人
  90. if(billmaker.equals("")) {
  91. errMessage.add(formatRSJsonData("失败","制单人"+bodyObject.getString("billmaker")+"未查到,请检查",""));
  92. returnobj.put("info", "失败");
  93. returnobj.put("errMessage", "制单人"+bodyObject.getString("billmaker")+"未查到,请检查");
  94. returnobj.put("result", errMessage);
  95. resp.getWriter().write(returnobj.toString());
  96. NcLog.info(returnobj.toString());
  97. return;
  98. }
  99. String workmanid = GetBaseDAOUtil.getPsndocid(bodyObject.getString("workmanid"));//业务员
  100. String plandeptid = GetBaseDAOUtil.getDeptdocid(bodyObject.getString("plandeptid"));//计划部门
  101. String xmjbpk=GetBaseDAOUtil.getprojectid(prjcodehead);//项目基本档案主键
  102. String xmglpk=SqlexecuteQuery("pk_jobmngfil","bd_jobmngfil","pk_jobbasfil",xmjbpk);//项目管理档案主键
  103. String vnote = bodyObject.getString("vnote");//备注
  104. DemandVO headvo = new DemandVO();
  105. //表头赋值
  106. headvo.setPk_corp(pk_corp);
  107. headvo.setVbillcode(vbillcode);
  108. headvo.setDbilldate(new UFDate(dbilldate));//单据日期
  109. headvo.setMakedate(new UFDate(dbilldate));//制单日期
  110. headvo.setBillmaker(billmaker);
  111. headvo.setWorkmanid(workmanid);//业务员
  112. headvo.setPlandeptid(plandeptid);
  113. headvo.setVnote(vnote);//备注
  114. headvo.setVdef30(bodyObject.getString("vdef30"));//业务类型
  115. headvo.setBillstatus(IBillStatus.FREE);
  116. headvo.setProjectid(xmglpk);
  117. String pk_demand = dao.insertVO(headvo);
  118. //表体赋值
  119. if(bodyObject.getJSONArray("po")!=null) {
  120. JSONArray inArray = bodyObject.getJSONArray("po");
  121. for(int i = 0;i < inArray.size();i++) {
  122. Object inobj = inArray.get(i);
  123. JSONObject injsobj = JSONObject.parseObject(inobj.toString());
  124. String prjcode = injsobj.getString("prjcode");//项目编码
  125. String prjname = GetBaseDAOUtil.getprojectname(prjcode);//项目名称
  126. String prjtypecode = GetBaseDAOUtil.getprjtypecode(prjcode);//项目分类编码
  127. String prjtypename = GetBaseDAOUtil.getprjtypename(prjcode);//项目分类名称
  128. String vbatchcode = injsobj.getString("vbatchcode");//批次
  129. String cmaterialcode = SqlexecuteQuery("invcode","bd_invbasdoc","invcode",injsobj.getString("cmaterialcode"));//存货编码
  130. String cmaterialname = GetBaseDAOUtil.getinvname(cmaterialcode);//存货名称
  131. String spec = GetBaseDAOUtil.getinvspec(cmaterialcode);//规格
  132. String model = GetBaseDAOUtil.getinvtype(cmaterialcode);//型号
  133. String width = injsobj.getString("width");//宽度
  134. String height = injsobj.getString("height");//高度
  135. // String castunitid = GetBaseDAOUtil.getMeasidByName(injsobj.getString("castunitid"));//辅助计量单位
  136. String castunitid = injsobj.getString("castunitid");//辅助计量单位
  137. String num = injsobj.getString("num");//数量
  138. String nastnum = injsobj.getString("nastnum");//辅数量
  139. String vdef13="";//换算率
  140. if( (!StringUtils.isEmpty(num)) && (!StringUtils.isEmpty(nastnum)) ) {//判断数量与辅数量不为空计算换算率
  141. vdef13=new UFDouble(num).div(new UFDouble(nastnum)).toString();
  142. }
  143. String unitid = GetBaseDAOUtil.getmeasname(cmaterialcode);//计量单位
  144. String vdef1 = injsobj.getString("vdef1");//楼号楼层
  145. String vdef2 = injsobj.getString("vdef2");//樘数(数量)
  146. String vdef3 = injsobj.getString("vdef3");//框统计
  147. String vdef4 = injsobj.getString("vdef4");//扇统计
  148. String vdef5 = injsobj.getString("vdef5");//半成品分类
  149. String vdef6 = injsobj.getString("vdef6");//面积
  150. String vdef7 = injsobj.getString("vdef7");//切割长度
  151. String vdef8 = injsobj.getString("vdef8");//切割角度左下
  152. String vdef9 = injsobj.getString("vdef9");//切割角度右上
  153. String vdef10 = injsobj.getString("vdef10");//备注
  154. String vdef11 = injsobj.getString("vdef11");//系列
  155. String vdef12 = injsobj.getString("vdef12");//玻璃编号
  156. DemandBVO bodyvo = new DemandBVO();
  157. bodyvo.setPrjcode(prjcode);;
  158. bodyvo.setPrjname(prjname);
  159. bodyvo.setPrjtypecode(prjtypecode);
  160. bodyvo.setPrjtypename(prjtypename);
  161. bodyvo.setVbatchcode(vbatchcode);
  162. bodyvo.setCmaterialcode(cmaterialcode);
  163. bodyvo.setCmaterialname(cmaterialname);
  164. bodyvo.setSpec(spec);
  165. bodyvo.setModel(model);
  166. bodyvo.setWidth(width);
  167. bodyvo.setHeight(height);
  168. bodyvo.setCastunitid(castunitid);
  169. bodyvo.setNastnum(nastnum);
  170. bodyvo.setUnitid(unitid);
  171. bodyvo.setNum(new UFDouble(num));//数量
  172. bodyvo.setPk_demand(pk_demand);
  173. bodyvo.setVdef1(vdef1);
  174. bodyvo.setVdef2(vdef2);
  175. bodyvo.setVdef3(vdef3);
  176. bodyvo.setVdef4(vdef4);
  177. bodyvo.setVdef5(vdef5);
  178. bodyvo.setVdef6(vdef6);
  179. bodyvo.setVdef7(vdef7);
  180. bodyvo.setVdef8(vdef8);
  181. bodyvo.setVdef9(vdef9);
  182. bodyvo.setVdef10(vdef10);
  183. bodyvo.setVdef11(vdef11);
  184. bodyvo.setVdef12(vdef12);
  185. bodyvo.setVdef13(vdef13);
  186. bodyvo.setColor(injsobj.getString("color"));
  187. bodyvo.setSizing(injsobj.getString("sizing"));
  188. bodyvo.setAlloy(injsobj.getString("alloy"));
  189. // bodyvo.setStandard("国标");
  190. dao.insertVO(bodyvo);
  191. //生成请购单
  192. // IDemandPurchaseRequisition lookup = NCLocator.getInstance().lookup(IDemandPurchaseRequisition.class);
  193. List<DemandBVO> demandBVOs = new ArrayList();
  194. demandBVOs.add(bodyvo);
  195. // lookup.addPraybillVO(headvo,demandBVOs);
  196. DemandPurchaseRequisitionImpl dao = new DemandPurchaseRequisitionImpl();
  197. dao.addPraybillVO(headvo,demandBVOs);
  198. }
  199. }
  200. result.add(formatRSJsonData("成功","",vbillcode));
  201. }
  202. returnobj.put("info", "成功");
  203. returnobj.put("errMessage", "");
  204. returnobj.put("result", result);
  205. trans.commit();//提交事务
  206. resp.getWriter().write(returnobj.toString());
  207. NcLog.info(returnobj.toString());
  208. } catch (Exception e) {
  209. try {
  210. trans.rollback();//回退
  211. } catch (Exception e1) {
  212. e1.printStackTrace();
  213. }
  214. JSONArray errMessage = new JSONArray();
  215. JSONObject returnobj = new JSONObject();
  216. errMessage.add(formatRSJsonData("失败",e.getMessage(),""));
  217. returnobj.put("info", "失败");
  218. returnobj.put("errMessage", e.getMessage());
  219. returnobj.put("result", errMessage);
  220. resp.getWriter().write(returnobj.toString());
  221. NcLog.info(returnobj.toString());
  222. return;
  223. }
  224. }
  225. // 查询单据号主键
  226. public String getVbillcode(String vbillcode) throws Exception {
  227. String sql = "select pk_demand from po_demand where vbillcode ='"+vbillcode+"' and isnull(dr,0) = 0";
  228. String pk_demand = (String) iuap.executeQuery(sql, new ColumnProcessor());
  229. if (pk_demand == null) {
  230. return "";
  231. }
  232. return pk_demand;
  233. }
  234. /*
  235. * 数据库查询
  236. */
  237. private String SqlexecuteQuery(String out,String table,String key,String value) throws Exception {
  238. String sql = "select "+out+" from "+table+" where "+key+" = '"+value+"' and isnull(dr,0) = 0";
  239. Object object;
  240. try {
  241. object = new BaseDAO().executeQuery(sql, new ColumnProcessor());
  242. if (object==null) {
  243. throw new Exception("未查询到数据!请检查编码"+value+"是否正确!");
  244. }
  245. return object.toString();
  246. } catch (BusinessException e) {
  247. e.printStackTrace();
  248. return e.getMessage();
  249. }
  250. }
  251. /*
  252. * 非空判断
  253. */
  254. private String checkJson(JSONObject json) throws Exception {
  255. StringBuffer mags = new StringBuffer();
  256. Boolean empty = true;
  257. String body = "result";//表体
  258. if (json.getJSONArray(body)==null) {
  259. empty = false;
  260. mags.append("请传入接口数据! ");
  261. return mags.toString();
  262. }
  263. JSONArray oprepObjectBs = json.getJSONArray("result");
  264. String pk_corp = "pk_corp";//组织
  265. String billmaker = "billmaker";//制单人
  266. String dbilldate = "dbilldate";//单据日期
  267. String po = "po";//表体
  268. for(int i = 0; i < oprepObjectBs.size(); i++) {
  269. JSONObject oprepJsonObjectB = oprepObjectBs.getJSONObject(i);
  270. String[] HeadKey = {pk_corp,billmaker,dbilldate};
  271. int num = i+1;
  272. mags.append("第"+num+"块表头:{");
  273. for (String as : HeadKey) {
  274. if (oprepJsonObjectB.getString(as).isEmpty()) {
  275. empty = false;
  276. mags.append("'" + as + "' ");
  277. }
  278. }
  279. mags.append("}");
  280. if(oprepJsonObjectB.getJSONArray(po)==null) {
  281. mags.append("第"+num+"块表体不能为空");
  282. }
  283. }
  284. if (!empty) {
  285. return "以下字段不可为空:"+mags;
  286. }
  287. else {
  288. return null;
  289. }
  290. }
  291. }