/***文档注释***********************************************
 * 作者            ：
 * 创建日期     ：2018-09-28
 * 描述            ：工器具-刀片基础信息
 * 注意事项     ：
 * 遗留BUG   ：
 * 修改日期     ：
 * 修改人员     ：
 * 修改内容     ：
***********************************************************/
package market.Mes.Dev.impl;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import market.Com.mapper.ComBaseInfoMapper;
import market.Com.mapper.ComBaseMachineMapper;
import market.Com.vo.ComBaseInfo;
import market.Com.vo.ComBaseMachine;
import market.Com.vo.CommonPage;
import market.Com.vo.ResultModel;
import market.Mes.Dev.mapper.DevBladeGrindingBldMapper;
import market.Mes.Dev.mapper.DevBladeGrpMapper;
import market.Mes.Dev.mapper.DevBladeInfoMapper;
import market.Mes.Dev.mapper.DevBladeUseBldMapper;
import market.Mes.Dev.service.DevBladeInfoService;
import market.Mes.Dev.vo.DevBladeGrp;
import market.Mes.Dev.vo.DevBladeInfo;

import org.springframework.transaction.annotation.Transactional;

import com.hnshituo.basic.service.impl.BaseServiceImpl;
import com.hnshituo.basic.spring.remoting.annotation.RemoteService;
import com.hnshituo.core.auth.service.HomeService;

@RemoteService(path="DevBladeInfoService")
public class DevBladeInfoServiceImpl extends BaseServiceImpl<DevBladeInfo,Object> implements DevBladeInfoService {

	/**
	 * 动作处理_刷新（刀片信息）按钮
	 * object:
	 * grp_code:选中节点表示的分组代码
	 * status:选中状态代码
	 * machine_code:机台代码
	 * */
	public ResultModel doQueryWeb(CommonPage<DevBladeInfo> oci){
		ResultModel rm=new ResultModel();
		try{
			rm.setData(this.getMapper(DevBladeInfoMapper.class).doQueryWeb(oci.getObject()));
			rm.setState("200");
		}catch(Exception ex){
			ex.printStackTrace();
			rm.setState("500");
			rm.setMsgInfo("查询失败!"+ex.getMessage());
		}
		return rm;
	}
	
