javabean+servlet+jsp小麦收购管理系统

《小麦收购系统》项目研发阶段性总结
作者:人家呢
本次任务完成时间:2018年12月1日~2018年12月7日
开发工具与关键技术:myEclipse、mysql、javabean、servlet、jsp
完成模块功能:已完成

一、项目概要
价格管理:根据价格方案选择一套方案进行价格制定,设置单价、质量标准等信息。其状态是已激活就不能进行删除或者修改操作。
价格方案:制定方案,选择参与化验的项目,设置优于/次于标准差和增减加比例。
权限管理:对平台用户访问权限进行分配。用户管理:对系统用户信息等录入。
初检录入: 对初检信息的录入,根据小麦的品质选择制定好的价格套餐。其状态为“初检录入”;
化验管理:对录入的信息进行化验操作。步骤为取样——》化验确认——》明细——》计算——》录入。
审核管理:对化验过关的信息,进行审核操作。状态为未审核 ------》等待审核 ------》审核通过/审核不通过,
是否通过是由两方面决定的一是客户,客户对化验得出的执行单价不满意,则审核就不能通过。二是审核员工。
过磅管理:对小麦进行过磅操作,计算净重,根据执行单价算出结算金额。
付款管理:对过完磅的小麦进行付款操作。其中的流水号自动生成不可重复。
入仓管理:最后就是小麦入仓操作。入仓完成其收购结束。

收购流程图:
在这里插入图片描述

二、功能实现
1、模块:价格管理
1.1、实现
制定价格,当为已激活的价格其修改和删除不能使用的。其中价格编号自动生成不可重复,质量标准:与化验结果进行比较,计算出化验单间和执行单价;
在这里插入图片描述

1.2、相关业务表和关系
在这里插入图片描述
1.3、经典代码
在这里插入图片描述
2、模块:价格方案
2.1、实现
制定价格方案,方案编号自动生成的。方案信息用于价格制定,价格制定中的明细信息项目就是方案中的项目明细;
在这里插入图片描述
2.2、相关业务表和关系
在这里插入图片描述
2.3、经典代码

