package cn.com.lzt.purchase.service.impl; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import java.util.UUID; import com.alibaba.druid.util.StringUtils; import org.jeecgframework.core.common.exception.BusinessException; import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.MyBeanUtils; import org.jeecgframework.core.util.oConvertUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.com.lzt.purchase.dao.POrderDao; import cn.com.lzt.purchase.dto.OrderToSupplierDto; import cn.com.lzt.common.util.StringUtil; import cn.com.lzt.purchase.entity.POrdersEntity; import cn.com.lzt.purchase.service.POrdersServiceI; import cn.com.lzt.purchasedetails.entity.OrderDetailsEntity; @Service("pOrdersService") @Transactional public class OrdersServiceImpl extends CommonServiceImpl implements POrdersServiceI { @Autowired private POrderDao porderDao; public void delete(T entity) { super.delete(entity); //执行删除操作配置的sql增强 this.doDelSql((POrdersEntity)entity); } public void addMain(POrdersEntity orders, List orderDetailsList){ if(orders.getOrderDate() == null) orders.setOrderDate(new Date()); if(orders.getAuto()==null) orders.setAuto(Integer.valueOf(Globals.NO)); String sourceType = orders.getSourceType(); orders.setReferenceTotalMoney(orders.getTotalMoney()); //保存主信息 this.save(orders); HashMap qgdCallbackValue = new HashMap(); //申购单id // String qgdID = ""; /**保存-采购商品*/ for(OrderDetailsEntity orderDetails:orderDetailsList){ if(orderDetails.getSourceBId()!=null && orderDetails.getSourceBId().length()>0) { qgdCallbackValue.put(orderDetails.getSourceBId(), orderDetails.getQuantity()); // qgdID = orderDetails.getSourceId(); } //外键设置 orderDetails.setFkId(orders.getId()); // 未到货数量为采购数量 orderDetails.setQuantityNotArrived(orderDetails.getQuantity()); orderDetails.setPayStatus(Integer.valueOf(Globals.NO)); orderDetails.setReferencePurchasePrice(orderDetails.getPurchasePrice()); orderDetails.setReferenceMoney(orderDetails.getMoney()); if(StringUtils.equals(sourceType, "fixAsset") ||StringUtils.equals(sourceType, "fixAssetSelf")){//判断以前固定资产是否报销过 String productId = orderDetails.getSourceBId(); String findInner ="select d.id from t_b_order_fix_asset_products d " + "where d.id=? and " + " (d.fk_id in (SELECT request_id FROM t_b_activiti_cost_pay_inner_user_detail where source_type='fix_asset') " + " or find_in_set(d.id,(SELECT ifnull(group_concat(request_id),'') FROM t_b_activiti_cost_pay_tmp_company tmp where tmp.source_type='fix_asset')) >0 )" ; List iList = findListbySql(findInner,productId); if(!iList.isEmpty()) {//固定资产报销过 orderDetails.setPayStatus(Integer.valueOf(Globals.YES)); } } this.save(orderDetails); } if(qgdCallbackValue.size()>0) { if(sourceType.indexOf("orders") > -1) { updateQGD(qgdCallbackValue); }else if(sourceType.indexOf("fixAsset") > -1 ) { updateFixAsset(qgdCallbackValue); } } //执行新增操作配置的sql增强 this.doAddSql(orders); } @Override public List getOrderToSupplierDtoPage(String orderid){ List list = porderDao.getOrderToSupplierDto(orderid); return list; } public void updateMain(POrdersEntity orders, List orderDetailsList) { if(orders.getOrderDate() == null) orders.setOrderDate(new Date()); //保存主表信息 this.saveOrUpdate(orders); //=================================================================================== //获取参数 Object id0 = orders.getId(); //=================================================================================== //1.查询出数据库的明细数据-采购商品 String hql0 = "from OrderDetailsEntity where 1 = 1 AND fK_ID =? "; List orderDetailsOldList = this.findHql(hql0,id0); //2.筛选更新明细数据-采购商品 if(orderDetailsList!=null&&orderDetailsList.size()>0){ for(OrderDetailsEntity oldE:orderDetailsOldList){ boolean isUpdate = false; for(OrderDetailsEntity sendE:orderDetailsList){ //需要更新的明细数据-采购商品 if(oldE.getId().equals(sendE.getId())){ try { MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE); if(oldE.getQuantityArrived() == null || oldE.getQuantityArrived() <=0){ oldE.setQuantityNotArrived(oldE.getQuantity()); }else{ oldE.setQuantityNotArrived(oldE.getQuantity() - oldE.getQuantityArrived()); } this.saveOrUpdate(oldE); } catch (Exception e) { e.printStackTrace(); throw new BusinessException(e.getMessage()); } isUpdate= true; break; } } if(!isUpdate){ //如果数据库存在的明细,前台没有传递过来则是删除-采购商品 super.delete(oldE); } } //3.持久化新增的数据-采购商品 for(OrderDetailsEntity orderDetails:orderDetailsList){ if(oConvertUtils.isEmpty(orderDetails.getId())){ //外键设置 orderDetails.setFkId(orders.getId()); // 未到货数量为采购数量 orderDetails.setQuantityNotArrived(orderDetails.getQuantity()); this.save(orderDetails); } } } //执行更新操作配置的sql增强 this.doUpdateSql(orders); //TODO 回写申购单采购数量 //END 回写申购单采购数量 } public void delMain(POrdersEntity orders) { //获取参数 Object id0 = orders.getId(); //=================================================================================== //删除-采购商品 String hql0 = "from OrderDetailsEntity where 1 = 1 AND fK_ID =? "; List orderDetailsOldList = this.findHql(hql0,id0); HashMap qgdCallbackValue = new HashMap(); /**保存-采购商品*/ //申购单id // String qgdID = ""; for(OrderDetailsEntity orderDetails:orderDetailsOldList){ if(orderDetails.getSourceBId()!= null&&orderDetails.getSourceBId().length()>0) { // qgdID = orderDetails.getSourceId(); qgdCallbackValue.put(orderDetails.getSourceBId(), 0-orderDetails.getQuantity()); } } //this.deleteAllEntitie(orderDetailsOldList); //更新主表状态,逻辑删除,用于取消此订单 String sql = "update t_s_porders set order_status = 3 where id = ?"; executeSql(sql, id0); //this.delete(orders); //=================================================================================== // 更新申购单已经采购数量 updateQGD(qgdCallbackValue); } /** * 默认按钮-sql增强-新增操作 * @return */ public boolean doAddSql(POrdersEntity t){ return true; } /** * 默认按钮-sql增强-更新操作 * @return */ public boolean doUpdateSql(POrdersEntity t){ return true; } /** * 默认按钮-sql增强-删除操作 * @return */ public boolean doDelSql(POrdersEntity t){ return true; } /** * 替换sql中的变量 * @param sql * @return */ public String replaceVal(String sql,POrdersEntity t){ sql = sql.replace("#{id}",String.valueOf(t.getId())); sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName())); sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy())); sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate())); sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName())); sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy())); sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate())); sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus())); sql = sql.replace("#{order_date}",String.valueOf(t.getOrderDate())); sql = sql.replace("#{order_onumber}",String.valueOf(t.getOrderOnumber())); sql = sql.replace("#{handler_person_id}",String.valueOf(t.getHandlerPersonId())); sql = sql.replace("#{handler_person_name}",String.valueOf(t.getHandlerPersonName())); sql = sql.replace("#{supplier_id}",String.valueOf(t.getSupplierId())); sql = sql.replace("#{supplier_name}",String.valueOf(t.getSupplierName())); sql = sql.replace("#{pay_account}",String.valueOf(t.getPayAccount())); sql = sql.replace("#{order_auditor}",String.valueOf(t.getOrderAuditor())); sql = sql.replace("#{total_money}",String.valueOf(t.getTotalMoney())); sql = sql.replace("#{discount_money}",String.valueOf(t.getDiscountMoney())); sql = sql.replace("#{amount_payable}",String.valueOf(t.getAmountPayable())); sql = sql.replace("#{order_status}",String.valueOf(t.getOrderStatus())); sql = sql.replace("#{warehouse_id}",String.valueOf(t.getWarehouseId())); sql = sql.replace("#{warehouse_name}",String.valueOf(t.getWarehouseName())); sql = sql.replace("#{audit_date}",String.valueOf(t.getAuditDate())); sql = sql.replace("#{prepaid_money}",String.valueOf(t.getPrepaidMoney())); sql = sql.replace("#{UUID}",UUID.randomUUID().toString()); return sql; } private void updateQGD(HashMap idAndValues ) { String productsUpdSql = "update t_b_order_products set quantity_arrived = ifnull(quantity_arrived ,0) + ?,quantity_not_arrived = ifnull(quantity_arrived ,0) -? where id = ?"; for (Entry idAndValue: idAndValues.entrySet()) { executeSql(productsUpdSql, idAndValue.getValue(),idAndValue.getValue(),idAndValue.getKey()); } // 一个订单最多只能参照一个申购单生成,所有更新一条order语句即可 // String orderUpdSql = "update t_b_orders set order_status = 0 where not exists ( select fk_id from t_b_order_products where id = ? and ifnull(quantity_arrived,0) >= quantity)"; // executeSql(orderUpdSql,orderid); } private void updateFixAsset(HashMap idAndValues ) { String productsUpdSql = "update t_b_order_fix_asset_products set quantity_arrived = ifnull(quantity_arrived ,0) + ?,quantity_not_arrived = ifnull(quantity_arrived ,0) -? where id = ?"; for (Entry idAndValue: idAndValues.entrySet()) { executeSql(productsUpdSql, idAndValue.getValue(),idAndValue.getValue(),idAndValue.getKey()); } } }