Browse Source

增加MES对接接口

koul 4 years ago
parent
commit
cc61f0cba7

+ 51 - 0
src/main/java/com/uas/eis/controller/ERPController.java

@@ -0,0 +1,51 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.sdk.resp.ApiResponse;
+
+import com.uas.eis.service.ERPService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-07 9:31
+ */
+@RestController
+public class ERPController {
+    @Autowired
+    private ERPService erpService;
+
+    /**
+     * 物料资料
+     * @param data
+     * @return
+     */
+    @RequestMapping("/erp/syncProduct")
+    public ApiResult<String> syncProduct(String data){
+        return ApiResponse.successRsp("0",erpService.syncProduct(data));
+    }
+
+    /**
+     * 工单资料
+     * @param data
+     * @return
+     */
+    @RequestMapping("/erp/syncMakeBase")
+    public ApiResult<String> syncMakeBase(String data){
+        return ApiResponse.successRsp("0",erpService.syncMakeBase(data));
+    }
+
+    /**
+     *工单BOM资料
+     * @param data
+     * @return
+     */
+    @RequestMapping("/erp/syncMakeBaseDetail")
+    public ApiResult<String> syncMakeBaseDetail(String data){
+        return ApiResponse.successRsp("0",erpService.syncMakeBaseDetail(data));
+    }
+}

+ 70 - 0
src/main/java/com/uas/eis/controller/MESController.java

@@ -0,0 +1,70 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.service.MESService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-07 15:36
+ */
+@RestController
+public class MESController {
+
+    @Autowired
+    private MESService mesService;
+
+    /**
+     * 获取ERP收料单
+     * @param data
+     * @return
+     */
+    @RequestMapping("/mes/checkVerifyApply")
+    public ApiResult<String> checkVerifyApply(HttpServletRequest request, String data){
+        return mesService.checkVerifyApply(request,data);
+    }
+
+    /**
+     * 确认入库
+     * @param data
+     * @return
+     */
+    @RequestMapping("/mes/purcCheckin")
+    public ApiResult<String> purcCheckin(HttpServletRequest request,String data){
+        return mesService.purcCheckin(request,data);
+    }
+
+    /**
+     * 成品半成品入库
+     * @param data
+     * @return
+     */
+    @RequestMapping("/mes/prodInOutMakeIn")
+    public ApiResult<String> prodInOutMakeIn(HttpServletRequest request,String data){
+        return mesService.prodInOutMakeIn(request,data);
+    }
+    /**
+     * 工单删除校验接口
+     * @param data
+     * @return
+     */
+    @RequestMapping("/mes/makeDeleteCheck")
+    public ApiResult<String> makeDeleteCheck(HttpServletRequest request,String data){
+        return mesService.makeDeleteCheck(request,data);
+    }
+
+    /**
+     * 报废单
+     * @param data
+     * @return
+     */
+    @RequestMapping("/mes/initMakeScrap")
+    public ApiResult<String> initMakeScrap(HttpServletRequest request,String data){
+        return mesService.initMakeScrap(request,data);
+    }
+}

+ 18 - 0
src/main/java/com/uas/eis/dao/TransferDao.java

@@ -0,0 +1,18 @@
+package com.uas.eis.dao;
+
+import com.uas.eis.entity.Transfer;
+
+public interface TransferDao {
+
+	/**
+	 * 转单配置
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param mode
+	 *            模式
+	 * @return
+	 */
+	Transfer getTransfer(String sob, String caller, String mode);
+
+}

+ 27 - 0
src/main/java/com/uas/eis/dao/TransferDaoImpl.java

@@ -0,0 +1,27 @@
+package com.uas.eis.dao;
+
+import com.uas.eis.entity.Transfer;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public class TransferDaoImpl extends BaseDao implements TransferDao {
+
+	@Override
+	public Transfer getTransfer(String sob, String caller, String mode) {
+		try {
+			Transfer transfer = getJdbcTemplate().queryForObject("select *  from Transfers where tr_caller=? and tr_mode=?",
+					new BeanPropertyRowMapper<Transfer>(Transfer.class), caller, mode);
+			List<Transfer.Detail> details = getJdbcTemplate().query("select * from TransferDetail where td_trid=?",
+					new BeanPropertyRowMapper<Transfer.Detail>(Transfer.Detail.class), transfer.getTr_id());
+			transfer.setDetails(details);
+			return transfer;
+		} catch (EmptyResultDataAccessException e) {
+			return null;
+		}
+	}
+
+}

+ 37 - 0
src/main/java/com/uas/eis/dto/Key.java

@@ -0,0 +1,37 @@
+package com.uas.eis.dto;
+
+import java.io.Serializable;
+
+public class Key implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private int id;
+
+	private String code;
+
+	public Key(int id, String code) {
+		this.id = id;
+		this.code = code;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+}

+ 165 - 0
src/main/java/com/uas/eis/entity/Configs.java

@@ -0,0 +1,165 @@
+package com.uas.eis.entity;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 系统参数配置
+ * 
+ * @author yingp
+ * 
+ */
+public class Configs implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private int id;
+	private String caller;
+	private String code;
+	private String title;
+	private String data_type;
+	private String data;
+	private String class_;
+	private String method;
+	private String dbfind;// dbfindField,dbfindCaller
+	private Integer multi;
+	private Integer editable;
+	private String help;
+	private List<Properties> properties;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getCaller() {
+		return caller;
+	}
+
+	public void setCaller(String caller) {
+		this.caller = caller;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getData_type() {
+		return data_type;
+	}
+
+	public void setData_type(String data_type) {
+		this.data_type = data_type;
+	}
+
+	public String getData() {
+		return data;
+	}
+
+	public void setData(String data) {
+		this.data = data;
+	}
+
+	public String getClass_() {
+		return class_;
+	}
+
+	public void setClass_(String class_) {
+		this.class_ = class_;
+	}
+
+	public String getMethod() {
+		return method;
+	}
+
+	public void setMethod(String method) {
+		this.method = method;
+	}
+
+	public String getDbfind() {
+		return dbfind;
+	}
+
+	public void setDbfind(String dbfind) {
+		this.dbfind = dbfind;
+	}
+
+	public Integer getMulti() {
+		return multi;
+	}
+
+	public void setMulti(Integer multi) {
+		this.multi = multi;
+	}
+
+	public Integer getEditable() {
+		return editable;
+	}
+
+	public void setEditable(Integer editable) {
+		this.editable = editable;
+	}
+
+	public String getHelp() {
+		return help;
+	}
+
+	public void setHelp(String help) {
+		this.help = help;
+	}
+
+	public List<Properties> getProperties() {
+		return properties;
+	}
+
+	public void setProperties(List<Properties> properties) {
+		this.properties = properties;
+	}
+
+	public static class Properties {
+		private int config_id;
+		private String display;
+		private String value;
+
+		public int getConfig_id() {
+			return config_id;
+		}
+
+		public void setConfig_id(int config_id) {
+			this.config_id = config_id;
+		}
+
+		public String getDisplay() {
+			return display;
+		}
+
+		public void setDisplay(String display) {
+			this.display = display;
+		}
+
+		public String getValue() {
+			return value;
+		}
+
+		public void setValue(String value) {
+			this.value = value;
+		}
+	}
+}

+ 785 - 0
src/main/java/com/uas/eis/entity/Employee.java

