代碼如下
package com.hsp.adapter.service.impl;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import com.hsp.adapter.dao.ClinicDispensingMapper;
import net.sf.json.JSONObject;
@Service
public class ClinicDispensingServiceImpl {
@Autowired
private ClinicDispensingMapper dispensingmapper;
//更新發藥狀態
@Transactional(rollbackFor={Exception.class})
public String dispensingupdate(String param,String docker_id) {
JSONObject body = new JSONObject();
List<String> list=Arrays.asList(param.split(","));
List<Map<String,Object>> clinic_costlist=dispensingmapper.queryclinic_cost_id(list);
if(clinic_costlist!=null&& clinic_costlist.size()>0) {
List<Map<String,Object>> clinic_costdetlist=dispensingmapper.queryclinic_costdet(clinic_costlist);
if(clinic_costdetlist!=null&& clinic_costdetlist.size()>0) {
//遍歷更新有關發藥的表
try {
dispensingmapper.updateclinic_cost(clinic_costdetlist);
//更新藥品io表drug_io
dispensingmapper.updatedrug_io(docker_id,clinic_costdetlist);
for(Map<String,Object> map:clinic_costdetlist) {
Map<String,Object> drug_stockdet=dispensingmapper.querydrug_stockdet(map.get("item_id").toString(), map.get("exedep_id").toString(),map.get("num").toString());
// if(drug_stockdet!=null&& drug_stockdet.size()>0) {
//更新庫存明細表drug_stockdet
dispensingmapper.updatedrug_stockdet(map.get("num").toString(),drug_stockdet.get("id").toString());//第七次回圈是報錯之前更改的資料未回滾
//更新藥品io明細表drug_iodetail
Map<String,Object> drug_iodetail=dispensingmapper.querydrug_iodetail(map.get("id").toString());
dispensingmapper.updatedrug_iodetail(drug_stockdet,drug_iodetail.get("id").toString());
//更新收費明細clinic_costdet
dispensingmapper.updateclinic_costdet(map.get("id").toString());
//}
}
}catch(Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
//更新收費主表clinic_cost
}else {
body.put("result", 200);
body.put("info", "未查詢到");
return body.toString();
}
}else {
body.put("result", 200);
body.put("info", "未查詢到");
return body.toString();
}
body.put("result", 200);
body.put("info", "成功");
return body.toString();
}
}
uj5u.com熱心網友回復:
@Transactional(rollbackFor={Exception.class})
public String dispensingupdate(String param,String docker_id) {
JSONObject body = new JSONObject();
List<String> list=Arrays.asList(param.split(","));
List<Map<String,Object>> clinic_costlist=dispensingmapper.queryclinic_cost_id(list);
if(clinic_costlist!=null&& clinic_costlist.size()>0) {
List<Map<String,Object>> clinic_costdetlist=dispensingmapper.queryclinic_costdet(clinic_costlist);
if(clinic_costdetlist!=null&& clinic_costdetlist.size()>0) {
//遍歷更新有關發藥的表
try {
dispensingmapper.updateclinic_cost(clinic_costdetlist);
//更新藥品io表drug_io
dispensingmapper.updatedrug_io(docker_id,clinic_costdetlist);
for(Map<String,Object> map:clinic_costdetlist) {
Map<String,Object> drug_stockdet=dispensingmapper.querydrug_stockdet(map.get("item_id").toString(), map.get("exedep_id").toString(),map.get("num").toString());
// if(drug_stockdet!=null&& drug_stockdet.size()>0) {
//更新庫存明細表drug_stockdet
dispensingmapper.updatedrug_stockdet(map.get("num").toString(),drug_stockdet.get("id").toString());//第七次回圈是報錯之前更改的資料未回滾
//更新藥品io明細表drug_iodetail
Map<String,Object> drug_iodetail=dispensingmapper.querydrug_iodetail(map.get("id").toString());
dispensingmapper.updatedrug_iodetail(drug_stockdet,drug_iodetail.get("id").toString());
//更新收費明細clinic_costdet
dispensingmapper.updateclinic_costdet(map.get("id").toString());
//}
}
}catch(Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
//更新收費主表clinic_cost
}else {
body.put("result", 200);
body.put("info", "未查詢到");
return body.toString();
}
}else {
body.put("result", 200);
body.put("info", "未查詢到");
return body.toString();
}
body.put("result", 200);
body.put("info", "成功");
return body.toString();
}
方法中呼叫的其它(非查詢)方法是否有事務注解
uj5u.com熱心網友回復:
沒有,下面是呼叫代碼:package com.hsp.adapter.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@Mapper
public interface ClinicDispensingMapper {
//根據單據號查詢clinic_cost_id
public List<Map<String,Object>> queryclinic_cost_id(@Param("list")List<String> list);
//查詢clinic_costdet的id
public List<Map<String,Object>> queryclinic_costdet(@Param("list")List<Map<String,Object>> list);
//查詢drug_stockdet
@Select("select * from drug_stockdet where item_id=#{item_id} and drug_packsole_id='0' and stock_id=#{exedep_id} and chkstat='N' and islock='N' AND date(enddate)>DATE(NOW()) "
+" AND qty>=#{num} order by enddate asc LIMIT 1")
public Map<String,Object> querydrug_stockdet(@Param("item_id")String item_id,@Param("exedep_id")String exedep_id,@Param("num")String num);
@Select("select drugio_id,id,name,qty,packsoleqty,item_id,drug_packsole_id,objdept_id,realprc,costdet_id from drug_iodetail where costdet_id in (#{costdet_id}) and iokind='OUT04' order by id")
public Map<String,Object> querydrug_iodetail(@Param("costdet_id")String costdet_id);
//更新收費主表clinic_cost
public void updateclinic_cost(@Param("list")List<Map<String,Object>> list);
//更新藥品io表drug_io
public void updatedrug_io(@Param("doctor_id")String doctor_id,@Param("list")List<Map<String,Object>> list);
//更新庫存明細表drug_stockdet
@Update("update drug_stockdet set qty=qty-${sum},packsoleqty=packsoleqty-${sum} where id=#{id}")
public void updatedrug_stockdet(@Param("sum")String sum,@Param("id")String id);
//更新藥品io明細表drug_iodetail
public void updatedrug_iodetail(@Param("stockdetmap")Map<String,Object> stockdetmap,@Param("id")String id);
//更新收費明細clinic_costdet
@Update("update clinic_costdet set executed='Y',unlocked='N' where id=#{id}")
public void updateclinic_costdet(@Param("id")String id);
}
uj5u.com熱心網友回復:
你可以在catch中手動再拋出例外看看會不會回滾,如果是用的是mysql,確認執行引擎不是myisamuj5u.com熱心網友回復:
1. 本類中的 其他 未加事務注解 的方法 呼叫 此方法... 會導致事務無效.2.查看mysql對應的資料庫表的引擎是否為 innodb
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8289.html
標籤:Web 開發
上一篇:switch陳述句問題