/**
	 * 方案信息修改保存
	 * @param req
	 * @param resp
	 * @throws ServletException
	 * @throws IOException
	 */
	public void update(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException{
		//获取值
		String priceSchemeId=req.getParameter("id");//方案id
		String programmeNumber=req.getParameter("pN");//编号
		String scenarioName=req.getParameter("sN");//名称
		String valueA=req.getParameter("valueA");//方案明细信息
		String activation=req.getParameter("activation");
		//创建PriceSchemePo类对象
		PriceSchemePo priceSchemePo=new PriceSchemePo();
		//添加数据
		priceSchemePo.setPriceSchemeId(Integer.parseInt(priceSchemeId));
		priceSchemePo.setProgrammeNumber(programmeNumber);
		priceSchemePo.setScenarioName(scenarioName);
		priceSchemePo.setActivation(Boolean.parseBoolean(activation));
		//创建对象
		IPriceSchemeService priceSchemeService=new PriceSchemeServiceImpl();
		//调用方法
	    priceSchemeService.edit(priceSchemePo);
		
		
		//字符串分割
		String[] v=valueA.split(",");
		//创建List<PriceSchemeDetailPo>列表
		List<PriceSchemeDetailPo> list=new ArrayList<PriceSchemeDetailPo>();
		//循环遍历v数组
		for (int j = 0; j < v.length; j=j+6) {
		    //创建PriceSchemeDetailPo类对象,
			PriceSchemeDetailPo r=new PriceSchemeDetailPo();       //0      
			//基础id
			r.setBasicId(Integer.parseInt(v[j]));                  //0 6
			//方案id
			r.setPriceSchemeId(Integer.parseInt(priceSchemeId));                
			//优于标准差
			r.setgStandardDeviation(Double.parseDouble(v[j+1]));   //1
			//增加比例
			r.setIncreaseInProportion(Double.parseDouble(v[j+2])); //2
			//次于标准差
			r.setdStandardDeviation(Double.parseDouble(v[j+3]));   //3
			//减价比例
			r.setReductionRatio(Double.parseDouble(v[j+4]));       //4
			list.add(r);
		}

		boolean returnA=false;
		//循环遍历list 每一条方案明细
		for (PriceSchemeDetailPo pSDP : list) {
			//创建对象
			IPriceSchemeDetailService priceSchemeDetailService=new PriceSchemeDetailServiceImpl();
			//调用方法,查询方案明细信息是否存在
			PriceSchemeDetailPo priceSchemeDetailPo=priceSchemeDetailService.findById(pSDP.getPriceSchemeId(), pSDP.getBasicId());
			
			if(priceSchemeDetailPo.getPriceSchemeDetaiId()>0){
				//修改方案明细信息
				returnA=priceSchemeDetailService.edit(pSDP);
			}else{
				//新增方案明细信息
				returnA=priceSchemeDetailService.insert(pSDP);
			}
			
			
		}
	
		if(returnA){
			req.getSession().setAttribute("strMsg", "修改成功");
		}else
		{
			req.getSession().setAttribute("strMsg", "修改失败");
			
		}
		//转发
		req.getRequestDispatcher("/jsp/pricemodule/pricescheme.jsp").forward(req, resp);
				
		
	}

3、模块:初检录入
3.1、实现
对小麦信息进行录入操作,根据小麦的品质选择价格方案,每个价格都有一个基础单价,而最终执行的单价是执行单价。其中状态为“初检录入 ------》等待化验 ------》等待录入 ------等待审核------等待过磅------等待入仓------》已完成”
在这里插入图片描述

3.2、相关业务表和关系
在这里插入图片描述
3.3、经典代码

IBasicService basicService =new BasicServierImpl();
			//气味
			List<BasicTablePo> listSmell=basicService.findAll(44);
			req.setAttribute("listSmell", listSmell);
			//色泽
			List<BasicTablePo> listTinct =basicService.findAll(41);
			req.setAttribute("listTinct", listTinct);
			//品牌选择
			IPriceService priceService=new PriceServiceImpl();
			List<PricePo> listPricePo = priceService.findAll();
			req.setAttribute("listPricePo", listPricePo);
			//录入时间
			String dateT=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
			req.setAttribute("dateT", dateT);
			//初检单号
			String num="JC";
			//获取当前时间
			String dateN=new SimpleDateFormat("yyyyMMdd").format(new Date());
			num=num+dateN;
			//查询所有录入信息,排序
			IEnteringService enteringService=new EnteringServiceImpl();
			List<EnteringPo> listEnteringPo=enteringService.findAll();
			//判断是否有数据,否则单号从0001开始
			if(listEnteringPo.size()>0){
				//获取录入信息最后一条数据
				EnteringPo enteringPo=listEnteringPo.get(listEnteringPo.size()-1);
				//获取录入时间
				Timestamp t=enteringPo.getInputTime();
				//转为字符串
				String d=new SimpleDateFormat("yyyyMMdd").format(t);
				//判断现在时间和获取的时间是否相同,不相同,单号后四位就从0001开始
				if(d.equals(dateN)){
					//JC201807300001,获取后四位
					String oddNumbers = enteringPo.getOddNumbers().substring(10,14);
					//转为int类型,加一
					int number=Integer.parseInt(oddNumbers)+1;
					//转为字符串
					String numS=Integer.toString(number);
					//循环,补零
					for (int i = numS.length(); i < 4; i++) {
						num+="0";
					}
					num+=number;
				}else{
					num=num+"0001";
				}
			}else{
				num=num+"0001";
			}
			//设置单号
			req.setAttribute("num", num);
			//排队号
			String sortNumber=num.substring(10, 14);
			req.setAttribute("sortNumber", sortNumber);
			
			req.getRequestDispatcher("/jsp/enteringModule/entering.jsp").forward(req, resp);

4、模块:化验管理
4.1、实现
化验管理,点击取样按钮,选择录入信息状态为“初检录入”提取进仓;点击化验按钮进行小麦品质的化验,化验项目就价格明细信息的项目数;点击明细按钮,会根据项目项生成对应的文本框,录入化验数据,点击计算化验单价;计算完成点击录入按钮化验完成;

在这里插入图片描述
4.2、相关业务表和关系
在这里插入图片描述
4.3、经典代码

/**
	 * 计算化验单价
	 * @param req
	 * @param resp
	 */
    public void computeUnitPrice(HttpServletRequest req,HttpServletResponse resp){
    	
    	//化验Id
    	String laboratoryId=req.getParameter("laboratoryId");
    	//价格Id
    	String priceId=req.getParameter("priceId");
    	//化验明细
    	String valArray=req.getParameter("valArray");
    	
    	String[] v=valArray.split(",");
    	
    	List<LaboratoryDetailPo> listLaboratoryDetailPo=new ArrayList<LaboratoryDetailPo>();
		for (int j = 0; j < v.length; j=j+2) {
			LaboratoryDetailPo r=new LaboratoryDetailPo();            
			r.setBasicId(Integer.parseInt(v[j]));                        
			r.setLaboratoryData(Double.parseDouble(v[j+1]));   
			listLaboratoryDetailPo.add(r);
		}
    	//查询价格信息,价格方案Id
    	IPriceService priceService =new PriceServiceImpl();
    	PricePo pricePo= priceService.findById(Integer.parseInt(priceId));
    	int priceSchemeId=pricePo.getPriceSchemeId();
		//价格明细信息
    	IPriceDetailService priceDetailService =new PriceDetailServiceImpl();
    	List<PriceDetailPo> listPriceDetailPo=priceDetailService.selectPriceSchemeDetail(Integer.parseInt(priceId));
    	//价格方案信息
    	IPriceSchemeDetailService priceSchemeDetailService =new PriceSchemeDetailServiceImpl();
    	List<PriceSchemeDetailPo> listPriceSchemeDetailPo=priceSchemeDetailService.findAll(priceSchemeId);
    	
    	List<LaboratoryDetailPo> list=new ArrayList<LaboratoryDetailPo>();
    	//遍历价格明细
    	for (PriceDetailPo priceDetailPo : listPriceDetailPo) {
    		//遍历化验明细
			for (LaboratoryDetailPo laboratoryDetailPo : listLaboratoryDetailPo) {
				//判断价格明细和化验明细的基础iD是否相同(BasicId)
				if(priceDetailPo.getBasicId()==laboratoryDetailPo.getBasicId()){
					//计算标准差  化验数据 -质量标准 = 标准差
					double  standardDeviation=laboratoryDetailPo.getLaboratoryData()-priceDetailPo.getQualityStandard();
					//遍历价格方案明细
					for (PriceSchemeDetailPo priceSchemeDetailPo : listPriceSchemeDetailPo) {
						//判断价格明细和价格方案明细的基础iD是否相同(BasicId)
						if(priceDetailPo.getBasicId()==priceSchemeDetailPo.getBasicId()){
							if(standardDeviation>0){
								//增价比例
								double advancePriceScale=priceSchemeDetailPo.getIncreaseInProportion()/priceSchemeDetailPo.getgStandardDeviation();
								//增价数
								double advancePrice=standardDeviation*advancePriceScale;
								//创建对象,赋值
								LaboratoryDetailPo l=new LaboratoryDetailPo();
								//基础id
								l.setBasicId(priceDetailPo.getBasicId());
								//化验数据
								l.setLaboratoryData(laboratoryDetailPo.getLaboratoryData());
								//增减价
								l.setIncreaseOrDecreasePrice(advancePrice);
								list.add(l);
							}else if(standardDeviation<0){
								//减价比例
								double cheapenScale =priceSchemeDetailPo.getReductionRatio()/priceSchemeDetailPo.getdStandardDeviation();
								//减价数
								double cheapen=standardDeviation*cheapenScale;
								//创建对象,赋值
								LaboratoryDetailPo l=new LaboratoryDetailPo();
								//基础id
								l.setBasicId(priceDetailPo.getBasicId());
								//化验数据
								l.setLaboratoryData(laboratoryDetailPo.getLaboratoryData());
								//增减价
								l.setIncreaseOrDecreasePrice(cheapen);
								list.add(l);
							}else if(standardDeviation==0){
								//创建对象,赋值
								LaboratoryDetailPo l=new LaboratoryDetailPo();
								//基础id
								l.setBasicId(priceDetailPo.getBasicId());
								//化验数据
								l.setLaboratoryData(laboratoryDetailPo.getLaboratoryData());
								//增减价
								l.setIncreaseOrDecreasePrice(0);
								list.add(l);
							}
						}
					}
				}
			}
		}
    	double increaseOrDecreasePrice =0;
    	//循环相加,计算增减价
    	for (LaboratoryDetailPo laboratoryDetail : list) {
    		increaseOrDecreasePrice+=laboratoryDetail.getIncreaseOrDecreasePrice();
		}
    	//设置double类型小数点后位数格式
    	DecimalFormat df=new DecimalFormat("0.000");
    	String str=df.format(increaseOrDecreasePrice);
    	try {
    		//返回值
			resp.getWriter().println(str);
			resp.getWriter().println(",,");
			JSONArray jsonArray = JSONArray.fromObject(list);   
			resp.getWriter().println(jsonArray);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    }

5、模块:审核管理
5.1、实现
化验成功后,生成审核信息,其状态为未审核,而初检的状态则为等待审核。审核是否能通过有两个决定因素,一个是客户是否对当前执行单价是否满意,不满意则审核不能通过。二是操作员进行审核,检查是否有异常,有则不能通过。

5.2、相关业务表和关系
在这里插入图片描述
5.3、经典代码

//正则判断整数或小数
		function regularJudgment(i){
			var valueS=$("#data"+i).val();
			if(valueS!=""){
				var reg = /^\d+(\.\d+)?$/g;
				if(!reg.test(valueS)){
					layer.alert("输入格式不正确,请重新输入,格式为小数或整数。", { icon: 0, title: '提示'});
					$("#data"+i).val("");
				}
			}
		}

6、模块:过磅管理
6.1、实现
过磅管理,对审核完成的小麦信息进行过磅操作;点击选择按钮选择录入信息状态为“等待审核”,输入信息,不能为空,毛重和扣杂填写完成会自动计算出净重;点击计算按钮,计算结算金额;点击保存按钮过磅操作完成;
在这里插入图片描述
6.2、相关业务表和关系
在这里插入图片描述
6.3、经典代码

7、模块:权限管理
7.1、实现
权限管理,对系统操作员访问权进行分配;权限分配同一有管理员操作。查询,可以多条件查询操作员信息;分配保存,勾选操作员、权限、模块即可保存;重置,清空操作员权限信息;

7.2、相关业务表和关系
在这里插入图片描述
7.3、经典代码

//bangb
			String num="GB";
			//获取当前时间
			String dateN=new SimpleDateFormat("yyyyMMdd").format(new Date());
			num=num+dateN;
			//查询所有录入信息,排序
			IPonderationService ponderationService =new PonderationServiceImpl();
			List<PonderationPo> listPonderationPo=ponderationService.findAll();
			//判断是否有数据,否则单号从0001开始
			if(listPonderationPo!=null&&listPonderationPo.size()>0 ){
				//获取录入信息最后一条数据
				PonderationPo ponderationPo=listPonderationPo.get(listPonderationPo.size()-1);
				//获取录入时间
				Timestamp t=ponderationPo.getDateAndTime();
				//转为字符串
				String d=new SimpleDateFormat("yyyyMMdd").format(t);
				//判断现在时间和获取的时间是否相同,不相同,单号后四位就从0001开始
				if(d.equals(dateN)){
					//JC201807300001,获取后四位
					String oddNumbers = ponderationPo.getPoundListNumber().substring(10,14);
					//转为int类型,加一
					int number=Integer.parseInt(oddNumbers)+1;
					//转为字符串
					String numS=Integer.toString(number);
					//循环,补零
					for (int i = numS.length(); i < 4; i++) {
						num+="0";
					}
					num+=number;
				}else{
					num=num+"0001";
				}
			}else{
				num=num+"0001";
			}

8、模块:收购前台(单独收购流程操作,没有基础数据维护)
8.1、实现
小麦收购系统,主要就是收购、基础数据维护和管理三大部分;就把收购部分抽取出了做前台,功能基本相同的,就不做展示了;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、开发总结(不少于500字)
Java web核心就是Servlet,Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要,接收请求数据,处理请求,完成响应。就相当于中介,例如,一个客户需要买一套房子找到中介商,并且告诉他我要的找房子的要求,中介就会帮你找房子,找到是会反馈,不就是请求和响应吗。Servlet的生命周期是加载、实例化、服务、销毁,init()方法只执行一次它是在服务器装入Servlet时执行的,负责初始化Servlet对象,不管多少次访问init()都不会重复执行。service()方法,它是Servlet的核心,负责响应客户的请求,其中实例化只实例一次,直到销毁,是个单例设计模式。Web 中有三大神器,分别是过滤器、监听器、拦截器。过滤器,web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件、字符编码等进行拦截,从而实现一些特殊的功能。在项目中运用过过滤器进行字符编码集统一,将所有的字符设置为uft-8的字符集,防止乱码出现。监听器用于监听域对象的属性发生修改的事件,可以在事件发生前、发生后做一些必要的处理等。监听器的用途例如,统计在线人数和在线用户,统计网站访问量等。拦截器,用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。上面说到的不足之处,就是对java web技术缺乏使用,只是单纯的增删改查,实现目的就行,就比如web中的三大神器过滤器、监听器、拦截器,其中就用过过滤器而其他两种却不加以运用,在这方面需要改进。

猜你喜欢

转载自blog.csdn.net/weixin_44103002/article/details/86545869