@@ -0,0 +1,785 @@
+package com.uas.eis.entity;
+
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 员工表
+ * 
+ * @author yingp
+ * @date 2012-07-13 17:00:00
+ */
+public class Employee implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 9154546832037377352L;
+	private Integer em_id;// Id
+	private String em_code;// 员工编号
+	private Long em_uu;// 员工uu
+	private Integer em_defaultorid = 0;// 默认的组织ID(HrOrg)
+	private Integer em_defaultjbid = 0;// 默认的职位ID
+	private Integer em_defaulthsid = 0;// 默认的岗位ID(JOB)
+	private String em_name;// 姓名
+	private String em_sex;// 性别
+	private String em_iccode;// 身份证号
+	private Date em_birthday;// 出入年月
+	private String em_nation;// 民族
+	private String em_marry;// 婚否
+	private String em_polity;// 政党
+	private String em_tel;// 联系电话
+	private String em_mobile;// 移动电话
+	private String em_email;// 邮箱
+	private String em_mailpassword;// 邮箱密码
+	private String em_native;// 籍贯
+	private String em_address;// 地址
+	private String em_finishschool;// 毕业学校
+	private String em_speciality;// 专业
+	private String em_culture;// 文化程度
+	private Float em_worktime;// 工作年限
+	private String em_remark;// 备注
+	private String em_status;// 状态
+	private String em_statuscode;
+	private String em_bank;// 开户行
+	private String em_accounts;// 帐号
+	private String em_recorder;// 录入
+	private Date em_indate;// 入职日期
+	private Integer em_imageid;// 照片ID
+	private String em_contact;// 联系人
+	private String em_ctel;// 联系人电话
+	private Integer em_maid = 0;// 帐套ID
+	private String em_master;// 当前帐套名称
+	private String em_masters;// 可登录的帐套
+	private Integer em_remind = 1;// 是否刷新寻呼,1-是,0-否
+	private Master currentMaster;// 当前登录帐套
+	private Date em_mologintime;// 移动客户端最新登录时间
+	private Integer em_pdamobilelogin;// PDA移动端是否登录
+	private String em_cardcode;
+	private String em_photourl;// 人员照片在服务器端的存储路径
+	private Integer virtual_enuu;// 虚拟账号对应客户方UU
+	private Integer joborgnorelation;// 岗位不关联组织
+	private Integer em_onlyinner;
+	private String em_defaulthscode;//岗位编号
+	private String em_defaulthsname;//岗位名称
+	private Date em_pwdupdatedate;//密码修改时间
+	private String em_saledepart;//所属销售部
+	
+	private String em_cop;//所属公司
+	private String em_factory ;//所属工厂
+	public Date getEm_pwdupdatedate() {
+		return em_pwdupdatedate;
+	}
+
+	public void setEm_pwdupdatedate(Date em_pwdupdatedate) {
+		this.em_pwdupdatedate = em_pwdupdatedate;
+	}
+
+	private Integer em_dtremind=0;//是否桌面提醒(20170309 by zyc)
+	
+	
+	public String getEm_defaulthscode() {
+		return em_defaulthscode;
+	}
+
+	public void setEm_defaulthscode(String em_defaulthscode) {
+		this.em_defaulthscode = em_defaulthscode;
+	}
+
+	public String getEm_defaulthsname() {
+		return em_defaulthsname;
+	}
+
+	public void setEm_defaulthsname(String em_defaulthsname) {
+		this.em_defaulthsname = em_defaulthsname;
+	}
+
+	public Integer getJoborgnorelation() {
+		return joborgnorelation;
+	}
+
+	public void setJoborgnorelation(Integer joborgnorelation) {
+		this.joborgnorelation = joborgnorelation;
+	}
+
+	public String getEm_cardcode() {
+		return em_cardcode;
+	}
+
+	public void setEm_cardcode(String em_cardcode) {
+		this.em_cardcode = em_cardcode;
+	}
+
+	public Date getEm_mologintime() {
+		return em_mologintime;
+	}
+
+	public void setEm_mologintime(Date em_mologintime) {
+		this.em_mologintime = em_mologintime;
+	}
+
+	private String model_code;
+	private String model_name;
+
+	public String getModel_code() {
+		return model_code;
+	}
+
+	public void setModel_code(String model_code) {
+		this.model_code = model_code;
+	}
+
+	public String getModel_name() {
+		return model_name;
+	}
+
+	public void setModel_name(String model_name) {
+		this.model_name = model_name;
+	}
+
+	public Master getCurrentMaster() {
+		return currentMaster;
+	}
+
+	public void setCurrentMaster(Master currentMaster) {
+		this.currentMaster = currentMaster;
+	}
+
+	public String getEm_master() {
+		return em_master;
+	}
+
+	public void setEm_master(String em_master) {
+		this.em_master = em_master;
+	}
+
+	private String em_type = "normal";// 员工账号类型,超级账号、普通账号
+	private String em_password;// 登录密码
+	private Integer em_enid;// 员工所在企业id
+	private String em_position; // 岗位
+	private String em_depart; // 部门
+	private String em_departmentcode;// 部门编号
+	private String em_professname;// 职称
+	private String em_class;// 员工类型 (试用,正式,离职)
+	private String em_endinsu;
+	private String em_medinsu;
+	private String em_unempinsu;
+	private String em_eminjuinsu;
+	private String em_mateinsu;
+	private String em_socailcard;
+	private String em_accumucard;
+	private String em_accimount;
+	private String em_secuclass;
+	private String em_height;
+	private String em_weight;
+	private String em_blood;
+	private String em_heathlevel;
+	private String em_defaultorname;
+	private String em_lastip;
+	private Date em_leavedate;// 离职时间
+	private String em_leavetype;// 离职类型
+	private Integer em_imid;// IM的ID
+
+	public Integer getEm_id() {
+		return em_id;
+	}
+
+	public void setEm_id(Integer em_id) {
+		this.em_id = em_id;
+	}
+
+	public String getEm_code() {
+		return em_code;
+	}
+
+	public void setEm_code(String em_code) {
+		this.em_code = em_code;
+	}
+
+	public Long getEm_uu() {
+		return em_uu;
+	}
+
+	public void setEm_uu(Long em_uu) {
+		this.em_uu = em_uu;
+	}
+
+	public Integer getEm_defaultorid() {
+		return em_defaultorid == null ? 0 : em_defaultorid;
+	}
+
+	public void setEm_defaultorid(Integer em_defaultorid) {
+		this.em_defaultorid = em_defaultorid;
+	}
+
+	public Integer getEm_defaultjbid() {
+		return em_defaultjbid;
+	}
+
+	public void setEm_defaultjbid(Integer em_defaultjbid) {
+		this.em_defaultjbid = em_defaultjbid;
+	}
+
+	public Integer getEm_defaulthsid() {
+		return em_defaulthsid;
+	}
+
+	public void setEm_defaulthsid(Integer em_defaulthsid) {
+		this.em_defaulthsid = em_defaulthsid;
+	}
+
+	public String getEm_name() {
+		return em_name;
+	}
+
+	public void setEm_name(String em_name) {
+		this.em_name = em_name;
+	}
+
+	public String getEm_sex() {
+		return em_sex;
+	}
+
+	public void setEm_sex(String em_sex) {
+		this.em_sex = em_sex;
+	}
+
+	public String getEm_iccode() {
+		return em_iccode;
+	}
+
+	public void setEm_iccode(String em_iccode) {
+		this.em_iccode = em_iccode;
+	}
+
+	public Date getEm_birthday() {
+		return em_birthday;
+	}
+
+	public void setEm_birthday(Date em_birthday) {
+		this.em_birthday = em_birthday;
+	}
+
+	public String getEm_nation() {
+		return em_nation;
+	}
+
+	public void setEm_nation(String em_nation) {
+		this.em_nation = em_nation;
+	}
+
+	public String getEm_marry() {
+		return em_marry;
+	}
+
+	public void setEm_marry(String em_marry) {
+		this.em_marry = em_marry;
+	}
+
+	public String getEm_polity() {
+		return em_polity;
+	}
+
+	public void setEm_polity(String em_polity) {
+		this.em_polity = em_polity;
+	}
+
+	public String getEm_tel() {
+		return em_tel;
+	}
+
+	public void setEm_tel(String em_tel) {
+		this.em_tel = em_tel;
+	}
+
+	public String getEm_mobile() {
+		return em_mobile;
+	}
+
+	public void setEm_mobile(String em_mobile) {
+		this.em_mobile = em_mobile;
+	}
+
+	public String getEm_email() {
+		return em_email;
+	}
+
+	public void setEm_email(String em_email) {
+		this.em_email = em_email;
+	}
+
+	public String getEm_mailpassword() {
+		return em_mailpassword;
+	}
+
+	public void setEm_mailpassword(String em_mailpassword) {
+		this.em_mailpassword = em_mailpassword;
+	}
+
+	public String getEm_native() {
+		return em_native;
+	}
+
+	public void setEm_native(String em_native) {
+		this.em_native = em_native;
+	}
+
+	public String getEm_address() {
+		return em_address;
+	}
+
+	public void setEm_address(String em_address) {
+		this.em_address = em_address;
+	}
+
+	public String getEm_finishschool() {
+		return em_finishschool;
+	}
+
+	public void setEm_finishschool(String em_finishschool) {
+		this.em_finishschool = em_finishschool;
+	}
+
+	public String getEm_speciality() {
+		return em_speciality;
+	}
+
+	public void setEm_speciality(String em_speciality) {
+		this.em_speciality = em_speciality;
+	}
+
+	public String getEm_culture() {
+		return em_culture;
+	}
+
+	public void setEm_culture(String em_culture) {
+		this.em_culture = em_culture;
+	}
+
+	public Float getEm_worktime() {
+		return em_worktime;
+	}
+
+	public void setEm_worktime(Float em_worktime) {
+		this.em_worktime = em_worktime;
+	}
+
+	public String getEm_remark() {
+		return em_remark;
+	}
+
+	public void setEm_remark(String em_remark) {
+		this.em_remark = em_remark;
+	}
+
+	public String getEm_status() {
+		return em_status;
+	}
+
+	public void setEm_status(String em_status) {
+		this.em_status = em_status;
+	}
+
+	public String getEm_bank() {
+		return em_bank;
+	}
+
+	public void setEm_bank(String em_bank) {
+		this.em_bank = em_bank;
+	}
+
+	public String getEm_accounts() {
+		return em_accounts;
+	}
+
+	public void setEm_accounts(String em_accounts) {
+		this.em_accounts = em_accounts;
+	}
+
+	public String getEm_recorder() {
+		return em_recorder;
+	}
+
+	public void setEm_recorder(String em_recorder) {
+		this.em_recorder = em_recorder;
+	}
+
+	public Date getEm_indate() {
+		return em_indate;
+	}
+
+	public void setEm_indate(Date em_indate) {
+		this.em_indate = em_indate;
+	}
+
+	public Integer getEm_imageid() {
+		return em_imageid;
+	}
+
+	public void setEm_imageid(Integer em_imageid) {
+		this.em_imageid = em_imageid;
+	}
+
+	public String getEm_contact() {
+		return em_contact;
+	}
+
+	public void setEm_contact(String em_contact) {
+		this.em_contact = em_contact;
+	}
+
+	public String getEm_ctel() {
+		return em_ctel;
+	}
+
+	public void setEm_ctel(String em_ctel) {
+		this.em_ctel = em_ctel;
+	}
+
+	public Integer getEm_maid() {
+		return em_maid;
+	}
+
+	public void setEm_maid(Integer em_maid) {
+		this.em_maid = em_maid;
+	}
+
+	public String getEm_type() {
+		return em_type;
+	}
+
+	public void setEm_type(String em_type) {
+		this.em_type = em_type;
+	}
+
+	public String getEm_password() {
+		return em_password;
+	}
+
+	public void setEm_password(String em_password) {
+		this.em_password = em_password;
+	}
+
+	public Integer getEm_enid() {
+		return em_enid;
+	}
+
+	public void setEm_enid(Integer em_enid) {
+		this.em_enid = em_enid;
+	}
+
+	public String getEm_position() {
+		return em_position;
+	}
+
+	public void setEm_position(String em_position) {
+		this.em_position = em_position;
+	}
+
+	public String getEm_depart() {
+		return em_depart;
+	}
+
+	public void setEm_depart(String em_depart) {
+		this.em_depart = em_depart;
+	}
+
+	public String getEm_departmentcode() {
+		return em_departmentcode;
+	}
+
+	public void setEm_departmentcode(String em_departmentcode) {
+		this.em_departmentcode = em_departmentcode;
+	}
+
+	public String getEm_professname() {
+		return em_professname;
+	}
+
+	public void setEm_professname(String em_professname) {
+		this.em_professname = em_professname;
+	}
+
+	public String getEm_class() {
+		return em_class;
+	}
+
+	public void setEm_class(String em_class) {
+		this.em_class = em_class;
+	}
+
+	public String getEm_endinsu() {
+		return em_endinsu;
+	}
+
+	public void setEm_endinsu(String em_endinsu) {
+		this.em_endinsu = em_endinsu;
+	}
+
+	public String getEm_medinsu() {
+		return em_medinsu;
+	}
+
+	public void setEm_medinsu(String em_medinsu) {
+		this.em_medinsu = em_medinsu;
+	}
+
+	public String getEm_unempinsu() {
+		return em_unempinsu;
+	}
+
+	public void setEm_unempinsu(String em_unempinsu) {
+		this.em_unempinsu = em_unempinsu;
+	}
+
+	public String getEm_eminjuinsu() {
+		return em_eminjuinsu;
+	}
+
+	public void setEm_eminjuinsu(String em_eminjuinsu) {
+		this.em_eminjuinsu = em_eminjuinsu;
+	}
+
+	public String getEm_mateinsu() {
+		return em_mateinsu;
+	}
+
+	public void setEm_mateinsu(String em_mateinsu) {
+		this.em_mateinsu = em_mateinsu;
+	}
+
+	public String getEm_socailcard() {
+		return em_socailcard;
+	}
+
+	public void setEm_socailcard(String em_socailcard) {
+		this.em_socailcard = em_socailcard;
+	}
+
+	public String getEm_accumucard() {
+		return em_accumucard;
+	}
+
+	public void setEm_accumucard(String em_accumucard) {
+		this.em_accumucard = em_accumucard;
+	}
+
+	public String getEm_accimount() {
+		return em_accimount;
+	}
+
+	public void setEm_accimount(String em_accimount) {
+		this.em_accimount = em_accimount;
+	}
+
+	public String getEm_secuclass() {
+		return em_secuclass;
+	}
+
+	public void setEm_secuclass(String em_secuclass) {
+		this.em_secuclass = em_secuclass;
+	}
+
+	public Integer getEm_remind() {
+		return em_remind;
+	}
+
+	public void setEm_remind(Integer em_remind) {
+		em_remind = em_remind == null ? 1 : em_remind;
+		this.em_remind = em_remind;
+	}
+
+	public String getEm_lastip() {
+		return em_lastip;
+	}
+
+	public void setEm_lastip(String em_lastip) {
+		this.em_lastip = em_lastip;
+	}
+
+	public String getEm_height() {
+		return em_height;
+	}
+
+	public void setEm_height(String em_height) {
+		this.em_height = em_height;
+	}
+
+	public String getEm_weight() {
+		return em_weight;
+	}
+
+	public void setEm_weight(String em_weight) {
+		this.em_weight = em_weight;
+	}
+
+	public String getEm_masters() {
+		return em_masters;
+	}
+
+	public void setEm_masters(String em_masters) {
+		this.em_masters = em_masters;
+	}
+
+	public String getEm_blood() {
+		return em_blood;
+	}
+
+	public void setEm_blood(String em_blood) {
+		this.em_blood = em_blood;
+	}
+
+	public String getEm_heathlevel() {
+		return em_heathlevel;
+	}
+
+	public void setEm_heathlevel(String em_heathlevel) {
+		this.em_heathlevel = em_heathlevel;
+	}
+
+	public String getEm_defaultorname() {
+		return em_defaultorname;
+	}
+
+	public void setEm_defaultorname(String em_defaultorname) {
+		this.em_defaultorname = em_defaultorname;
+	}
+
+	public Date getEm_leavedate() {
+		return em_leavedate;
+	}
+
+	public void setEm_leavedate(Date em_leavedate) {
+		this.em_leavedate = em_leavedate;
+	}
+
+	public String getEm_leavetype() {
+		return em_leavetype;
+	}
+
+	public void setEm_leavetype(String em_leavetype) {
+		this.em_leavetype = em_leavetype;
+	}
+
+	public Integer getEm_pdamobilelogin() {
+		return em_pdamobilelogin;
+	}
+
+	public void setEm_pdamobilelogin(Integer em_pdamobilelogin) {
+		this.em_pdamobilelogin = em_pdamobilelogin;
+	}
+
+	public String getEm_statuscode() {
+		return em_statuscode;
+	}
+
+	public void setEm_statuscode(String em_statuscode) {
+		this.em_statuscode = em_statuscode;
+	}
+
+	public String getEm_photourl() {
+		return em_photourl;
+	}
+
+	public void setEm_photourl(String em_photourl) {
+		this.em_photourl = em_photourl;
+	}
+
+	public Integer getVirtual_enuu() {
+		return virtual_enuu;
+	}
+
+	public void setVirtual_enuu(Integer virtual_enuu) {
+		this.virtual_enuu = virtual_enuu;
+	}
+
+	/**
+	 * 超级账户
+	 * 
+	 * @return
+	 */
+	@JsonIgnore
+	public boolean isAdmin() {
+		return "admin".equals(this.em_type);
+	}
+
+	/**
+	 * 是否虚拟超级账户
+	 * 
+	 * @return
+	 */
+	@JsonIgnore
+	public boolean isAdminVirtual() {
+		return "admin".equals(this.em_type) && "admin_virtual".equals(this.em_class);
+	}
+
+	/**
+	 * 是否虚拟客户账户
+	 * */
+	@JsonIgnore
+	public boolean isCustomerVirtual() {
+		return //"admin".equals(this.em_type) &&
+				"customer_virtual".equals(this.em_class);
+	}
+
+	public Integer getEm_imid() {
+		return em_imid;
+	}
+
+	public void setEm_imid(Integer em_imid) {
+		this.em_imid = em_imid;
+	}
+
+	public Integer getEm_onlyinner() {
+		return em_onlyinner;
+	}
+
+	public void setEm_onlyinner(Integer em_onlyinner) {
+		this.em_onlyinner = em_onlyinner;
+	}
+
+	@Override
+	public String toString() {
+		return this.em_code + "(" + this.em_name + ")";
+	}
+
+	public Integer getEm_dtremind() {
+		return em_dtremind;
+	}
+
+	public void setEm_dtremind(Integer em_dtremind) {
+		this.em_dtremind = em_dtremind;
+	}
+
+	public String getEm_saledepart() {
+		return em_saledepart;
+	}
+
+	public void setEm_saledepart(String em_saledepart) {
+		this.em_saledepart = em_saledepart;
+	}
+
+	public String getEm_cop() {
+		return em_cop;
+	}
+
+	public void setEm_cop(String em_cop) {
+		this.em_cop = em_cop;
+	}
+
+	/**
+	 * @return the em_factory
+	 */
+	public String getEm_factory() {
+		return em_factory;
+	}
+
+	/**
+	 * @param em_factory the em_factory to set
+	 */
+	public void setEm_factory(String em_factory) {
+		this.em_factory = em_factory;
+	}
+}

