package com.bonus.rm.service; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import java.util.Locale; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.bonus.core.DateTimeHelper; import com.bonus.core.StringHelper; import com.bonus.core.exception.ZeroAffectRowsException; import com.bonus.lease.beans.AgreementBean; import com.bonus.lease.dao.AgreementDao; import com.bonus.ma.beans.MachineBean; import com.bonus.ma.beans.MachineTypeBean; import com.bonus.newSettlement.beans.MaTypeProjectStorageBean; import com.bonus.newSettlement.dao.MaTypeProjectStorageDao; import com.bonus.rm.beans.ReturnMaterialDetailsBean; import com.bonus.rm.beans.ReturnMaterialTaskBean; import com.bonus.rm.dao.ReturnMaterialTaskDao; import com.bonus.sys.BaseServiceImp; import com.bonus.sys.UserShiroHelper; import com.bonus.sys.beans.UserBean; import com.bonus.wf.beans.ProcessRecordBean; import com.bonus.wf.beans.TaskRecordBean; import com.bonus.wf.dao.ProcessRecordDao; import com.bonus.wf.dao.TaskRecordDao; import com.sun.xml.internal.ws.message.StringHeader; @Service("returnMaterialTask") public class ReturnMaterialTaskServiceImp extends BaseServiceImp implements ReturnMaterialTaskService { @Autowired ReturnMaterialTaskDao dao; @Autowired AgreementDao adao; @Autowired ProcessRecordDao prdao; @Autowired TaskRecordDao trdao; @Autowired MaTypeProjectStorageDao storageDao; @Override public List findAgreeCode(AgreementBean o) { return adao.findAgreeCode(o); } @Override public void addTask(ReturnMaterialTaskBean o) { // 新增退料流程记录 UserBean user = UserShiroHelper.getRealCurrentUser(); String companyId = user.getCompanyId(); ProcessRecordBean process = new ProcessRecordBean(); String userId = UserShiroHelper.getRealCurrentUser().getId() + ""; process.setOperationTime(DateTimeHelper.getNowTime()); process.setOperationUserId(userId); process.setProcessId("3"); prdao.insert(process); // 新增退料任务建立任务记录 TaskRecordBean task = new TaskRecordBean(); task.setDefinitionId("8"); task.setCompanyId(companyId); task.setIsFinish("0"); task.setOperationTime(DateTimeHelper.getNowTime()); task.setOperationUserId(userId); task.setProcessId("3"); task.setRemark(o.getRemark()); task.setNumber(o.getNumber()); task.setLeasePerson(o.getUserName()); task.setPhone(o.getPhone()); task.setSubcontractors(o.getSubcontractors()); trdao.insert(task); AgreementBean a = new AgreementBean(); a.setCode(o.getAgreementCode()); List list = adao.findAgreeCodeId(a); String agreeId = ""; if (list.size() > 0) { agreeId = list.get(0).getId(); } task.setAgreementId(agreeId); task.setTaskId(task.getId()); trdao.addTaskAgreement(task); } @Override public String findNumber(ReturnMaterialTaskBean o) { String yearLast = new SimpleDateFormat("yy", Locale.CHINESE).format(Calendar.getInstance().getTime()); String nowDay = DateTimeHelper.getFormatNowMonthAndDay(); String operationTime = DateTimeHelper.getNowDate(); o.setReturnMaterialTime(operationTime); String count = dao.findNumber(o); int str = Integer.parseInt(count) + 1; String counts = String.format("%03d", str); String code = "TZ" + yearLast + nowDay + counts; return code; } @Override public List findAllTask(ReturnMaterialTaskBean o) { return dao.findAllTask(o); } @Override @Transactional public int updateBean(ReturnMaterialTaskBean o) { int result = 0; try { // 退料记录查询 List backList = dao.findBackRecord(o); // ------------操作工程库存表,配合结算相关数据修改-------开始------------ if (backList.size() > 0) { dao.updateAudit(o); result = dao.updateBean(o); for (int i = 0; i < backList.size(); i++) { String rmNum = backList.get(i).getBackNum(); String modelId = backList.get(i).getModelId(); String maId = backList.get(i).getMaId(); String backDate = backList.get(i).getBackTime(); String agreementId = backList.get(i).getAgreementId(); String isCount = backList.get(i).getIsCount(); MaTypeProjectStorageBean storage = new MaTypeProjectStorageBean(); AgreementBean agreement = new AgreementBean(); agreement.setId(agreementId);// 协议ID MachineTypeBean type = new MachineTypeBean(); type.setId(modelId);// 机具类型Id type.setIsCount(isCount);// 是否计数 type.setNums(rmNum);// 数量 storage.setType(type); storage.setAgreement(agreement); if (null != maId && !"".equals(maId)) { MachineBean mb = new MachineBean(); mb.setId(maId); storage.setMachine(mb); } Float rn = Float.parseFloat(rmNum); List list = storageDao.findCanBackListById(storage); if (list != null && list.size() > 0) { if (StringHelper.isNotEmpty(maId)) { storage = list.get(0); // 设疑状态已退 storage.setStatus(0); storage.setBackDate(backDate); result = storageDao.updateBean(storage); if (result == 0) { throw new ZeroAffectRowsException("确认退库任务失败,工程库存表中machine修改操作错误!"); } } else { int size = list.size(); for (int j = 0; j < size; j++) { storage = list.get(j); Float num2 = storage.getNum(); if (Math.abs(num2 - rn) < 0.000001) { storage.setStatus(0); storage.setBackDate(backDate); result = storageDao.updateBean(storage); if (result == 0) { throw new ZeroAffectRowsException("确认退库任务失败,工程库存表中工器具修改操作错误!"); } break; } else if (num2 < rn) { storage.setStatus(0); storage.setBackDate(backDate); result = storageDao.updateBean(storage); if (result == 0) { throw new ZeroAffectRowsException("确认退库任务失败,工程库存表中工器具修改操作错误!"); } rn = rn - num2; } else if (num2 > rn) { storage.setNum(num2 - rn); result = storageDao.updateBean(storage); if (result == 0) { throw new ZeroAffectRowsException("确认退库任务失败,工程库存表中工器具修改操作错误!"); } storage.setType(type); storage.setAgreement(agreement); storage.setNum(rn); storage.setId(null); storage.setBackDate(backDate); storage.setStatus(1); result = storageDao.insertBean(storage); if (result == 0) { throw new ZeroAffectRowsException("确认退库任务失败,工程库存表中工器具插入操作错误!"); } break; } } } } else { System.err.println("i=" + i); throw new ZeroAffectRowsException("确认退库任务失败,设备或工器具在工程库存表中未找到可退项列表!"); } } } else { result = 0; } // ----------------------------操作工程库存表,配合结算相关数据修改-------结束--------------------------- } catch (Exception e) { e.printStackTrace(); throw e; } return result; } @Override public List findDevByWorkId(ReturnMaterialTaskBean o) { List list = dao.findDevByWorkId(o); return list; } @Override public List findDevByUnitId(ReturnMaterialTaskBean o) { List list = dao.findDevByUnitId(o); return list; } @Override public Integer deleteTask(ReturnMaterialTaskBean o) { Integer res = dao.deleteTask(o); List list=dao.findMaIdList(o); if(list.size()>0){ for(int i=0;i