	/**
	 * object:
	 * 相关信息
	 * */
	public ResultModel doAddWeb(CommonPage<DevBladeInfo> sum){
		ResultModel rm=new ResultModel();
		try{
			String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
			if(userName==null){
				userName="";
			}
			if(sum.getObject()==null){
				rm.setState("500");
				rm.setMsgInfo("请输入参数");
				return rm;
			}
			DevBladeInfo dbi=sum.getObject();
			if(dbi.getMachine_code()==null || "".equals(dbi.getMachine_code())){
				rm.setState("500");
				rm.setMsgInfo("机台代码不能为空！");
				return rm;
			}
			if(dbi.getGrp_code()==null || "".equals(dbi.getGrp_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定刀片所属分组！");
				return rm;
			}
			if(dbi.getBlade_no()==null || "".equals(dbi.getBlade_no())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号不能为空！");
				return rm;
			}
			if(dbi.getManufacturer_code()==null || "".equals(dbi.getManufacturer_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定厂家代码！");
				return rm;
			}
			if(dbi.getMaterial_code()==null || "".equals(dbi.getMaterial_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定材质代码！");
				return rm;
			}
			if(dbi.getHardness_code()==null || "".equals(dbi.getHardness_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定硬度代码！");
				return rm;
			}
			if(dbi.getDia_inner()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定内径！");
				return rm;
			}
			//关于有效数字的校验
			//....
			if(dbi.getDia_outer_cur()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定外径！");
				return rm;
			}
			//关于有效数字的校验
			//....
			if(dbi.getDia_outer_org()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定原始外径！");
				return rm;
			}
			//关于有效数字的校验
			//....
			if(dbi.getCur_use_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定使用次数！");
				return rm;
			}
			if(dbi.getCur_use_times()<0){
				rm.setState("500");
				rm.setMsgInfo("使用次数非有效整数，应大于0");
				return rm;
			}
			if(dbi.getTtl_use_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定累计使用次数！");
				return rm;
			}
			if(dbi.getTtl_use_times()<0){
				rm.setState("500");
				rm.setMsgInfo("累计使用次数非有效整数，应大于0");
				return rm;
			}
			if(dbi.getTtl_grd_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定累计修磨次数！");
				return rm;
			}
			if(dbi.getTtl_grd_times()<0){
				rm.setState("500");
				rm.setMsgInfo("累计修磨次数非有效整数，应大于0");
				return rm;
			}
			if(dbi.getDia_outer_srp()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定报废外径！");
				return rm;
			}
			if(dbi.getDia_inner()<=0){
				rm.setState("500");
				rm.setMsgInfo("内径应大于0");
				return rm;
			}
			if(dbi.getDia_inner()>=dbi.getDia_outer_cur()){
				rm.setState("500");
				rm.setMsgInfo("内径应小于外径");
				return rm;
			}
			if(dbi.getDia_inner()>=dbi.getDia_outer_org()){
				rm.setState("500");
				rm.setMsgInfo("内径应小于原始外径");
				return rm;
			}
			if(dbi.getDia_inner()>=dbi.getDia_outer_srp()){
				rm.setState("500");
				rm.setMsgInfo("内径应小于报废外径");
				return rm;
			}
			if(dbi.getDia_outer_cur()>dbi.getDia_outer_org()){
				rm.setState("500");
				rm.setMsgInfo("外径不能大于原始外径");
				return rm;
			}
			//报废外径（mm，原始外径 -  报废外径 = 可用层厚度）
			if(dbi.getDia_outer_srp()>=dbi.getDia_outer_org()){
				rm.setState("500");
				rm.setMsgInfo("报废外径应小于原始外径");
				return rm;
			}
			if(dbi.getCur_use_times()>dbi.getTtl_use_times()){
				rm.setState("500");
				rm.setMsgInfo("使用次数不能大于累计使用次数");
				return rm;
			}
			if(dbi.getEarly_warning_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定预警次数！");
				return rm;
			}
			if(dbi.getAmount_money()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定金额！");
				return rm;
			}
			if(dbi.getResidual_value()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定残值！");
				return rm;
			}
			if(dbi.getAmount_money()<=0){
				rm.setState("500");
				rm.setMsgInfo("金额需大于0");
				return rm;
			}
			if(dbi.getResidual_value()<0){
				rm.setState("500");
				rm.setMsgInfo("残值不能小于0");
				return rm;
			}
			if(dbi.getResidual_value()>=dbi.getAmount_money()){
				rm.setState("500");
				rm.setMsgInfo("残值需小于金额");
				return rm;
			}
			
		    //  --(1.13)、验证机台基础信息存在
			ComBaseMachine machine = new ComBaseMachine();
			machine.setMachine_code(dbi.getMachine_code());
			int v_cnt = this.getMapper(ComBaseMachineMapper.class).count(machine);
			if (v_cnt <= 0) {
				rm.setState("500");
				rm.setMsgInfo("机台代码{"+dbi.getMachine_code()+"} 机台基础信息不存在！");
				return rm;
			}
			//  --(1.14)、验证刀片分组存在
			v_cnt = this.getMapper(DevBladeGrpMapper.class).countWithCondition(null, "grp_code='"+dbi.getGrp_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("分组代码{"+dbi.getGrp_code()+"} 刀片分组信息不存在！");
				return rm;
			}
			DevBladeGrp v_rec_grp = this.getMapper(DevBladeGrpMapper.class).findById(dbi.getGrp_code());
			if(!dbi.getMachine_code().equals(v_rec_grp.getMachine_code())){
				rm.setState("500");
				rm.setMsgInfo("机台代码{"+dbi.getMachine_code()+"} 与刀片分组所属机台代码{"+v_rec_grp.getMachine_code()+"} 不一致！");
				return rm;
			}
			//  --(1.15)、验证厂家代码存在
			v_cnt = this.getMapper(ComBaseInfoMapper.class).countWithCondition(null, "base_code='"+dbi.getManufacturer_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("厂家代码{"+dbi.getManufacturer_code()+"} 基础信息不存在！");
				return rm;
			}
			ComBaseInfo v_rec_mfc = this.getMapper(ComBaseInfoMapper.class).findById(dbi.getManufacturer_code());
			//  --(1.16)、验证材质代码存在
			v_cnt = this.getMapper(ComBaseInfoMapper.class).countWithCondition(null, "base_code='"+dbi.getMaterial_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("材质代码{"+dbi.getMachine_code()+"} 基础信息不存在！");
				return rm;
			}
			//findById没找到的话，v_rec_mtr会为null
			ComBaseInfo v_rec_mtr = this.getMapper(ComBaseInfoMapper.class).findById(dbi.getMaterial_code());
			//  --(1.17)、验证硬度代码存在
			v_cnt = this.getMapper(ComBaseInfoMapper.class).countWithCondition(null, "base_code='"+dbi.getHardness_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("硬度代码{"+dbi.getHardness_code()+"} 基础信息不存在！");
				return rm;
			}
			ComBaseInfo v_rec_hrd = this.getMapper(ComBaseInfoMapper.class).findById(dbi.getHardness_code());
			
			//  --(2)、验证刀片编号无重复
			v_cnt=this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+dbi.getBlade_no()+"'");
			if(v_cnt>0){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbi.getBlade_no()+"} 系统中已存在此刀片编号！");
				return rm;
			}
			//  --(3)、显示顺序
			v_cnt=this.getMapper(DevBladeInfoMapper.class).doQueryCount(dbi.getGrp_code());
			//  --(4)、插入刀片基础信息记录，状态默认为0：可用
//			DevBladeInfo dbinfo=new DevBladeInfo();
			dbi.setGrp_name(v_rec_grp.getGrp_name());
			dbi.setDsp_order((long)v_cnt);
			dbi.setManufacturer_name(v_rec_mfc.getBase_name());
			dbi.setMaterial_name(v_rec_mtr.getBase_name());
			dbi.setHardness_desc(v_rec_hrd.getBase_name());
			dbi.setStatus("0");
			dbi.setCreate_opr(userName);
			dbi.setCreate_time(new Date());
			dbi.setBlade_no(dbi.getBlade_no().trim());
			this.getMapper(DevBladeInfoMapper.class).insert(dbi);
			rm.setMsgInfo("新增成功");
			rm.setState("200");
		}catch(Exception ex){
			ex.printStackTrace();
			rm.setState("500");
			rm.setMsgInfo("新增失败!"+ex.getMessage());
		}
		return rm;
	}
	
	/**
	 * object:
	 * 相关信息
	 * */
	public ResultModel doUpdateWeb(CommonPage<DevBladeInfo> sum){
		ResultModel rm=new ResultModel();
		try{
			String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
			if(userName==null){
				userName="";
			}
			if(sum.getObject()==null){
				rm.setState("500");
				rm.setMsgInfo("请输入参数");
				return rm;
			}
			DevBladeInfo dbi=sum.getObject();
			if(dbi.getBlade_no()==null || "".equals(dbi.getBlade_no())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号不能为空！");
				return rm;
			}
			if(dbi.getManufacturer_code()==null || "".equals(dbi.getManufacturer_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定厂家代码！");
				return rm;
			}
			if(dbi.getMaterial_code()==null || "".equals(dbi.getMaterial_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定材质代码！");
				return rm;
			}
			if(dbi.getHardness_code()==null || "".equals(dbi.getHardness_code())){
				rm.setState("500");
				rm.setMsgInfo("未指定硬度代码！");
				return rm;
			}
			if(dbi.getDia_inner()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定内径！");
				return rm;
			}
			//关于有效数字的校验
			//....
			if(dbi.getDia_outer_cur()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定外径！");
				return rm;
			}
			//关于有效数字的校验
			//....
			if(dbi.getDia_outer_org()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定原始外径！");
				return rm;
			}
			//关于有效数字的校验
			//....
			if(dbi.getCur_use_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定使用次数！");
				return rm;
			}
			if(dbi.getCur_use_times()<0){
				rm.setState("500");
				rm.setMsgInfo("使用次数非有效整数，应大于0");
				return rm;
			}
			if(dbi.getTtl_use_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定累计使用次数！");
				return rm;
			}
			if(dbi.getTtl_use_times()<0){
				rm.setState("500");
				rm.setMsgInfo("累计使用次数非有效整数，应大于0");
				return rm;
			}
			if(dbi.getTtl_grd_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定累计修磨次数！");
				return rm;
			}
			if(dbi.getTtl_grd_times()<0){
				rm.setState("500");
				rm.setMsgInfo("累计修磨次数非有效整数，应大于0");
				return rm;
			}
			if(dbi.getDia_outer_srp()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定报废外径！");
				return rm;
			}
			if(dbi.getDia_inner()<=0){
				rm.setState("500");
				rm.setMsgInfo("内径应大于0");
				return rm;
			}
			if(dbi.getDia_inner()>=dbi.getDia_outer_cur()){
				rm.setState("500");
				rm.setMsgInfo("内径应小于外径");
				return rm;
			}
			if(dbi.getDia_inner()>=dbi.getDia_outer_org()){
				rm.setState("500");
				rm.setMsgInfo("内径应小于原始外径");
				return rm;
			}
			if(dbi.getDia_inner()>=dbi.getDia_outer_srp()){
				rm.setState("500");
				rm.setMsgInfo("内径应小于报废外径");
				return rm;
			}
			if(dbi.getDia_outer_cur()>dbi.getDia_outer_org()){
				rm.setState("500");
				rm.setMsgInfo("外径不能大于原始外径");
				return rm;
			}
			//报废外径（mm，原始外径 -  报废外径 = 可用层厚度）
			if(dbi.getDia_outer_srp()>=dbi.getDia_outer_org()){
				rm.setState("500");
				rm.setMsgInfo("报废外径应小于原始外径");
				return rm;
			}
			if(dbi.getCur_use_times()>dbi.getTtl_use_times()){
				rm.setState("500");
				rm.setMsgInfo("使用次数不能大于累计使用次数");
				return rm;
			}
			if(dbi.getEarly_warning_times()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定预警次数！");
				return rm;
			}
			if(dbi.getAmount_money()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定金额！");
				return rm;
			}
			if(dbi.getResidual_value()==null){
				rm.setState("500");
				rm.setMsgInfo("未指定残值！");
				return rm;
			}
			if(dbi.getAmount_money()<=0){
				rm.setState("500");
				rm.setMsgInfo("金额需大于0");
				return rm;
			}
			if(dbi.getResidual_value()<0){
				rm.setState("500");
				rm.setMsgInfo("残值不能小于0");
				return rm;
			}
			if(dbi.getResidual_value()>=dbi.getAmount_money()){
				rm.setState("500");
				rm.setMsgInfo("残值需小于金额");
				return rm;
			}
			
			//  --(1.15)、验证厂家代码存在
			int v_cnt = this.getMapper(ComBaseInfoMapper.class).countWithCondition(null, "base_code='"+dbi.getManufacturer_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("厂家代码{"+dbi.getManufacturer_code()+"} 基础信息不存在！");
				return rm;
			}
			ComBaseInfo v_rec_mfc = this.getMapper(ComBaseInfoMapper.class).findById(dbi.getManufacturer_code());
			//  --(1.16)、验证材质代码存在
			v_cnt = this.getMapper(ComBaseInfoMapper.class).countWithCondition(null, "base_code='"+dbi.getMaterial_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("材质代码{"+dbi.getMaterial_code()+"} 基础信息不存在！");
				return rm;
			}
			ComBaseInfo v_rec_mtr = this.getMapper(ComBaseInfoMapper.class).findById(dbi.getMaterial_code());
			//  --(1.17)、验证硬度代码存在
			v_cnt = this.getMapper(ComBaseInfoMapper.class).countWithCondition(null, "base_code='"+dbi.getHardness_code()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("硬度代码{"+dbi.getHardness_code()+"} 基础信息不存在！");
				return rm;
			}
			ComBaseInfo v_rec_hrd = this.getMapper(ComBaseInfoMapper.class).findById(dbi.getHardness_code());
			
			//  --(2)、验证刀片编号无重复
			v_cnt=this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+dbi.getBlade_no()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbi.getBlade_no()+"} 系统中不存在此刀片信息！");
				return rm;
			}
			//  --(2.1)、只有“可用”、“待磨”状态时，才允许修改信息
			DevBladeInfo v_rec_bld = this.getMapper(DevBladeInfoMapper.class).findById(dbi.getBlade_no());
			if("2".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbi.getBlade_no()+"} 正在修磨中，不允许修改信息！");
				return rm;
			}else if("9".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbi.getBlade_no()+"} 刀片已报废！");
				return rm;
			}else if((!"0".equals(v_rec_bld.getStatus())) && (!"1".equals(v_rec_bld.getStatus()))){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbi.getBlade_no()+"} 状态异常，无法进行此操作！");
				return rm;
			}
			dbi.setManufacturer_name(v_rec_mfc.getBase_name());
			dbi.setMaterial_name(v_rec_mtr.getBase_name());
			dbi.setHardness_desc(v_rec_hrd.getBase_name());
			
			dbi.setUpdate_opr(userName);
			dbi.setUpdate_time(new Date());
			this.getMapper(DevBladeInfoMapper.class).update(dbi);
			rm.setMsgInfo("修改成功");
			rm.setState("200");
		}catch(Exception ex){
			ex.printStackTrace();
			rm.setState("500");
			rm.setMsgInfo("修改失败!"+ex.getMessage());
		}
		return rm;
	}
	
	/**
	 *objectlist:
	 *blade_no:分组代码
	 *dsp_order:显示顺序
	 * */
	@Transactional(value="tm", rollbackFor=Exception.class)
	public ResultModel doSaveWeb(CommonPage<DevBladeInfo> sum) throws Exception{
		ResultModel rm=new ResultModel();
		List<DevBladeInfo> dbg_list = sum.getObjectList();
		if(dbg_list==null || dbg_list.size()<=0){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定需要修改显示顺序的刀片编号！");
			return rm;
		}
		for(DevBladeInfo dbg: dbg_list){
			if("".equals(dbg.getBlade_no()) || "".equals(dbg.getDsp_order()) || dbg.getDsp_order()==null){
				rm.setState("500");
				rm.setMsgInfo("参数错误：刀片编号 与 显示顺序 个数不匹配！");
				return rm;
			}
			if(dbg.getDsp_order()>999){
				rm.setState("500");
				rm.setMsgInfo("显示顺序范围为【1-999】");
				return rm;
			}
		}
		String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
		if(userName==null){
			userName="";
		}
		for(DevBladeInfo dbgp: dbg_list){
			DevBladeInfo dbb=new DevBladeInfo();
			dbb.setDsp_order(dbgp.getDsp_order());
			dbb.setUpdate_opr(userName);
			dbb.setUpdate_time(new Date());
			dbb.setBlade_no(dbgp.getBlade_no());
			this.getMapper(DevBladeInfoMapper.class).update(dbb);
		}
		rm.setMsgInfo("保存成功");
		rm.setState("200");
	    return rm;
	}
	
	/**
	 *objectList:
	 *blade_no:刀片编号
	 * */
	@Transactional(value="tm", rollbackFor=Exception.class)
	public ResultModel doUpdateBladeWeb(CommonPage<DevBladeInfo> sum) throws Exception{
		ResultModel rm=new ResultModel();
		List<DevBladeInfo> dbg_list = sum.getObjectList();
		if(dbg_list==null || dbg_list.size()<=0){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定待磨的刀片编号！");
			return rm;
		}
		int v_cnt=0;
		String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
		if(userName==null){
			userName="";
		}
		for(DevBladeInfo dbg: dbg_list){
			v_cnt = this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+dbg.getBlade_no()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 系统中不存在此刀片信息！");
				return rm;
			}
			DevBladeInfo v_rec_bld = this.getMapper(DevBladeInfoMapper.class).findById(dbg.getBlade_no());
			//    --(2.1)、只有“可用”状态时，才允许修改为待磨状态
			if("1".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 已是待磨状态！");
				return rm;
			}else if("2".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 正在修磨中，无法进行此操作！");
				return rm;
			}else if("9".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 刀片已报废！");
				return rm;
			}else if(!"0".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 状态异常，无法进行此操作！");
				return rm;
			}
		}
		//  --(3)、逐一修改刀片状态
		for(DevBladeInfo dbg: dbg_list){
			DevBladeInfo dbb=new DevBladeInfo();
			dbb.setStatus("1");//--待磨
			dbb.setUpdate_opr(userName);
			dbb.setUpdate_time(new Date());
			dbb.setBlade_no(dbg.getBlade_no());
			this.getMapper(DevBladeInfoMapper.class).update(dbb);
		}
		rm.setMsgInfo("待修磨成功");
		rm.setState("200");
	    return rm;
	}
	
	/**
	 *objectList:
	 *blade_no:刀片编号
	 *memo1:报废日期
	 *memo2:报废原因
	 *memo3:报废鉴定人
	 * */
	@Transactional(value="tm", rollbackFor=Exception.class)
	public ResultModel doUpdateScrapWeb(CommonPage<DevBladeInfo> sum) throws Exception{
		ResultModel rm=new ResultModel();
		List<DevBladeInfo> dbg_list = sum.getObjectList();
		if(dbg_list==null || dbg_list.size()<=0){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定需要报废的刀片编号！");
			return rm;
		}
		if(sum.getMemo1()==null || "".equals(sum.getMemo1())){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定报废日期！");
			return rm;
		}
		Date v_date=null;
		try{
			v_date=new SimpleDateFormat("yyyy-MM-dd").parse(sum.getMemo1());
		}catch(Exception e){
			rm.setState("500");
			rm.setMsgInfo("参数错误：报废日期格式无法识别！报废日期格式应该为【yyyy-MM-dd】");
			return rm;
		}
		if(sum.getMemo2()==null || "".equals(sum.getMemo2())){
			rm.setState("500");
			rm.setMsgInfo("参数错误：报废原因不能为空！");
			return rm;
		}
		if(sum.getMemo3()==null || "".equals(sum.getMemo3())){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定报废鉴定人！");
			return rm;
		}
		
		int v_cnt=0;
		String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
		if(userName==null){
			userName="";
		}
		for(DevBladeInfo dbg: dbg_list){
			v_cnt = this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+dbg.getBlade_no()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 系统中不存在此刀片信息！");
				return rm;
			}
			DevBladeInfo v_rec_bld = this.getMapper(DevBladeInfoMapper.class).findById(dbg.getBlade_no());
			//     --(2.1)、已报废，不能重复操作
			if("9".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 刀片已报废！");
				return rm;
			}
		}
		//  --(3)、逐一修改刀片状态
		for(DevBladeInfo dbg: dbg_list){
			DevBladeInfo dbb=new DevBladeInfo();
			dbb.setStatus("9");//--报废
			dbb.setUpdate_opr(userName);
			dbb.setUpdate_time(new Date());
			dbb.setBlade_no(dbg.getBlade_no());
			dbb.setScrap_reason(sum.getMemo2());
			dbb.setScrap_opr(sum.getMemo3());
			dbb.setScrap_time(v_date);
			this.getMapper(DevBladeInfoMapper.class).update(dbb);
		}
		rm.setMsgInfo("报废成功");
		rm.setState("200");
	    return rm;
	}
	
	/**
	 *objectList:
	 *blade_no:刀片编号
	 * */
	@Transactional(value="tm", rollbackFor=Exception.class)
	public ResultModel doUpdateBladeCancelWeb(CommonPage<DevBladeInfo> sum) throws Exception{
		ResultModel rm=new ResultModel();
		List<DevBladeInfo> dbg_list = sum.getObjectList();
		if(dbg_list==null || dbg_list.size()<=0){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定需要取消待磨的刀片编号！");
			return rm;
		}
		int v_cnt=0;
		String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
		if(userName==null){
			userName="";
		}
		for(DevBladeInfo dbg: dbg_list){
			v_cnt = this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+dbg.getBlade_no()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 系统中不存在此刀片信息！");
				return rm;
			}
			DevBladeInfo v_rec_bld = this.getMapper(DevBladeInfoMapper.class).findById(dbg.getBlade_no());
			//    --(2.1)、只有“待磨”状态时，才允许取消待磨（恢复为“可用”状态）
			if("0".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 当前可用，无法进行此操作！");
				return rm;
			}else if("2".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 正在修磨中，无法进行此操作！");
				return rm;
			}else if("9".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 刀片已报废！");
				return rm;
			}else if(!"1".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 状态异常，无法进行此操作！");
				return rm;
			}
		}
		//  --(3)、逐一修改刀片状态
		for(DevBladeInfo dbg: dbg_list){
			DevBladeInfo dbb=new DevBladeInfo();
			dbb.setStatus("0");//--可用
			dbb.setUpdate_opr(userName);
			dbb.setUpdate_time(new Date());
			dbb.setBlade_no(dbg.getBlade_no());
			this.getMapper(DevBladeInfoMapper.class).update(dbb);
		}
		rm.setMsgInfo("取消待修磨成功");
		rm.setState("200");
	    return rm;
	}
	
	/**
	 *objectList:
	 *blade_no:刀片编号
	 * */
	@Transactional(value="tm", rollbackFor=Exception.class)
	public ResultModel doUpdateScrapCancelWeb(CommonPage<DevBladeInfo> sum) throws Exception{
		ResultModel rm=new ResultModel();
		List<DevBladeInfo> dbg_list = sum.getObjectList();
		if(dbg_list==null || dbg_list.size()<=0){
			rm.setState("500");
			rm.setMsgInfo("参数错误：未指定需要取消报废的刀片编号！");
			return rm;
		}
		
		int v_cnt=0;
		String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
		if(userName==null){
			userName="";
		}
		for(DevBladeInfo dbg: dbg_list){
			v_cnt = this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+dbg.getBlade_no()+"'");
			if(v_cnt<=0){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 系统中不存在此刀片信息！");
				return rm;
			}
			DevBladeInfo v_rec_bld = this.getMapper(DevBladeInfoMapper.class).findById(dbg.getBlade_no());
			//     --(2.1)、只有“报废”状态时，才允许取消报废（恢复为“可用”状态）
			if("0".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 当前可用，无法进行此操作！");
				return rm;
			}else if("1".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 当前待磨，无法进行此操作！");
				return rm;
			}else if("2".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 正在修磨中，无法进行此操作！");
				return rm;
			}else if(!"9".equals(v_rec_bld.getStatus())){
				rm.setState("500");
				rm.setMsgInfo("刀片编号{"+dbg.getBlade_no()+"} 当前状态异常，无法进行此操作！");
				return rm;
			}
		}
		//  --(3)、逐一修改刀片状态
		for(DevBladeInfo dbg: dbg_list){
			DevBladeInfo dbb=new DevBladeInfo();
			dbb.setStatus("0");//--可用
			dbb.setUpdate_opr(userName);
			dbb.setUpdate_time(new Date());
			dbb.setBlade_no(dbg.getBlade_no());
			dbb.setScrap_reason(null);
			dbb.setScrap_opr(null);
			dbb.setScrap_time(null);
			//this.getMapper(DevBladeInfoMapper.class).update(dbb);
			this.getMapper(DevBladeInfoMapper.class).doUpdate6(dbb,userName);
		}
		rm.setMsgInfo("取消报废成功");
		rm.setState("200");
	    return rm;
	}
	
	/**
	 * memo1:刀片编号（blade_no)
	 * */
	@Transactional(value="tm", rollbackFor=Exception.class)
	public ResultModel doDeleteWeb(CommonPage<DevBladeInfo> sum) throws Exception{
		ResultModel rm=new ResultModel();
		if(sum.getMemo1()==null || "".equals(sum.getMemo1())){
			rm.setState("500");
			rm.setMsgInfo("刀片编号不能为空");
			return rm;
		}
		int v_cnt = this.getMapper(DevBladeInfoMapper.class).countWithCondition(null, "blade_no='"+sum.getMemo1()+"'");
		if(v_cnt<=0){
			rm.setState("500");
			rm.setMsgInfo("刀片编号{"+sum.getMemo1()+"} 系统中不存在此刀片信息！");
			return rm;
		}
		String userName = (String) this.getSession().getAttribute(HomeService.SESSION_USER_NAME);
		if(userName==null){
			userName="";
		}
		//  --(3)、验证刀片未被引用																																							
		//  --(3.1)、验证无修磨记录，否则不允许删除																																							
		v_cnt=this.getMapper(DevBladeGrindingBldMapper.class).countWithCondition(null, "blade_no='"+sum.getMemo1()+"'");
		if(v_cnt>0){
			rm.setState("500");
			rm.setMsgInfo("刀片编号{"+sum.getMemo1()+"} 存在修磨记录，不允许删除！");
			return rm;
		}
		//  --(3.2)、验证无使用记录，否则不允许删除
		v_cnt=this.getMapper(DevBladeUseBldMapper.class).countWithCondition(null, "blade_no='"+sum.getMemo1()+"'");
		if(v_cnt>0){
			rm.setState("500");
			rm.setMsgInfo("刀片编号{"+sum.getMemo1()+"} 存在使用记录，不允许删除！");
			return rm;
		}
		//  --(4)、删除刀片基础信息
		this.getMapper(DevBladeInfoMapper.class).delete(sum.getMemo1());
		rm.setMsgInfo("删除成功");
		rm.setState("200");
	    return rm;
	}
	
	
}