+ 212 - 0
src/main/java/com/uas/eis/entity/Make.java

@@ -0,0 +1,212 @@
+package com.uas.eis.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-07 13:55
+ */
+public class Make {
+
+    @JSONField(name = "prodNo")
+    private String ma_code;
+    @JSONField(name = "itemNo")
+    private String ma_prodcode;
+    @JSONField(name = "prodQty")
+    private int ma_qty;
+    @JSONField(name = "custNo")
+    private String ma_custcode;
+    @JSONField(name = "unitNo")
+    private String pr_unit;
+    @JSONField(name = "itemName")
+    private String pr_detail;
+    @JSONField(name = "description")
+    private String pr_spec;
+    @JSONField(name = "custOrder")
+    private String ma_salecode;
+    @JSONField(name = "beginDate")
+    private String ma_planbegindate;
+    @JSONField(name = "endDate")
+    private String ma_planenddate;
+    @JSONField(name = "companyNo")
+    private String ma_cop;
+    @JSONField(name = "status")
+    private String status;
+    @JSONField(name = "createdDateTime")
+    private String ma_date;
+    @JSONField(name = "createdUser")
+    private String ma_recorder;
+    @JSONField(name = "version")
+    private int ma_version;
+    @JSONField(name = "finterid")
+    private String ma_id;
+    @JSONField(name = "fWorkShop")
+    private String wc_id;
+    @JSONField(name = "fCostOBJID")
+    private String pr_id;
+    @JSONField(name = "modifiedDateTime")
+    private String ma_modifydate;
+    @JSONField(name = "modifiedUser")
+    private String ma_modifier;
+
+    public String getMa_code() {
+        return ma_code;
+    }
+
+    public void setMa_code(String ma_code) {
+        this.ma_code = ma_code;
+    }
+
+    public String getMa_prodcode() {
+        return ma_prodcode;
+    }
+
+    public void setMa_prodcode(String ma_prodcode) {
+        this.ma_prodcode = ma_prodcode;
+    }
+
+    public int getMa_qty() {
+        return ma_qty;
+    }
+
+    public void setMa_qty(int ma_qty) {
+        this.ma_qty = ma_qty;
+    }
+
+    public String getMa_custcode() {
+        return ma_custcode;
+    }
+
+    public void setMa_custcode(String ma_custcode) {
+        this.ma_custcode = ma_custcode;
+    }
+
+    public String getPr_unit() {
+        return pr_unit;
+    }
+
+    public void setPr_unit(String pr_unit) {
+        this.pr_unit = pr_unit;
+    }
+
+    public String getPr_detail() {
+        return pr_detail;
+    }
+
+    public void setPr_detail(String pr_detail) {
+        this.pr_detail = pr_detail;
+    }
+
+    public String getPr_spec() {
+        return pr_spec;
+    }
+
+    public void setPr_spec(String pr_spec) {
+        this.pr_spec = pr_spec;
+    }
+
+    public String getMa_salecode() {
+        return ma_salecode;
+    }
+
+    public void setMa_salecode(String ma_salecode) {
+        this.ma_salecode = ma_salecode;
+    }
+
+    public String getMa_planbegindate() {
+        return ma_planbegindate;
+    }
+
+    public void setMa_planbegindate(String ma_planbegindate) {
+        this.ma_planbegindate = ma_planbegindate;
+    }
+
+    public String getMa_planenddate() {
+        return ma_planenddate;
+    }
+
+    public void setMa_planenddate(String ma_planenddate) {
+        this.ma_planenddate = ma_planenddate;
+    }
+
+    public String getMa_cop() {
+        return ma_cop;
+    }
+
+    public void setMa_cop(String ma_cop) {
+        this.ma_cop = ma_cop;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getMa_date() {
+        return ma_date;
+    }
+
+    public void setMa_date(String ma_date) {
+        this.ma_date = ma_date;
+    }
+
+    public String getMa_recorder() {
+        return ma_recorder;
+    }
+
+    public void setMa_recorder(String ma_recorder) {
+        this.ma_recorder = ma_recorder;
+    }
+
+    public int getMa_version() {
+        return ma_version;
+    }
+
+    public void setMa_version(int ma_version) {
+        this.ma_version = ma_version;
+    }
+
+    public String getMa_id() {
+        return ma_id;
+    }
+
+    public void setMa_id(String ma_id) {
+        this.ma_id = ma_id;
+    }
+
+    public String getWc_id() {
+        return wc_id;
+    }
+
+    public void setWc_id(String wc_id) {
+        this.wc_id = wc_id;
+    }
+
+    public String getPr_id() {
+        return pr_id;
+    }
+
+    public void setPr_id(String pr_id) {
+        this.pr_id = pr_id;
+    }
+
+    public String getMa_modifydate() {
+        return ma_modifydate;
+    }
+
+    public void setMa_modifydate(String ma_modifydate) {
+        this.ma_modifydate = ma_modifydate;
+    }
+
+    public String getMa_modifier() {
+        return ma_modifier;
+    }
+
+    public void setMa_modifier(String ma_modifier) {
+        this.ma_modifier = ma_modifier;
+    }
+}

+ 202 - 0
src/main/java/com/uas/eis/entity/MakeMaterial.java

@@ -0,0 +1,202 @@
+package com.uas.eis.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-07 14:32
+ */
+public class MakeMaterial {
+
+    @JSONField(name = "prodNo")
+    private String mm_code;
+    @JSONField(name = "lineId")
+    private int mm_detno;
+    @JSONField(name = "itemNo")
+    private String mm_prodcode;
+    @JSONField(name = "itemName")
+    private String pr_detail;
+    @JSONField(name = "description")
+    private String pr_spec;
+    @JSONField(name = "unitNo")
+    private String pr_unit;
+    @JSONField(name = "qty")
+    private Float qty;
+    @JSONField(name = "totalQty")
+    private Float mm_qty;
+    @JSONField(name = "baseQty")
+    private Float mm_oneuseqty;
+    @JSONField(name = "type")
+    private String type;
+    @JSONField(name = "createdUser")
+    private String ma_recorder;
+    @JSONField(name = "createdDateTime")
+    private String ma_date;
+    @JSONField(name = "version")
+    private int ma_version;
+    @JSONField(name = "companyNo")
+    private String ma_cop;
+    @JSONField(name = "oriItemNo")
+    private String mm_repprodcode;
+    @JSONField(name = "scarpQty")
+    private Float mm_balance;
+    @JSONField(name = "custNo")
+    private String ma_custcode;
+    @JSONField(name = "modifiedDateTime")
+    private String ma_modifydate;
+    @JSONField(name = "modifiedUser")
+    private String ma_modifier;
+
+    public String getMm_code() {
+        return mm_code;
+    }
+
+    public void setMm_code(String mm_code) {
+        this.mm_code = mm_code;
+    }
+
+    public int getMm_detno() {
+        return mm_detno;
+    }
+
+    public void setMm_detno(int mm_detno) {
+        this.mm_detno = mm_detno;
+    }
+
+    public String getMm_prodcode() {
+        return mm_prodcode;
+    }
+
+    public void setMm_prodcode(String mm_prodcode) {
+        this.mm_prodcode = mm_prodcode;
+    }
+
+    public String getPr_detail() {
+        return pr_detail;
+    }
+
+    public void setPr_detail(String pr_detail) {
+        this.pr_detail = pr_detail;
+    }
+
+    public String getPr_spec() {
+        return pr_spec;
+    }
+
+    public void setPr_spec(String pr_spec) {
+        this.pr_spec = pr_spec;
+    }
+
+    public String getPr_unit() {
+        return pr_unit;
+    }
+
+    public void setPr_unit(String pr_unit) {
+        this.pr_unit = pr_unit;
+    }
+
+    public Float getQty() {
+        return qty;
+    }
+
+    public void setQty(Float qty) {
+        this.qty = qty;
+    }
+
+    public Float getMm_qty() {
+        return mm_qty;
+    }
+
+    public void setMm_qty(Float mm_qty) {
+        this.mm_qty = mm_qty;
+    }
+
+    public Float getMm_oneuseqty() {
+        return mm_oneuseqty;
+    }
+
+    public void setMm_oneuseqty(Float mm_oneuseqty) {
+        this.mm_oneuseqty = mm_oneuseqty;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getMa_recorder() {
+        return ma_recorder;
+    }
+
+    public void setMa_recorder(String ma_recorder) {
+        this.ma_recorder = ma_recorder;
+    }
+
+    public String getMa_date() {
+        return ma_date;
+    }
+
+    public void setMa_date(String ma_date) {
+        this.ma_date = ma_date;
+    }
+
+    public int getMa_version() {
+        return ma_version;
+    }
+
+    public void setMa_version(int ma_version) {
+        this.ma_version = ma_version;
+    }
+
+    public String getMa_cop() {
+        return ma_cop;
+    }
+
+    public void setMa_cop(String ma_cop) {
+        this.ma_cop = ma_cop;
+    }
+
+    public String getMm_repprodcode() {
+        return mm_repprodcode;
+    }
+
+    public void setMm_repprodcode(String mm_repprodcode) {
+        this.mm_repprodcode = mm_repprodcode;
+    }
+
+    public Float getMm_balance() {
+        return mm_balance;
+    }
+
+    public void setMm_balance(Float mm_balance) {
+        this.mm_balance = mm_balance;
+    }
+
+    public String getMa_custcode() {
+        return ma_custcode;
+    }
+
+    public void setMa_custcode(String ma_custcode) {
+        this.ma_custcode = ma_custcode;
+    }
+
+    public String getMa_modifydate() {
+        return ma_modifydate;
+    }
+
+    public void setMa_modifydate(String ma_modifydate) {
+        this.ma_modifydate = ma_modifydate;
+    }
+
+    public String getMa_modifier() {
+        return ma_modifier;
+    }
+
+    public void setMa_modifier(String ma_modifier) {
+        this.ma_modifier = ma_modifier;
+    }
+}

+ 249 - 0
src/main/java/com/uas/eis/entity/Transfer.java

@@ -0,0 +1,249 @@
+package com.uas.eis.entity;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 转单配置方案
+ * 
+ * @author yingp
+ * 
+ */
+public class Transfer implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private int tr_id;
+	private String tr_title;
+	private String tr_caller;
+	private String tr_pagecaller;
+	private String tr_fromtable;
+	private String tr_fromtabledet;
+	private String tr_fromtablesql;
+	private String tr_fromdockey;
+	private String tr_fromrowkey;
+	private String tr_fromrownum;
+	private String tr_fromrowqty;
+	private String tr_fromrowyqty;
+	private String tr_totable;
+	private String tr_torowkey;
+	private String tr_torownum;
+	private String tr_tocodekey;
+	private String tr_tocodecaller;
+	private String tr_torowforkey;
+	
+	private String tr_mode;
+	
+	private List<Detail> details;
+
+	public int getTr_id() {
+		return tr_id;
+	}
+
+	public void setTr_id(int tr_id) {
+		this.tr_id = tr_id;
+	}
+
+	public String getTr_title() {
+		return tr_title;
+	}
+
+	public void setTr_title(String tr_title) {
+		this.tr_title = tr_title;
+	}
+
+	public String getTr_caller() {
+		return tr_caller;
+	}
+
+	public void setTr_caller(String tr_caller) {
+		this.tr_caller = tr_caller;
+	}
+
+	public String getTr_pagecaller() {
+		return tr_pagecaller;
+	}
+
+	public void setTr_pagecaller(String tr_pagecaller) {
+		this.tr_pagecaller = tr_pagecaller;
+	}
+
+	public String getTr_fromtable() {
+		return tr_fromtable;
+	}
+
+	public void setTr_fromtable(String tr_fromtable) {
+		this.tr_fromtable = tr_fromtable;
+	}
+
+	public String getTr_fromtabledet() {
+		return tr_fromtabledet;
+	}
+
+	public void setTr_fromtabledet(String tr_fromtabledet) {
+		this.tr_fromtabledet = tr_fromtabledet;
+	}
+
+	public String getTr_fromtablesql() {
+		return tr_fromtablesql;
+	}
+
+	public void setTr_fromtablesql(String tr_fromtablesql) {
+		this.tr_fromtablesql = tr_fromtablesql;
+	}
+
+	public String getTr_fromdockey() {
+		return tr_fromdockey;
+	}
+
+	public void setTr_fromdockey(String tr_fromdockey) {
+		this.tr_fromdockey = tr_fromdockey;
+	}
+
+	public String getTr_fromrowkey() {
+		return tr_fromrowkey;
+	}
+
+	public void setTr_fromrowkey(String tr_fromrowkey) {
+		this.tr_fromrowkey = tr_fromrowkey;
+	}
+
+	public String getTr_fromrownum() {
+		return tr_fromrownum;
+	}
+
+	public void setTr_fromrownum(String tr_fromrownum) {
+		this.tr_fromrownum = tr_fromrownum;
+	}
+
+	public String getTr_fromrowqty() {
+		return tr_fromrowqty;
+	}
+
+	public void setTr_fromrowqty(String tr_fromrowqty) {
+		this.tr_fromrowqty = tr_fromrowqty;
+	}
+
+	public String getTr_fromrowyqty() {
+		return tr_fromrowyqty;
+	}
+
+	public void setTr_fromrowyqty(String tr_fromrowyqty) {
+		this.tr_fromrowyqty = tr_fromrowyqty;
+	}
+
+	public String getTr_totable() {
+		return tr_totable;
+	}
+
+	public void setTr_totable(String tr_totable) {
+		this.tr_totable = tr_totable;
+	}
+
+	public String getTr_torowkey() {
+		return tr_torowkey;
+	}
+
+	public void setTr_torowkey(String tr_torowkey) {
+		this.tr_torowkey = tr_torowkey;
+	}
+
+	public String getTr_torownum() {
+		return tr_torownum;
+	}
+
+	public void setTr_torownum(String tr_torownum) {
+		this.tr_torownum = tr_torownum;
+	}
+
+	public String getTr_tocodekey() {
+		return tr_tocodekey;
+	}
+
+	public void setTr_tocodekey(String tr_tocodekey) {
+		this.tr_tocodekey = tr_tocodekey;
+	}
+
+	public String getTr_torowforkey() {
+		return tr_torowforkey;
+	}
+
+	public String getTr_tocodecaller() {
+		return tr_tocodecaller;
+	}
+
+	public void setTr_tocodecaller(String tr_tocodecaller) {
+		this.tr_tocodecaller = tr_tocodecaller;
+	}
+
+	public void setTr_torowforkey(String tr_torowforkey) {
+		this.tr_torowforkey = tr_torowforkey;
+	}
+
+	public String getTr_mode() {
+		return tr_mode;
+	}
+
+	public void setTr_mode(String tr_mode) {
+		this.tr_mode = tr_mode;
+	}
+
+	public List<Detail> getDetails() {
+		return details;
+	}
+
+	public void setDetails(List<Detail> details) {
+		this.details = details;
+	}
+
+	/**
+	 * 转单配置详细字段
+	 * 
+	 * @author yingp
+	 * 
+	 */
+	public static class Detail implements Serializable{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private int td_trid;
+		private String td_fromtable;
+		private String td_fromfield;
+		private String td_tofield;
+
+		public int getTd_trid() {
+			return td_trid;
+		}
+
+		public void setTd_trid(int td_trid) {
+			this.td_trid = td_trid;
+		}
+
+		public String getTd_fromtable() {
+			return td_fromtable;
+		}
+
+		public void setTd_fromtable(String td_fromtable) {
+			this.td_fromtable = td_fromtable;
+		}
+
+		public String getTd_fromfield() {
+			return td_fromfield;
+		}
+
+		public void setTd_fromfield(String td_fromfield) {
+			this.td_fromfield = td_fromfield;
+		}
+
+		public String getTd_tofield() {
+			return td_tofield;
+		}
+
+		public void setTd_tofield(String td_tofield) {
+			this.td_tofield = td_tofield;
+		}
+	}
+}

+ 314 - 0
src/main/java/com/uas/eis/entity/VerifyApply.java

@@ -0,0 +1,314 @@
+package com.uas.eis.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.util.List;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-08 9:43
+ */
+public class VerifyApply {
+
+    @JSONField(name = "fInterID")
+    private int va_id;
+    @JSONField(name = "mesCode")
+    private String va_mescode;
+    @JSONField(name = "journalNo")
+    private String va_code;
+    @JSONField(name = "createdDateTime")
+    private String va_date;
+    @JSONField(name = "vendNo")
+    private String va_vendcode;
+    @JSONField(name = "vendName")
+    private String va_vendname;
+    @JSONField(name = "currency")
+    private String va_currency;
+    @JSONField(name = "rate")
+    private Float va_rate;
+    @JSONField(name = "paymentsCode")
+    private String va_paymentscode;
+    @JSONField(name = "payments")
+    private String va_payments;
+    @JSONField(name = "transport")
+    private String va_transport;
+    @JSONField(name = "sendCode")
+    private String va_sendcode;
+    @JSONField(name = "sellerCode")
+    private String va_emcode;
+    @JSONField(name = "sellerName")
+    private String va_emname;
+    @JSONField(name = "whNo")
+    private String va_whcode;
+    @JSONField(name = "whName")
+    private String va_whname;
+    @JSONField(name = "erpFDeptID")
+    private String va_departmentcode;
+    @JSONField(name = "erpFDept")
+    private String va_department;
+    @JSONField(name = "createdUser")
+    private String va_recorder;
+    @JSONField(name = "companyNo")
+    private String va_cop;
+    @JSONField(name = "remark")
+    private String va_remark;
+    @JSONField(name = "anCode")
+    private String va_ancode;
+    @JSONField(name = "SHFactory")
+    private String va_factory;
+    @JSONField(name = "version")
+    private String version;
+    @JSONField(name = "custNo")
+    private String va_custcode;
+    @JSONField(name = "custName")
+    private String va_custname;
+    @JSONField(name = "recType")
+    private String recType;
+    @JSONField(name = "devNo")
+    private String va_pucode;
+    @JSONField(name = "fSourceInterId")
+    private int pu_id;
+    @JSONField(name = "details")
+    private List<VerifyApplyDetail> VerifyApplyDetails;
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getVa_custcode() {
+        return va_custcode;
+    }
+
+    public void setVa_custcode(String va_custcode) {
+        this.va_custcode = va_custcode;
+    }
+
+    public String getVa_custname() {
+        return va_custname;
+    }
+
+    public void setVa_custname(String va_custname) {
+        this.va_custname = va_custname;
+    }
+
+    public String getRecType() {
+        return recType;
+    }
+
+    public void setRecType(String recType) {
+        this.recType = recType;
+    }
+
+    public String getVa_pucode() {
+        return va_pucode;
+    }
+
+    public void setVa_pucode(String va_pucode) {
+        this.va_pucode = va_pucode;
+    }
+
+    public int getPu_id() {
+        return pu_id;
+    }
+
+    public void setPu_id(int pu_id) {
+        this.pu_id = pu_id;
+    }
+
+    public int getVa_id() {
+        return va_id;
+    }
+
+    public void setVa_id(int va_id) {
+        this.va_id = va_id;
+    }
+
+    public String getVa_mescode() {
+        return va_mescode;
+    }
+
+    public void setVa_mescode(String va_mescode) {
+        this.va_mescode = va_mescode;
+    }
+
+    public String getVa_code() {
+        return va_code;
+    }
+
+    public void setVa_code(String va_code) {
+        this.va_code = va_code;
+    }
+
+    public String getVa_date() {
+        return va_date;
+    }
+
+    public void setVa_date(String va_date) {
+        this.va_date = va_date;
+    }
+
+    public String getVa_vendcode() {
+        return va_vendcode;
+    }
+
+    public void setVa_vendcode(String va_vendcode) {
+        this.va_vendcode = va_vendcode;
+    }
+
+    public String getVa_vendname() {
+        return va_vendname;
+    }
+
+    public void setVa_vendname(String va_vendname) {
+        this.va_vendname = va_vendname;
+    }
+
+    public String getVa_currency() {
+        return va_currency;
+    }
+
+    public void setVa_currency(String va_currency) {
+        this.va_currency = va_currency;
+    }
+
+    public Float getVa_rate() {
+        return va_rate;
+    }
+
+    public void setVa_rate(Float va_rate) {
+        this.va_rate = va_rate;
+    }
+
+    public String getVa_paymentscode() {
+        return va_paymentscode;
+    }
+
+    public void setVa_paymentscode(String va_paymentscode) {
+        this.va_paymentscode = va_paymentscode;
+    }
+
+    public String getVa_payments() {
+        return va_payments;
+    }
+
+    public void setVa_payments(String va_payments) {
+        this.va_payments = va_payments;
+    }
+
+    public String getVa_transport() {
+        return va_transport;
+    }
+
+    public void setVa_transport(String va_transport) {
+        this.va_transport = va_transport;
+    }
+
+    public String getVa_sendcode() {
+        return va_sendcode;
+    }
+
+    public void setVa_sendcode(String va_sendcode) {
+        this.va_sendcode = va_sendcode;
+    }
+
+    public String getVa_emcode() {
+        return va_emcode;
+    }
+
+    public void setVa_emcode(String va_emcode) {
+        this.va_emcode = va_emcode;
+    }
+
+    public String getVa_emname() {
+        return va_emname;
+    }
+
+    public void setVa_emname(String va_emname) {
+        this.va_emname = va_emname;
+    }
+
+    public String getVa_whcode() {
+        return va_whcode;
+    }
+
+    public void setVa_whcode(String va_whcode) {
+        this.va_whcode = va_whcode;
+    }
+
+    public String getVa_whname() {
+        return va_whname;
+    }
+
+    public void setVa_whname(String va_whname) {
+        this.va_whname = va_whname;
+    }
+
+    public String getVa_departmentcode() {
+        return va_departmentcode;
+    }
+
+    public void setVa_departmentcode(String va_departmentcode) {
+        this.va_departmentcode = va_departmentcode;
+    }
+
+    public String getVa_department() {
+        return va_department;
+    }
+
+    public void setVa_department(String va_department) {
+        this.va_department = va_department;
+    }
+
+    public String getVa_recorder() {
+        return va_recorder;
+    }
+
+    public void setVa_recorder(String va_recorder) {
+        this.va_recorder = va_recorder;
+    }
+
+    public String getVa_cop() {
+        return va_cop;
+    }
+
+    public void setVa_cop(String va_cop) {
+        this.va_cop = va_cop;
+    }
+
+    public String getVa_remark() {
+        return va_remark;
+    }
+
+    public void setVa_remark(String va_remark) {
+        this.va_remark = va_remark;
+    }
+
+    public String getVa_ancode() {
+        return va_ancode;
+    }
+
+    public void setVa_ancode(String va_ancode) {
+        this.va_ancode = va_ancode;
+    }
+
+    public String getVa_factory() {
+        return va_factory;
+    }
+
+    public void setVa_factory(String va_factory) {
+        this.va_factory = va_factory;
+    }
+
+    public List<VerifyApplyDetail> getVerifyApplyDetails() {
+        return VerifyApplyDetails;
+    }
+
+    public void setVerifyApplyDetails(List<VerifyApplyDetail> verifyApplyDetails) {
+        VerifyApplyDetails = verifyApplyDetails;
+    }
+}

+ 112 - 0
src/main/java/com/uas/eis/entity/VerifyApplyDetail.java

@@ -0,0 +1,112 @@
+package com.uas.eis.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-08 9:54
+ */
+public class VerifyApplyDetail {
+
+    @JSONField(name = "fInterID")
+    private int vad_vaid;
+    @JSONField(name = "itemNo")
+    private String vad_prodcode;
+    @JSONField(name = "itemName")
+    private String pr_detail;
+    @JSONField(name = "description")
+    private String pr_spec;
+    @JSONField(name = "unitNo")
+    private String pr_unit;
+    @JSONField(name = "qty")
+    private Float vad_qty;
+    @JSONField(name = "whCode")
+    private String vad_whcode;
+    @JSONField(name = "whName")
+    private String vad_whname;
+    @JSONField(name = "sellerCode")
+    private String vad_sellercode;
+    @JSONField(name = "sellerName")
+    private String vad_seller;
+
+    public int getVad_vaid() {
+        return vad_vaid;
+    }
+
+    public void setVad_vaid(int vad_vaid) {
+        this.vad_vaid = vad_vaid;
+    }
+
+    public String getVad_prodcode() {
+        return vad_prodcode;
+    }
+
+    public void setVad_prodcode(String vad_prodcode) {
+        this.vad_prodcode = vad_prodcode;
+    }
+
+    public String getPr_detail() {
+        return pr_detail;
+    }
+
+    public void setPr_detail(String pr_detail) {
+        this.pr_detail = pr_detail;
+    }
+
+    public String getPr_spec() {
+        return pr_spec;
+    }
+
+    public void setPr_spec(String pr_spec) {
+        this.pr_spec = pr_spec;
+    }
+
+    public String getPr_unit() {
+        return pr_unit;
+    }
+
+    public void setPr_unit(String pr_unit) {
+        this.pr_unit = pr_unit;
+    }
+
+    public Float getVad_qty() {
+        return vad_qty;
+    }
+
+    public void setVad_qty(Float vad_qty) {
+        this.vad_qty = vad_qty;
+    }
+
+    public String getVad_whcode() {
+        return vad_whcode;
+    }
+
+    public void setVad_whcode(String vad_whcode) {
+        this.vad_whcode = vad_whcode;
+    }
+
+    public String getVad_whname() {
+        return vad_whname;
+    }
+
+    public void setVad_whname(String vad_whname) {
+        this.vad_whname = vad_whname;
+    }
+
+    public String getVad_sellercode() {
+        return vad_sellercode;
+    }
+
+    public void setVad_sellercode(String vad_sellercode) {
+        this.vad_sellercode = vad_sellercode;
+    }
+
+    public String getVad_seller() {
+        return vad_seller;
+    }
+
+    public void setVad_seller(String vad_seller) {
+        this.vad_seller = vad_seller;
+    }
+}

+ 16 - 0
src/main/java/com/uas/eis/service/ERPService.java

@@ -0,0 +1,16 @@
+package com.uas.eis.service;
+
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-06 18:25
+ */
+public interface ERPService {
+
+    String syncProduct(String data);
+
+    String syncMakeBase(String data);
+
+    String syncMakeBaseDetail(String data);
+}

+ 91 - 0
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -0,0 +1,91 @@
+package com.uas.eis.service.Impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.eis.core.support.TokenProperties;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.entity.Make;
+import com.uas.eis.entity.MakeMaterial;
+import com.uas.eis.entity.Product;
+import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.BaseUtil;
+import com.uas.eis.utils.HttpUtil;
+import com.uas.eis.utils.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-06 18:27
+ */
+@Service
+public class ERPServiceImpl implements ERPService {
+    private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Override
+    public String syncProduct(String data) {
+        Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
+        Product product = baseDao.getJdbcTemplate().queryForObject("select pr_kh_user,pr_code ,pr_detail ,pr_spec ," +
+                "nvl(pr_unit,'PCS') pr_unit,nvl(pr_cop,'BYT') pr_cop,nvl(pr_version,0) pr_version," +
+                "pr_serial ,nvl(pr_validdays,0) pr_validdays ,pr_msdlevel ,pr_fhelpcode ,pr_f_115 ,pr_f_116 ,pr_f_102" +
+                " ,pr_kind ,pr_whcode from product where pr_id=?",
+                new BeanPropertyRowMapper<Product>(Product.class),store.get("pr_id"));
+        Map map = JSON.parseObject(JSON.toJSONString(product), Map.class);
+        map.put("flag",store.get("flag"));
+        return syncMES(map,tokenConfig.get("syncProduct"));
+
+    }
+
+    @Override
+    public String syncMakeBase(String data) {
+        Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
+        Make make = baseDao.getJdbcTemplate().queryForObject("select ma_code,ma_prodcode,ma_qty,ma_custcode,pr_unit,pr_detail,pr_spec,ma_salecode,to_char(ma_planbegindate,'yyyy-MM-dd') ma_planbegindate,to_char(ma_planenddate,'yyyy-MM-dd') ma_planenddate,nvl(ma_cop,'BYT') ma_cop,'S' status,to_char(ma_date,'yyyy-MM-dd HH24:mi:ss') ma_date,ma_recorder,nvl(ma_version,0) ma_version,ma_id,wc_id,pr_id,to_char(ma_modifydate,'yyyy-MM-dd HH24:mi:ss') ma_modifydate,ma_modifier from make left join product on ma_prodcode=pr_code left join workcenter on ma_wccode=wc_code where ma_id=?",
+                new BeanPropertyRowMapper<Make>(Make.class),store.get("ma_id"));
+        Map map = JSON.parseObject(JSON.toJSONString(make), Map.class);
+        map.put("flag",store.get("flag"));
+        return syncMES(map,tokenConfig.get("syncMakeBase"));
+    }
+
+    @Override
+    public String syncMakeBaseDetail(String data) {
+        Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
+        MakeMaterial makeMaterial = baseDao.getJdbcTemplate().queryForObject("select * from MakeMaterial left join " +
+                        "Product on mm_prodcode=pr_code where mm_id=?",
+                new BeanPropertyRowMapper<MakeMaterial>(MakeMaterial.class),store.get("mm_id"));
+        Map map = JSON.parseObject(JSON.toJSONString(makeMaterial), Map.class);
+        map.put("flag",store.get("flag"));
+        return syncMES(map,tokenConfig.get("syncMakeBaseDetail"));
+    }
+
+    private String syncMES(Map<String,String> map,String url){
+        map.put("mesUser",tokenConfig.get("mesUser"));
+        map.put("mesPwd",tokenConfig.get("mesPwd"));
+        try {
+            HashMap<String, String> header = new HashMap<>();
+            header.put("Content-Type","application/json");
+            Map<String, String> params = new HashMap<String, String>();
+            params.put("data", StringUtil.nvl(map,""));
+            HttpUtil.Response response = HttpUtil.sendPostRequest(tokenConfig.get("mesHttp") + url, header, params);
+            JSONObject jsonObject = JSON.parseObject(response.getResponseText());
+            int code = jsonObject.getIntValue("result");
+            if (code==0){
+                return "同步MES成功";
+            }else if(code==1){
+                return jsonObject.getString("message");
+            }else {
+                return "调用非法!";
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            return e.getMessage();
+        }
+    }
+}

+ 300 - 0
src/main/java/com/uas/eis/service/Impl/MESServiceImpl.java

@@ -0,0 +1,300 @@
+package com.uas.eis.service.Impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.dto.Key;
+import com.uas.eis.entity.*;
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.sdk.resp.ApiResponse;
+import com.uas.eis.service.MESService;
+import com.uas.eis.utils.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-08 9:32
+ */
+@Service
+public class MESServiceImpl implements MESService {
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Autowired
+    private TransferRepository transferRepository;
+
+    @Override
+    public ApiResult<String> checkVerifyApply(HttpServletRequest request,String data) {
+        Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
+        String mesCode = StringUtil.nvl(store.get("mesCode"), "");
+        if ("".equals(mesCode)){
+            return ApiResponse.failRsp("10011",request.getHeader("RequestId"),"MES编号不能为空!");
+        }
+        VerifyApply verifyApply = baseDao.getJdbcTemplate().queryForObject("select va_id,va_mescode,va_code,to_char" +
+                        "(va_date,'yyyy-MM-dd HH24:mi:ss') va_date,va_vendcode,va_vendname,va_currency,va_rate,va_paymentscode,va_payments,va_transport,va_sendcode," +
+                        "va_emcode,va_emname,va_whcode,va_whname,va_departmentcode,va_department,va_recorder,nvl" +
+                        "(va_cop,'BYT') va_cop,va_remark,va_ancode,va_factory,0 version,va_custcode,va_custname,'自购收货' recType,va_pucode,case when nvl(va_pucode,' ')=' ' then 0 else (select pu_id from purchase where pu_code=va_pucode) end pu_id from VerifyApply where " +
+                        "va_statuscode='AUDITED' and va_mescode=?",
+                new BeanPropertyRowMapper<VerifyApply>(VerifyApply.class), mesCode);
+        if (verifyApply==null) {
+            return ApiResponse.failRsp("10012",request.getHeader("RequestId"),"单据未审核或不存在,请确认!");
+        }
+        List<VerifyApplyDetail> verifyApplyDetails = baseDao.query("select vad_vaid,vad_prodcode,pr_detail,pr_spec,pr_unit,sum(nvl(vad_qty,0)) vad_qty,vad_whcode,vad_whname,vad_sellercode," +
+                "vad_seller from verifyapplydetail left join product on vad_prodcode=pr_code where vad_vaid=" + verifyApply.getVa_id() + " group by vad_vaid,vad_prodcode,pr_detail,pr_spec,pr_unit,vad_whcode,vad_whname,vad_sellercode,vad_seller", VerifyApplyDetail.class);
+        verifyApply.setVerifyApplyDetails(verifyApplyDetails);
+        String s = JSON.toJSONString(verifyApply, SerializerFeature.WriteMapNullValue);
+        return ApiResponse.successRsp("0","获取成功!",request.getHeader("RequestId"),s);
+    }
+
+    @Override
+    public ApiResult<String> purcCheckin(HttpServletRequest request,String data) {
+        Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
+        String mesCode = StringUtil.nvl(store.get("mesCode"), "");
+        if ("".equals(mesCode)){
+            return ApiResponse.failRsp("10011",request.getHeader("RequestId"),"MES编号不能为空!");
+        }
+        int count = baseDao.getCountByCondition("verifyApply", "va_statuscode='AUDITED' and va_mescode='" + mesCode + "'");
+        if (count<1){
+            return ApiResponse.failRsp("10012",request.getHeader("RequestId"),"单据未审核或不存在,请确认!");
+        }
+        Object vaid = baseDao.getFieldDataByCondition("verifyApply", "va_id", "va_statuscode='AUDITED" +
+                "' and va_mescode='" + mesCode + "'");
+        int piid ;
+        //判断已转数
+        Object chekQty = baseDao.getJdbcTemplate().queryForObject("select wmsys.wm_concat('收料单:'||vad_code||'序号:'||vad_detno)  from VerifyApplyDetail where vad_qty <= vad_yqty and vad_vaid = "+vaid, String.class);
+        if(chekQty !=null){
+            return ApiResponse.failRsp("10013",request.getHeader("RequestId"),"检测到" + chekQty + ",本次数量超出可转数量!");
+        }
+        // 判断该收料通知单是否已经转入过采购验收单
+        Object code = baseDao.getFieldDataByCondition("VerifyApply", "va_code", "va_id=" + vaid);
+        code = baseDao.getFieldDataByCondition("ProdInOut", "pi_inoutno", "pi_sourcecode='" + code + "' and PI_REFNO='采购收料单'");
+        if (code != null && !code.equals("")) {
+            return ApiResponse.failRsp("10014",request.getHeader("RequestId"),"该收料单已转入过采购验收单,验收单号[" + code + "]");
+        } else {
+            String sellerName = StringUtil.nvl(store.get("sellerName"), "管理员");
+            Employee employee = baseDao.getJdbcTemplate().queryForObject("select * from employee where em_name=?",
+                    new BeanPropertyRowMapper<Employee>(Employee.class), sellerName);
+            // 转采购验收单
+            Key key = transferRepository.transfer("VerifyApply!ToPurcIn", vaid,employee);
+            piid = key.getId();
+            // 转入明细
+            transferRepository.transferDetail("VerifyApply!ToPurcIn", vaid, key,employee);
+            if (piid != 0) {
+                baseDao.execute("update prodiodetail set pd_prodid=(select pr_id from product where pd_prodcode=pr_code) where pd_piid=" + piid
+                        + " and nvl(pd_prodcode,' ')<>' '");
+                baseDao.execute("update prodiodetail set pd_whid=(select wh_id from warehouse where wh_code=pd_whcode) where pd_piid=" + piid
+                        + " and nvl(pd_whcode,' ')<>' '");
+                baseDao.updateByCondition("ProdInOut",
+                        "pi_total=(SELECT round(sum(nvl(pd_orderprice,0)*(nvl(pd_inqty,0)+nvl(pd_outqty,0))),2) FROM ProdIODetail WHERE pd_piid="
+                                + piid + ")", "pi_id=" + piid);
+                baseDao.updateByCondition("ProdInOut", "pi_totalupper=L2U(nvl(pi_total,0))", "pi_id=" + piid);
+                baseDao.execute("Insert into ProdChargeDetail(pd_id,pd_piid,pd_detno,pd_type,pd_amount,pd_currency,pd_rate) "
+                        + "select ProdChargeDetail_seq.nextval, " + piid + ", pd_detno, pd_type,pd_amount,pd_currency,pd_rate "
+                        + "from ProdChargeDetailAN where PD_ANID=" + vaid);
+                // 修改收料状态
+                baseDao.updateByCondition("VerifyApply", "va_turnstatuscode='TURNIN',va_turnstatus='已入库'", "va_id=" + vaid);
+            }
+            //
+            if (piid != 0) {
+                SqlRowList rs = baseDao.queryForRowSet("select vad_pucode,vad_pudetno,vad_qty from VerifyApplyDetail where vad_vaid=" + vaid);
+                String pCode = null;
+                int pDetno = 0;
+                double yq = 0;
+                Set<String> pCodes = new HashSet<String>();
+                while (rs.next()) {
+                    pCode = rs.getString("vad_pucode");
+                    if (!pCodes.contains(pCode)) {
+                        pCodes.add(pCode);
+                    }
+                    pDetno = rs.getInt("vad_pudetno");
+                    yq = rs.getDouble("vad_qty");
+                    baseDao.updateByCondition("PurchaseDetail", "pd_status='PART2IN'", "pd_code='" + pCode + "' and pd_detno=" + pDetno);
+                    baseDao.updateByCondition("PurchaseDetail", "pd_status='TURNIN'", "pd_code='" + pCode + "' and pd_detno=" + pDetno
+                            + " and pd_qty=" + yq);
+                }
+                Iterator<String> iter = pCodes.iterator();
+                while (iter.hasNext()) {
+                    pCode = iter.next();
+                    int total = baseDao.getCountByCondition("PurchaseDetail", "pd_code='" + pCode + "'");
+                    int aud = baseDao.getCountByCondition("PurchaseDetail", "pd_code='" + pCode + "' AND nvl(pd_acceptqty,0)=0");
+                    int turn = baseDao.getCountByCondition("PurchaseDetail", "pd_code='" + pCode
+                            + "' AND nvl(pd_acceptqty,0)=nvl(pd_qty,0)");
+                    String statuscode = aud == total ? "" : (turn == total ? "TURNIN" : "PART2IN");
+                    String status = aud == total ? "" : (turn == total ? "已入库" : "部分入库");
+                    baseDao.updateByCondition("Purchase",
+                            "pu_turnstatuscode='" + statuscode + "',pu_turnstatus='" + status + "'", "pu_code='" + pCode + "'");
+                }
+            }
+            return ApiResponse.successRsp("0",request.getHeader("RequestId"),"入库成功");
+        }
+    }
+
+    @Override
+    public ApiResult<String> prodInOutMakeIn(HttpServletRequest request,String data) {
+        JSONObject jsonObject = JSON.parseObject(data);
+        Object data1 = jsonObject.get("Data");
+        JSONObject jsonObject1 = JSON.parseObject(StringUtil.nvl(data1,""));
+        Object page1 = jsonObject1.get("Page1");
+        Object page2 = jsonObject1.get("Page2");
+        JSONArray jsonArray = JSON.parseArray(StringUtil.nvl(page1, ""));
+        int id=0;
+        String code="";
+        List<String> sqls = new ArrayList<>();
+        for (int i = 0; i <jsonArray.size() ; i++) {
+            Object obj = jsonArray.get(i);
+            JSONObject jsonObject2 = JSON.parseObject(StringUtil.nvl(obj, ""));
+            Map<Object, Object> map4 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FDCStockID")));
+            Map<Object, Object> map5 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FDeptID")));
+            Map<Object, Object> map6 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FFManagerID")));
+            Map<Object, Object> map7 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FSManagerID")));
+            Map<Object, Object> map8 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FBillerID")));
+            id = baseDao.getSeqId("PRODINOUT_SEQ");
+            code = baseDao.sGetMaxNumber("ProdInOut!Make!In", 2);
+            sqls.add("insert into prodinout (pi_id,pi_inoutno,pi_class,pi_date,pi_statuscode,pi_status,pi_whcode," +
+                    "pi_whname,pi_departmentcode,pi_departmentname,pi_emcode,pi_emname,pi_invostatuscode,pi_invostatus," +
+                    "pi_recordman,pi_recorddate,pi_printstatuscode,pi_printstatus) " +
+                    "values ("+id+",'"+code+"','完工入库单',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPOST'," +
+                    "'未过账','"+map4.get("FNumber")+"','"+map4.get("FName")+"','"+map5.get("FNumber")+"','"+map5.get("FName")+"','"+map6.get("FNumber")+"','"+map7.get("FName")+"','ENTERING','在录入'," +
+                    "'"+map8.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印')");
+        }
+        JSONArray jsonArray1 = JSON.parseArray(StringUtil.nvl(page2, ""));
+        int detno=0;
+        for (int i = 0; i <jsonArray1.size() ; i++) {
+            detno=i+1;
+            Object obj = jsonArray1.get(i);
+            JSONObject jsonObject3 = JSON.parseObject(StringUtil.nvl(obj, ""));
+            Map<Object, Object> map11 = JSONUtil.toMap(StringUtil.valueOf(jsonObject3.get("FItemID")));
+            Map<Object, Object> map12 = JSONUtil.toMap(StringUtil.valueOf(jsonObject3.get("FDCStockID1")));
+            String fBatchNo = StringUtil.nvl(jsonObject3.get("FBatchNo"), "");
+            float fauxqty = jsonObject3.get("Fauxqty") == null ? 0 : Float.parseFloat(jsonObject3.get("Fauxqty").toString());
+            String fSecUnitID = StringUtil.nvl(jsonObject3.get("FSecUnitID"), "");
+            float fSecCoefficient = jsonObject3.get("FSecCoefficient") == null ? 0 : Float.parseFloat(jsonObject3.get("FSecCoefficient").toString());
+            float fSecQty = jsonObject3.get("FSecQty") == null ? 0 : Float.parseFloat(jsonObject3.get("FSecQty").toString());
+            float fAuxPlanPrice = jsonObject3.get("FAuxPlanPrice") == null ? 0 : Float.parseFloat(jsonObject3.get("FAuxPlanPrice").toString());
+            float fPlanAmount = jsonObject3.get("FPlanAmount") == null ? 0 : Float.parseFloat(jsonObject3.get("FPlanAmount").toString());
+            float fauxprice = jsonObject3.get("Fauxprice") == null ? 0 : Float.parseFloat(jsonObject3.get("Fauxprice").toString());
+            float famount = jsonObject3.get("Famount") == null ? 0 : Float.parseFloat(jsonObject3.get("Famount").toString());
+            String fnote = StringUtil.nvl(jsonObject3.get("Fnote"), "");
+            String fKFDate = StringUtil.nvl(jsonObject3.get("FKFDate"), "");
+            String fPeriodDate = StringUtil.nvl(jsonObject3.get("FPeriodDate"), "");
+            int fDCSPID = jsonObject3.get("FDCSPID") == null ? 0 : Integer.parseInt(jsonObject3.get("FDCSPID").toString());
+            Object location="";
+            if (fDCSPID>0){
+                location = baseDao.getFieldDataByCondition("ProductLocation", "pl_name", "pl_id=" + fDCSPID);
+            }
+            String fSourceBillNo = StringUtil.nvl(jsonObject3.get("FSourceBillNo"), "");
+            String fICMOBillNo = StringUtil.nvl(jsonObject3.get("FICMOBillNo"), "");
+            sqls.add("insert into prodiodetail (pd_id,pd_piid,pd_inoutno,pd_piclass,pd_pdno,pd_ordercode,pd_prodcode," +
+                    "pd_batchcode,pd_inqty,pd_nxlh,pd_purcrate,pd_notinqty,pd_orderprice,pd_ordertotal,pd_price," +
+                    "pd_total,pd_whcode,pd_whname,pd_remark,pd_prodmadedate,pd_replydate,pd_location,pd_macode) " +
+                    "values (PRODIODETAIL_SEQ.nextval,"+id+",'"+code+"','完工入库单',"+detno+",'"+fSourceBillNo+
+                    "','"+map11.get("FNumber")+"','"+fBatchNo+"',"+fauxqty+",'"+fSecUnitID+"',"+fSecCoefficient+","+fSecQty+","+fAuxPlanPrice+","+fPlanAmount+","+fauxprice+"," +
+                    ""+famount+",'"+map12.get("FNumber")+"','"+map12.get("FName")+"','"+fnote+"',to_date('"+fKFDate+"'," +
+                    "'yyyy-MM-dd HH24:mi:ss'),to_date('"+fPeriodDate+"','yyyy-MM-dd HH24:mi:ss'),'"+location+"','"+fICMOBillNo+"')");
+        }
+        baseDao.execute(sqls);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"完工入库单:"+code+",请在ERP查看!");
+    }
+
+    @Override
+    public ApiResult<String> makeDeleteCheck(HttpServletRequest request,String data) {
+        Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
+        Object maId = store.get("finterid");
+        // 只能删除在录入的单据!
+        SqlRowList status =
+                baseDao.queryForRowSet("select ma_statuscode,ma_checkstatuscode from make where ma_id="+maId);
+        if (status.next()) {
+            if (!status.getString("ma_statuscode").equals("ENTERING") && (status.getString("ma_checkstatuscode").equals("APPROVE") || status.getString("ma_checkstatuscode").equals("COMMITED"))) {
+                return ApiResponse.failRsp("10015",request.getHeader("RequestId"),"只能删除在录入且批准状态不等于已批准或已提交的工单");
+            }
+        }
+        // 启用工厂模式 有对应的作业单 制造单不能删除
+        if (baseDao.isDBSetting("sys","usingMakeCraft")) {
+            int count = baseDao.getCount("Select count(1) from makecraft left join make on mc_makecode=ma_code where ma_id=" + maId);
+            if (count > 0) {
+                return ApiResponse.failRsp("10016",request.getHeader("RequestId"),"当前工单存在作业单,不能删除");
+            }
+        }
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"校验通过!");
+    }
+
+    @Override
+    public ApiResult<String> initMakeScrap(HttpServletRequest request, String data) {
+        JSONObject jsonObject = JSON.parseObject(data);
+        List<String> sqls = new ArrayList<>();
+        int id = baseDao.getSeqId("MAKESCRAP_SEQ");
+        String code = baseDao.sGetMaxNumber("MakeScrap", 2);
+        String fdateTime = StringUtil.nvl(jsonObject.get("FdateTime"),DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+        String fwcCode = StringUtil.nvl(jsonObject.get("FwcCode"), "");
+        if ("".equals(fwcCode)){
+            return ApiResponse.failRsp("10021",request.getHeader("RequestId"),"工作中心不能为空!");
+        }
+        String createdUser = StringUtil.nvl(jsonObject.get("createdUser"), "管理员");
+        String createdDateTime = StringUtil.nvl(jsonObject.get("createdDateTime"),DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+        String companyNo = StringUtil.nvl(jsonObject.get("companyNo"), "BYT");
+        String fremark = StringUtil.nvl(jsonObject.get("Fremark"), "");
+        sqls.add("insert into MakeScrap (ms_id,ms_code,ms_class,ms_statuscode,ms_status,ms_printstatuscode,ms_printstatus," +
+                "ms_date,ms_wccode,ms_recordman,ms_indate,ms_cop,ms_remark) values ("+id+",'"+code+"','生产报废单','ENTERING'," +
+                "'在录入','UNPRINT','未打印',to_date('"+fdateTime+"','yyyy-MM-dd HH24:mi:ss'),'"+fwcCode+"','"+createdUser+
+                "',to_date('"+createdDateTime+"','yyyy-MM-dd HH24:mi:ss'),'"+companyNo+"','"+fremark+"')");
+        String detail = StringUtil.nvl(jsonObject.get("detail"), "[{}]");
+        JSONArray jsonArray = JSON.parseArray(detail);
+        int detno=1;
+        for (int i = 0; i <jsonArray.size(); i++) {
+            JSONObject object = JSON.parseObject(StringUtil.nvl(jsonArray.get(i), "{}"));
+            String lineId = StringUtil.nvl(object.get("lineId"), "");
+            if ("".equals(lineId)){
+                return ApiResponse.failRsp("10022",request.getHeader("RequestId"),"工单明细ID不能为空!");
+            }
+            String prodNo = StringUtil.nvl(object.get("prodNo"), "");
+            if ("".equals(prodNo)){
+                return ApiResponse.failRsp("10023",request.getHeader("RequestId"),"工单单号不能为空!");
+            }
+            String prodDetno = StringUtil.nvl(object.get("prodDetno"), "");
+            if ("".equals(prodDetno)){
+                return ApiResponse.failRsp("10024",request.getHeader("RequestId"),"工单行号不能为空!");
+            }
+            String itemNo = StringUtil.nvl(object.get("itemNo"), "");
+            if ("".equals(itemNo)){
+                return ApiResponse.failRsp("10024",request.getHeader("RequestId"),"物料不能为空!");
+            }
+            String qty = StringUtil.nvl(object.get("qty"), "");
+            if ("".equals(qty)){
+                return ApiResponse.failRsp("10025",request.getHeader("RequestId"),"报废数量不能为空!");
+            }
+            String reason = StringUtil.nvl(object.get("reason"), "");
+            if ("".equals(reason)){
+                return ApiResponse.failRsp("10026",request.getHeader("RequestId"),"报废原因不能为空!");
+            }
+            String fDeptID = StringUtil.nvl(object.get("FDeptID"), "");
+            if ("".equals(fDeptID)){
+                return ApiResponse.failRsp("10027",request.getHeader("RequestId"),"责任部门编号不能为空!");
+            }
+            String fDept = StringUtil.nvl(object.get("FDept"), "");
+            if ("".equals(fDept)){
+                return ApiResponse.failRsp("10028",request.getHeader("RequestId"),"责任部门不能为空!");
+            }
+
+            String allScrapQty = StringUtil.nvl(object.get("AllScrapQty"), "0");
+            String remark = StringUtil.nvl(object.get("remark"), "");
+            sqls.add("insert into MakeScrapdetail (md_id,md_msid,md_detno,md_mmid,md_mmcode,md_mmdetno,md_prodcode," +
+                    "md_qty,md_reason,md_department,md_departmentname,md_allscrapqty,md_remark) values " +
+                    "(MAKESCRAPDETAIL_SEQ.nextval,"+id+","+detno+","+lineId+",'"+prodNo+"',"+prodDetno+",'"+itemNo+
+                    "',"+qty+",'"+reason+"','"+fDeptID+"','"+fDept+"',"+allScrapQty+",'"+remark+"')");
+            detno++;
+        }
+        baseDao.execute(sqls);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"生产报废单:"+code+",请在ERP查看!");
+    }
+
+}

+ 49 - 0
src/main/java/com/uas/eis/service/MESService.java

@@ -0,0 +1,49 @@
+package com.uas.eis.service;
+
+import com.uas.eis.sdk.entity.ApiResult;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-07 15:38
+ */
+public interface MESService {
+
+    /**
+     * 获取ERP收料单
+     * @param data
+     * @return
+     */
+    ApiResult<String> checkVerifyApply(HttpServletRequest request, String data);
+
+    /**
+     * 确认入库
+     * @param data
+     * @return
+     */
+    ApiResult<String> purcCheckin(HttpServletRequest request,String data);
+
+    /**
+     * 成品半成品入库
+     * @param data
+     * @return
+     */
+    ApiResult<String> prodInOutMakeIn(HttpServletRequest request,String data);
+
+    /**
+     * 工单删除校验接口
+     * @param data
+     * @return
+     */
+    ApiResult<String> makeDeleteCheck(HttpServletRequest request,String data);
+
+    /**
+     * 报废单
+     * @param data
+     * @return
+     */
+    ApiResult<String> initMakeScrap(HttpServletRequest request,String data);
+
+}

+ 630 - 0
src/main/java/com/uas/eis/utils/TransferRepository.java

@@ -0,0 +1,630 @@
+package com.uas.eis.utils;
+
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.TransferDao;
+import com.uas.eis.dto.Key;
+import com.uas.eis.entity.Employee;
+import com.uas.eis.entity.Transfer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class TransferRepository {
+	private final static int maxSize = 100;
+	@Autowired
+	private TransferDao transferDao;
+
+	@Autowired
+	private BaseDao baseDao;
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param fromKeyValue
+	 *            来源数据ID
+	 * @return
+	 */
+	public Key transfer(String caller, Object fromKeyValue,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "MAIN");
+		if (transfer != null) {
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put(transfer.getTr_fromrowkey(), fromKeyValue);
+			int id = baseDao.getSeqId(transfer.getTr_totable() + "_SEQ");
+			String code = null;
+			if (StringUtil.hasText(transfer.getTr_tocodekey()) && StringUtil.hasText(transfer.getTr_tocodecaller()))
+				code = baseDao.sGetMaxNumber(transfer.getTr_tocodecaller(), 2);
+			Key key = new Key(id, code);
+			baseDao.execute(getTransferSql(transfer, params, key,employee));
+			return key;
+		}
+		return null;
+	}
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param params
+	 *            额外参数
+	 * @param fromKeyValue
+	 *            来源数据ID
+	 * @return
+	 */
+	public Key transfer(String caller, Map<String, Object> params, Object fromKeyValue,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "MAIN");
+		if (transfer != null) {
+			if (params == null)
+				params = new HashMap<String, Object>();
+			params.put(transfer.getTr_fromrowkey(), fromKeyValue);
+			int id = baseDao.getSeqId(transfer.getTr_totable() + "_SEQ");
+			String code = null;
+			if (StringUtil.hasText(transfer.getTr_tocodekey()) && StringUtil.hasText(transfer.getTr_tocodecaller()))
+				code = baseDao.sGetMaxNumber(transfer.getTr_tocodecaller(), 2);
+			Key key = new Key(id, code);
+			baseDao.execute(getTransferSql(transfer, params, key,employee));
+			return key;
+		}
+		return null;
+	}
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param fromKeyValue
+	 *            来源数据ID
+	 * @param key
+	 *            id、code参数
+	 * @return
+	 */
+	public void transfer(String caller, Object fromKeyValue, Key key,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "MAIN");
+		if (transfer != null) {
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put(transfer.getTr_fromrowkey(), fromKeyValue);
+			params.put(transfer.getTr_torowkey(), key.getId());
+			if (StringUtil.hasText(transfer.getTr_tocodekey())) {
+				params.put(transfer.getTr_tocodekey(), key.getCode());
+			}
+			baseDao.execute(getTransferSql(caller, params,employee));
+		}
+	}
+
+	/**
+	 * 转单:单行数据、明细记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param fromKeyValue
+	 *            来源数据ID
+	 * @param key
+	 *            id、code参数
+	 * @return
+	 */
+	public void transferDetail(String caller, Object fromKeyValue, Key key,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "DETAIL");
+		if (transfer != null) {
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put(transfer.getTr_fromdockey(), fromKeyValue);
+			params.put(transfer.getTr_torowforkey(), key.getId());
+			if (StringUtil.hasText(transfer.getTr_tocodekey())) {
+				params.put(transfer.getTr_tocodekey(), key.getCode());
+			}
+			baseDao.execute(getTransferSql(transfer, params,employee));
+			StringBuffer sql = new StringBuffer();
+			String docField = transfer.getTr_fromdockey();
+			String rowNum = transfer.getTr_fromrownum();
+			String pageCaller = transfer.getTr_pagecaller();
+			if (pageCaller == null)
+				pageCaller = transfer.getTr_caller();
+			if (docField == null)
+				docField = transfer.getTr_fromrowkey();
+			String rowYQ = transfer.getTr_fromrowyqty();
+			// 改已转数
+			if (StringUtil.hasText(rowYQ) && StringUtil.hasText(transfer.getTr_fromrowqty()))
+				sql.append("UPDATE ").append(transfer.getTr_fromtabledet()).append(" SET ").append(rowYQ).append("=nvl(").append(rowYQ)
+						.append(",0)+").append(transfer.getTr_fromrowqty()).append(" WHERE ").append(transfer.getTr_fromrowkey())
+						.append(" in (select ").append(transfer.getTr_fromrowkey()).append(" from ").append(transfer.getTr_fromtablesql())
+						.append(" where ").append(docField).append("=").append(fromKeyValue).append(")");
+			// 日志
+			if (StringUtil.hasText(rowNum)) {
+				if (sql.length() > 0)
+					sql.append(";");
+				sql.append("INSERT INTO messagelog(ml_date,ml_man,ml_content,ml_result,ml_search) select sysdate,'")
+						.append(employee.getEm_name()).append("','").append(transfer.getTr_title()).append("','行'||")
+						.append(transfer.getTr_fromrownum()).append(",'").append(pageCaller).append("|").append(docField).append("=")
+						.append(fromKeyValue).append("' from ").append(transfer.getTr_fromtablesql()).append(" where ").append(docField)
+						.append("=").append(fromKeyValue).append(";");
+			}
+			baseDao.execute("begin " + sql.toString() + " commit;end;");
+		}
+	}
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param params
+	 *            额外参数
+	 * @return
+	 */
+	public void transfer(String caller, Map<String, Object> params,Employee employee) {
+		baseDao.execute(getTransferSql(caller, params,employee));
+	}
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param params
+	 *            额外参数
+	 * @return
+	 */
+	public String getTransferSql(String caller, Map<String, Object> params,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "MAIN");
+		return getTransferSql(transfer, params,employee);
+	}
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param transfer
+	 *            转单配置
+	 * @param params
+	 *            额外参数
+	 * @return
+	 */
+	public String getTransferSql(Transfer transfer, Map<String, Object> params,Employee employee) {
+		StringBuffer sqlInsert = new StringBuffer("INSERT INTO ");
+		sqlInsert.append(transfer.getTr_totable()).append("(");
+		StringBuffer sqlValues = new StringBuffer(" SELECT ");
+		int i = 0;
+		for (Transfer.Detail detail : transfer.getDetails()) {
+			if (i > 0) {
+				sqlInsert.append(",");
+				sqlValues.append(",");
+			} else
+				i++;
+			sqlInsert.append(detail.getTd_tofield());
+			String fromTab = detail.getTd_fromtable();
+			String fromField = detail.getTd_fromfield();
+			if (StringUtil.hasText(fromTab)) {
+				if ("@user".equals(fromTab)) {
+					Object userInfo = "";
+					if ("em_id".equals(fromField)) {
+						userInfo = employee.getEm_id();
+					} else if ("em_code".equals(fromField)) {
+						userInfo = employee.getEm_code();
+					} else if ("em_name".equals(fromField)) {
+						userInfo = employee.getEm_name();
+					}
+					sqlValues.append("'").append(userInfo).append("'");
+				} else if ("@param".equals(fromTab)) {
+					if (params.containsKey(detail.getTd_fromfield()))
+						sqlValues.append("'").append(params.get(detail.getTd_fromfield())).append("'");
+					else
+						sqlValues.append("null");
+				} else
+					sqlValues.append(fromTab).append(".").append(fromField);
+			} else
+				sqlValues.append(fromField);
+		}
+		// 新数据主键
+		String toKey = transfer.getTr_torowkey();
+		if (params.containsKey(toKey)) {
+			sqlInsert.append(",").append(toKey);
+			sqlValues.append(",").append(params.get(toKey));
+		}
+		if ("DETAIL".equals(transfer.getTr_mode())) {
+			String toForKey = transfer.getTr_torowforkey();
+			if (params.containsKey(toForKey)) {
+				sqlInsert.append(",").append(toForKey);
+				sqlValues.append(",").append(params.get(toForKey));
+			}
+			if (!params.containsKey(toKey)) {
+				sqlInsert.append(",").append(toKey);
+				sqlValues.append(",").append(transfer.getTr_totable()).append("_SEQ.NEXTVAL");
+			}
+			String toRowNum = transfer.getTr_torownum();
+			if (toRowNum != null) {
+				Object detno = "rownum";
+				if (params.containsKey(toRowNum)) {
+					detno = params.get(toRowNum);
+				}
+				sqlInsert.append(",").append(toRowNum);
+				sqlValues.append(",").append(detno);
+			}
+		}
+		// 新数据编号
+		String toCode = transfer.getTr_tocodekey();
+		if (StringUtil.hasText(toCode)) {
+			sqlInsert.append(",").append(toCode);
+			Object code = params.get(toCode);
+			sqlValues.append(",'").append(code).append("'");
+		}
+		sqlInsert.append(")");
+		String fromKey = transfer.getTr_fromdockey();
+		if (!StringUtil.hasText(fromKey)) {
+			fromKey = transfer.getTr_fromrowkey();
+		}
+		sqlValues.append(" FROM ").append(transfer.getTr_fromtablesql()).append(" WHERE ").append(fromKey).append("='")
+				.append(params.get(fromKey)).append("'");
+		return sqlInsert.append(sqlValues).toString();
+	}
+
+	/**
+	 * 转单:单行数据、主记录
+	 * 
+	 * @param transfer
+	 *            转单配置
+	 * @param params
+	 *            额外参数
+	 * @param key
+	 *            ID和CODE
+	 * @return
+	 */
+	public String getTransferSql(Transfer transfer, Map<String, Object> params, Key key,Employee employee) {
+		StringBuffer sqlInsert = new StringBuffer("INSERT INTO ");
+		sqlInsert.append(transfer.getTr_totable()).append("(");
+		StringBuffer sqlValues = new StringBuffer(" SELECT ");
+		int i = 0;
+		for (Transfer.Detail detail : transfer.getDetails()) {
+			if (i > 0) {
+				sqlInsert.append(",");
+				sqlValues.append(",");
+			} else
+				i++;
+			sqlInsert.append(detail.getTd_tofield());
+			String fromTab = detail.getTd_fromtable();
+			String fromField = detail.getTd_fromfield();
+			if (StringUtil.hasText(fromTab)) {
+				if ("@user".equals(fromTab)) {
+					Object userInfo = "";
+					if ("em_id".equals(fromField)) {
+						userInfo = employee.getEm_id();
+					} else if ("em_code".equals(fromField)) {
+						userInfo = employee.getEm_code();
+					} else if ("em_name".equals(fromField)) {
+						userInfo = employee.getEm_name();
+					} else if ("em_departmentcode".equals(fromField)) { // 为主动报价单转价格单添加部门名称
+						userInfo = employee.getEm_departmentcode();
+					} else if ("em_departmentname".equals(fromField)) {
+						userInfo = employee.getEm_depart();
+					}
+					sqlValues.append("'").append(userInfo).append("'");
+				} else if ("@param".equals(fromTab)) {
+					sqlValues.append("'").append(params.get(detail.getTd_fromfield())).append("'");
+				} else
+					sqlValues.append(fromTab).append(".").append(fromField);
+			} else
+				sqlValues.append(fromField);
+		}
+		// 新数据主键
+		String toKey = transfer.getTr_torowkey();
+		if (toKey != null && (params.containsKey(toKey) || key != null)) {
+			sqlInsert.append(",").append(toKey);
+			Object toKeyValue = params.get(toKey);
+			if (key != null)
+				toKeyValue = key.getId();
+			sqlValues.append(",").append(toKeyValue);
+		}
+		if ("DETAIL".equals(transfer.getTr_mode())) {
+			String toForKey = transfer.getTr_torowforkey();
+			if (params.containsKey(toForKey)) {
+				sqlInsert.append(",").append(toForKey);
+				sqlValues.append(",").append(params.get(toForKey));
+			}
+			if (!params.containsKey(toKey)) {
+				sqlInsert.append(",").append(toKey);
+				sqlValues.append(",").append(transfer.getTr_totable()).append("_SEQ.NEXTVAL");
+			}
+			String toRowNum = transfer.getTr_torownum();
+			if (toRowNum != null) {
+				Object detno = 1;
+				if (params.containsKey(toRowNum)) {
+					detno = params.get(toRowNum);
+				}
+				sqlInsert.append(",").append(toRowNum);
+				sqlValues.append(",").append(detno);
+			}
+		}
+		// 新数据编号
+		String toCode = transfer.getTr_tocodekey();
+		if (StringUtil.hasText(toCode)) {
+			sqlInsert.append(",").append(toCode);
+			Object code = params.get(toCode);
+			if (key != null && key.getCode() != null)
+				code = key.getCode();
+			sqlValues.append(",'").append(code).append("'");
+		}
+		sqlInsert.append(")");
+		String fromKey = transfer.getTr_fromrowkey();
+		if (!StringUtil.hasText(fromKey)) {
+			fromKey = transfer.getTr_fromdockey();
+		}
+		sqlValues.append(" FROM ").append(transfer.getTr_fromtablesql()).append(" WHERE ").append(fromKey).append("='")
+				.append(params.get(fromKey)).append("'");
+		return sqlInsert.append(sqlValues).toString();
+	}
+
+	/**
+	 * 转单:更新单行数据、主记录
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param fromKeyValue
+	 *            来源数据ID
+	 * @param toKeyValue
+	 *            新数据ID
+	 * @return
+	 */
+	public void update(String caller, Object fromKeyValue, Object toKeyValue) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "MAIN");
+		if (transfer != null)
+			baseDao.execute(getUpdateSql(transfer, fromKeyValue, toKeyValue));
+	}
+
+	public String getUpdateSql(Transfer transfer, Object fromKeyVal, Object toKeyVal) {
+		StringBuffer sqlUpdate = new StringBuffer("UPDATE ");
+		sqlUpdate.append(transfer.getTr_totable()).append(" SET (");
+		StringBuffer sqlSelect = new StringBuffer(" SELECT ");
+		int i = 0;
+		for (Transfer.Detail detail : transfer.getDetails()) {
+			String fromTab = detail.getTd_fromtable();
+			String fromField = detail.getTd_fromfield();
+			if (StringUtil.hasText(fromTab) && !"@user".equals(fromTab) && !"@param".equals(fromTab)) {
+				if (i > 0) {
+					sqlUpdate.append(",");
+					sqlSelect.append(",");
+				} else
+					i++;
+				sqlUpdate.append(detail.getTd_tofield());
+				sqlSelect.append(fromTab).append(".").append(fromField);
+			}
+		}
+		sqlUpdate.append(")");
+		String fromKey = transfer.getTr_fromrowkey();
+		if (!StringUtil.hasText(fromKey)) {
+			fromKey = transfer.getTr_fromdockey();
+		}
+		sqlSelect.append(" FROM ").append(transfer.getTr_fromtablesql()).append(" WHERE ").append(fromKey).append("='").append(fromKeyVal)
+				.append("'");
+		sqlUpdate.append(" = (").append(sqlSelect).append(") WHERE ").append(transfer.getTr_torowkey()).append("='").append(toKeyVal)
+				.append("'");
+		return sqlUpdate.toString();
+	}
+
+	/**
+	 * 转单:多行数据、明细<br>
+	 * 自动记录日志<br>
+	 * 自动修改已转数
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param dataList
+	 *            待转明细数据
+	 * @param params
+	 *            额外参数
+	 * @return
+	 */
+	public void transfer(String caller, List<Map<Object, Object>> dataList, Map<String, Object> params,Employee employee) {
+		baseDao.execute(getTransferSql(caller, dataList, params,employee));
+	}
+
+	/**
+	 * 转单:多行数据、明细<br>
+	 * 自动记录日志<br>
+	 * 自动修改已转数
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param dataList
+	 *            待转明细数据
+	 * @param key
+	 *            id、code参数
+	 * @return
+	 */
+	public void transfer(String caller, List<Map<Object, Object>> dataList, Key key,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "DETAIL");
+		if (transfer != null) {
+			Map<String, Object> params = new HashMap<String, Object>();
+			if (StringUtil.hasText(transfer.getTr_torowforkey())) {
+				params.put(transfer.getTr_torowforkey(), key.getId());
+			}
+			if (StringUtil.hasText(transfer.getTr_tocodekey())) {
+				params.put(transfer.getTr_tocodekey(), key.getCode());
+			}
+			if (dataList.size() > maxSize) {
+				int digit = dataList.size() % maxSize, page = 0;
+				for (page = 0; page < dataList.size() / maxSize; page++) {
+					long t1 = System.currentTimeMillis();
+					String sql = getTransferSql(caller, dataList.subList(page * maxSize, (page + 1) * maxSize), params,employee);
+					long t2 = System.currentTimeMillis();
+					System.out.println("generate sql " + (t2 - t1));
+					baseDao.execute(sql);
+					System.out.println("execute sql " + (System.currentTimeMillis() - t2));
+				}
+				if (digit > 0)
+					baseDao.execute(getTransferSql(caller, dataList.subList(page * maxSize, dataList.size()), params, employee));
+			} else {
+				long t1 = System.currentTimeMillis();
+				String sql = getTransferSql(caller, dataList, params,employee);
+				long t2 = System.currentTimeMillis();
+				System.out.println("generate sql " + (t2 - t1));
+				System.out.println(sql);
+				baseDao.execute(sql);
+				System.out.println("execute sql " + (System.currentTimeMillis() - t2));
+			}
+		}
+	}
+
+	/**
+	 * 转单:多行数据、明细<br>
+	 * 自动记录日志<br>
+	 * 自动修改已转数
+	 * 
+	 * @param caller
+	 *            转单方案caller
+	 * @param dataList
+	 *            待转明细数据
+	 * @param params
+	 *            额外参数
+	 * @return
+	 */
+	public String getTransferSql(String caller, List<Map<Object, Object>> dataList, Map<String, Object> params,Employee employee) {
+		Transfer transfer = transferDao.getTransfer(SpObserver.getSp(), caller, "DETAIL");
+		return getTransferSql(transfer, dataList, params,employee);
+	}
+
+	/**
+	 * 转单:多行数据、明细<br>
+	 * 自动记录日志<br>
+	 * 自动修改已转数
+	 * 
+	 * @param transfer
+	 *            转单配置
+	 * @param dataList
+	 *            待转明细数据
+	 * @param params
+	 *            额外参数
+	 * @return
+	 */
+	public String getTransferSql(Transfer transfer, List<Map<Object, Object>> dataList, Map<String, Object> params,Employee employee) {
+		String pageCaller = transfer.getTr_pagecaller();
+		if (pageCaller == null)
+			pageCaller = transfer.getTr_caller();
+		// 预定义源单据字段、转入单据
+		StringBuffer sql = new StringBuffer("DECLARE ");
+		sql.append("v_object ").append(transfer.getTr_totable()).append("%rowtype;");
+		// 源主键,用于记录日志
+		sql.append("COL_X varchar2(64);");
+		StringBuffer sqlSelect = new StringBuffer();
+		StringBuffer sqlValues = new StringBuffer();
+		StringBuffer sqlObject = new StringBuffer();
+		sqlSelect.append(transfer.getTr_fromtable()).append(".").append(transfer.getTr_fromdockey());
+		sqlValues.append("COL_X");
+		String rowField = transfer.getTr_fromrowkey();
+		String rowNum = transfer.getTr_fromrownum();
+		String rowYQ = transfer.getTr_fromrowyqty();
+		// 源明细序号,用于记录日志
+		if (StringUtil.hasText(rowNum)) {
+			sqlSelect.append(",").append(transfer.getTr_fromtabledet()).append(".").append(rowNum);
+			sqlValues.append(",COL_Y");
+			sql.append("COL_Y number;");
+		}
+		int i = 0;
+		String aliaCol = null;
+		for (Transfer.Detail detail : transfer.getDetails()) {
+			String fromTab = detail.getTd_fromtable();
+			String fromField = detail.getTd_fromfield();
+			if (StringUtil.hasText(fromTab)) {
+				if (!"@param".equals(fromTab)) {
+					if ("@user".equals(fromTab)) {
+						Object userInfo = "";
+						if ("em_id".equals(fromField)) {
+							userInfo = employee.getEm_id();
+						} else if ("em_code".equals(fromField)) {
+							userInfo = employee.getEm_code();
+						} else if ("em_name".equals(fromField)) {
+							userInfo = employee.getEm_name();
+						}
+						sqlObject.append("v_object.").append(detail.getTd_tofield()).append(" := '").append(userInfo).append("';");
+					} else {
+						aliaCol = "COL_" + (i++);
+						sql.append(aliaCol).append(" ").append(fromTab).append(".").append(fromField).append("%type;");
+						sqlSelect.append(",").append(fromTab).append(".").append(fromField);
+						sqlValues.append(",").append(aliaCol);
+						sqlObject.append("v_object.").append(detail.getTd_tofield()).append(" := ").append(aliaCol).append(";");
+					}
+				}
+			} else {
+				sqlObject.append("v_object.").append(detail.getTd_tofield()).append(" := ").append(detail.getTd_fromfield()).append(";");
+			}
+		}
+		sql.append("BEGIN ");
+		// 初始序号
+		Integer num = 0;
+		String toNumField = transfer.getTr_torownum();
+		String toRowKey = transfer.getTr_torowkey();
+		String toRowForKey = transfer.getTr_torowforkey();
+		String toCodeKey = transfer.getTr_tocodekey();
+		if (StringUtil.hasText(toNumField)) {
+			if (params.containsKey(toNumField))
+				num = Integer.parseInt(params.get(toNumField).toString());
+			else if (StringUtil.hasText(toRowForKey) && params.containsKey(toRowForKey))
+				num = baseDao.getFieldValue(transfer.getTr_totable(), "nvl(max(" + toNumField + "),0)",
+						toRowForKey + "=" + params.get(toRowForKey), Integer.class);
+		}
+		for (Map<Object, Object> map : dataList) {
+			sql.append("SELECT ").append(sqlSelect).append(" INTO ").append(sqlValues).append(" FROM ")
+					.append(transfer.getTr_fromtablesql()).append(" WHERE ").append(rowField).append("='").append(map.get(rowField))
+					.append("';");
+			sql.append(sqlObject);
+			for (Transfer.Detail detail : transfer.getDetails()) {
+				if ("@param".equals(detail.getTd_fromtable())) {
+					Object val = "";
+					if (map.containsKey(detail.getTd_fromfield()))
+						val = map.get(detail.getTd_fromfield());
+					else
+						val = params.get(detail.getTd_fromfield());
+					val = val == null ? "" : val;
+					String format = null;
+					if (val.toString().matches(SqlUtil.REG_D))
+						format = "yyyy-mm-dd";
+					else if (val.toString().matches(SqlUtil.REG_DT))
+						format = "yyyy-mm-dd hh24:mi:ss";
+					if (format != null)
+						sql.append("v_object.").append(detail.getTd_tofield()).append(" := to_date('").append(val).append("','")
+								.append(format).append("');");
+					else
+						sql.append("v_object.").append(detail.getTd_tofield()).append(" := '").append(val).append("';");
+				}
+			}
+			// ID
+			if (StringUtil.hasText(toRowKey))
+				sql.append("v_object.").append(toRowKey).append(" := ").append(transfer.getTr_totable()).append("_SEQ.NEXTVAL;");
+			// 序号
+			if (StringUtil.hasText(toNumField))
+				sql.append("v_object.").append(toNumField).append(" := ").append(++num).append(";");
+			// 关联ID
+			if (StringUtil.hasText(toRowForKey))
+				sql.append("v_object.").append(toRowForKey).append(" := ").append(params.get(toRowForKey)).append(";");
+			// 编号
+			if (StringUtil.hasText(toCodeKey))
+				sql.append("v_object.").append(toCodeKey).append(" := '").append(params.get(toCodeKey)).append("';");
+			// 写入
+			sql.append("INSERT INTO ").append(transfer.getTr_totable()).append(" VALUES v_object;");
+			// 改已转数
+			if (StringUtil.hasText(rowYQ) && StringUtil.hasText(transfer.getTr_fromrowqty()))
+				sql.append("UPDATE ").append(transfer.getTr_fromtabledet()).append(" SET ").append(rowYQ).append("=nvl(").append(rowYQ)
+						.append(",0)+").append(map.get(transfer.getTr_fromrowqty())).append(" WHERE ").append(rowField).append("=")
+						.append(map.get(rowField)).append(";");
+			// 日志
+			sql.append("INSERT INTO messagelog(ml_date,ml_man,ml_content,ml_result,ml_search) values (sysdate,'")
+					.append(employee.getEm_name()).append("','").append(transfer.getTr_title()).append("','");
+			// 日志里面标注来源所在行、本次数量
+			if (StringUtil.hasText(rowNum)) {
+				sql.append("行'||COL_Y");
+				if (StringUtil.hasText(transfer.getTr_fromrowqty())) {
+					sql.append("||',数量'||").append(map.get(transfer.getTr_fromrowqty()));
+				}
+			} else
+				sql.append("转入成功'");
+			sql.append(",'").append(pageCaller).append("|").append(transfer.getTr_fromdockey()).append("='||COL_X);");
+		}
+		sql.append("END;");
+		return sql.toString();
+	}
+
+}