Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandler.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandler.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandler.java (revision 41552) @@ -0,0 +1,8 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.handler; + +import java.util.Map; + +public interface MaterialInstanceHandler { + String execute(Map params); + boolean support(String actionType); +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/action/MaterialInstanceAction.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/action/MaterialInstanceAction.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/action/MaterialInstanceAction.java (revision 41552) @@ -0,0 +1,34 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.action; + +import java.util.Map; + +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.tousse.materialinstance.handler.MaterialInstanceHandler; +import com.forgon.disinfectsystem.tousse.materialinstance.handler.MaterialInstanceHandlerMapping; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +/** + * actionType参考 com.forgon.disinfectsystem.tousse.materialinstance.handler.MaterialInstanceConstant + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/baseData") +@Action(value = "materialInstanceAction") +public class MaterialInstanceAction { + private MaterialInstanceHandlerMapping materialInstanceHandlerMapping; + public void setMaterialInstanceHandlerMapping( + MaterialInstanceHandlerMapping materialInstanceHandlerMapping) { + this.materialInstanceHandlerMapping = materialInstanceHandlerMapping; + } + public void execute() { + try { + Map params = StrutsParamUtils.getParameters(); + MaterialInstanceHandler handler = materialInstanceHandlerMapping.getHandler(params.get("actionType")); + StrutsResponseUtils.output(handler.execute(params)); + } catch (Exception e) { + StrutsResponseUtils.output(false,e.getMessage()); + } + } +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/GetMaterialInstanceByTdIdVo.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/GetMaterialInstanceByTdIdVo.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/GetMaterialInstanceByTdIdVo.java (revision 41552) @@ -0,0 +1,93 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.handler; + +import org.apache.commons.lang.StringUtils; + +/** + * 根据包定义id获取包定义的材料vo + * + */ +public class GetMaterialInstanceByTdIdVo { + /** + * 材料id + */ + private Long id; + /** + * 材料定义id + */ + private Long materialDefinition_id; + /** + * 包定义id + */ + private Long tousse_id; + /** + * 材料定义规格 + */ + private String specification; + /** + * 材料定义名称 + */ + private String name; + /** + * 材料定义名称[规格] + * 如材料1[规格2] + */ + private String nameSpecification; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getMaterialDefinition_id() { + return materialDefinition_id; + } + + public void setMaterialDefinition_id(Long materialDefinition_id) { + this.materialDefinition_id = materialDefinition_id; + } + + public Long getTousse_id() { + return tousse_id; + } + + public void setTousse_id(Long tousse_id) { + this.tousse_id = tousse_id; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNameSpecification() { + return nameSpecification; + } + + public void setNameSpecification(String nameSpecification) { + this.nameSpecification = nameSpecification; + } + /** + * 拼接名称规格 + */ + protected void spliceNameSpecification(){ + if (StringUtils.isNotBlank(this.specification)) { + this.nameSpecification = this.name + "[" + this.specification + "]"; + }else{ + this.nameSpecification = name; + } + } +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandlerMappingImpl.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandlerMappingImpl.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandlerMappingImpl.java (revision 41552) @@ -0,0 +1,23 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.handler; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +@Service("materialInstanceHandlerMapping") +public class MaterialInstanceHandlerMappingImpl implements MaterialInstanceHandlerMapping{ + @Autowired(required = false) + private List handlers = Collections.emptyList(); + + @Override + public MaterialInstanceHandler getHandler(String actionType) { + Optional handlerOptional = handlers.stream() + .filter(Objects::nonNull) + .filter(handler -> handler.support(actionType)) + .findFirst(); + return handlerOptional.orElseThrow(() -> new RuntimeException("No handler found for actionType: " + actionType)); + } +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/GetMaterialInstanceByTdIdHandler.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/GetMaterialInstanceByTdIdHandler.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/GetMaterialInstanceByTdIdHandler.java (revision 41552) @@ -0,0 +1,83 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.handler; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; +/** + * 根据包定义id获取包定义的材料 + */ +@Service +public class GetMaterialInstanceByTdIdHandler implements MaterialInstanceHandler{ + private Logger log = Logger.getLogger(this.getClass()); + @Autowired + private ObjectDao objectDao; + @Override + public String execute(Map params) { + String tousseDefinitionId = params.get("tousseDefinitionId"); + if (!DatabaseUtil.isPoIdValid(tousseDefinitionId)) { + throw new IllegalArgumentException("包定义ID格式无效: " + tousseDefinitionId); + } + + // 构建SQL查询 + String sql = buildMaterialInstanceQuerySql(Long.parseLong(tousseDefinitionId)); + + // 执行查询 + List list = executeMaterialInstanceQuery(sql); + + return JSONUtil.buildJsonObject(true, JSONArray.fromObject(list)).toString(); + } + /** + * 构建SQL语句 + */ + private String buildMaterialInstanceQuerySql(Long tousseDefinitionId) { + return "SELECT m.id,m.materialDefinition_id,m.tousse_id,md.name,md.specification " + + "FROM " + + "MaterialInstance" + + " m INNER JOIN " + + "MaterialDefinition" + + " md ON md.id = m.materialDefinition_id WHERE m.tousse_id =" + + tousseDefinitionId + + " ORDER BY m.sequence ASC"; + } + + /** + * 执行查询 + */ + private List executeMaterialInstanceQuery(String sql) { + List vos = new ArrayList(); + + try (ResultSet rs = objectDao.executeSql(sql)){ + while(rs.next()){ + GetMaterialInstanceByTdIdVo vo = new GetMaterialInstanceByTdIdVo(); + vo.setId(rs.getLong("id")); + vo.setMaterialDefinition_id(rs.getLong("materialDefinition_id")); + vo.setTousse_id(rs.getLong("tousse_id")); + vo.setName(rs.getString("name")); + vo.setSpecification(rs.getString("specification")); + vo.spliceNameSpecification(); + vos.add(vo); + } + } catch (Exception e) { + log.error(sql); + throw new RuntimeException("查询数据库失败", e); + } + return vos; + } + + @Override + public boolean support(String actionType) { + return MaterialInstanceConstant.ACTIONTYPE_GETMATERIALINSTANCEBYTDID.equals(actionType); + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandlerMapping.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandlerMapping.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceHandlerMapping.java (revision 41552) @@ -0,0 +1,8 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.handler; + +import javax.annotation.Nullable; + +public interface MaterialInstanceHandlerMapping { + @Nullable + MaterialInstanceHandler getHandler(String actionType); +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceConstant.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceConstant.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialinstance/handler/MaterialInstanceConstant.java (revision 41552) @@ -0,0 +1,8 @@ +package com.forgon.disinfectsystem.tousse.materialinstance.handler; + +public class MaterialInstanceConstant { + /** + * 根据包定义id获取包定义的材料 + */ + public static final String ACTIONTYPE_GETMATERIALINSTANCEBYTDID = "getMaterialInstanceByTdId"; +}