Merge remote-tracking branch 'origin/master'

master
杨万里 4 months ago
commit 86179dbd1d

@ -18,4 +18,12 @@ public interface RemoteEnergyService {
@PostMapping("/buildInfo/removeDatasource")
public R removeDatasource(@RequestBody DataSourcePropertyDTO dataSourceProperty);
@PostMapping(value = "/record/dnbInstant/getNhEnergy")
public R SyncNhEnergy();
@PostMapping(value = "/record/dnbInstant/getNhEnergyDetail")
public R SyncNhEnergyDetail();
}

@ -54,4 +54,7 @@ public interface RemoteMesService {
@PostMapping("/reportWorks/updateEquRunTime")
public R updateEquRunTime();
@PostMapping("/AttendanceRecords/syncHrAttendance")
public R syncHrAttendance();
}

@ -51,4 +51,19 @@ public interface RemoteOpenService {
@PostMapping("/openInterface/getDeliveryNoteDetail")
public AjaxResult getDeliveryNoteDetail(@RequestBody Map paramMap);
@PostMapping("/openInterface/getVoltageCurrent")
public AjaxResult getVoltageCurrent(@RequestBody Map<String,String> paramMap);
@PostMapping("/openInterface/getElectricPower")
public AjaxResult getElectricPower(@RequestBody Map<String,String> paramMap);
@PostMapping("/openInterface/getElectricQuantity")
public AjaxResult getElectricQuantity(@RequestBody Map<String,String> paramMap);
@PostMapping("/openInterface/getFrozenElectricity")
public AjaxResult getFrozenElectricity(@RequestBody Map<String,String> paramMap);
@PostMapping("/openInterface/getAttRecord")
public AjaxResult getAttRecord(@RequestBody Map<String,String> paramMap);
}

@ -26,6 +26,16 @@ public class RemoteEnergyFallbackFactory implements FallbackFactory<RemoteEnergy
public R removeDatasource(DataSourcePropertyDTO dataSourceProperty) {
return R.fail("mes数据源删除失败:" + throwable.getMessage());
}
@Override
public R SyncNhEnergy() {
return R.fail("同步整点数据失败:" + throwable.getMessage());
}
@Override
public R SyncNhEnergyDetail() {
return R.fail("同步电表实时数据失败:" + throwable.getMessage());
}
};
}
}

@ -82,6 +82,12 @@ public class RemoteMesFallbackFactory implements FallbackFactory<RemoteMesServic
return R.fail("+更新设备的运行时间失败:" + throwable.getMessage());
}
@Override
public R syncHrAttendance() {
return R.fail("+同步新hr系统的出勤记录失败:" + throwable.getMessage());
}
};
}

@ -67,6 +67,33 @@ public class RemoteOpenFallbackFactory implements FallbackFactory<RemoteOpenServ
public AjaxResult getDeliveryNoteDetail(Map paramMap) {
return AjaxResult.error("送货单获取失败:" + throwable.getMessage());
}
@Override
public AjaxResult getVoltageCurrent(Map<String, String> paramMap) {
return AjaxResult.error("获取电表电压电流失败:" + throwable.getMessage());
}
@Override
public AjaxResult getElectricPower(Map<String, String> paramMap) {
return AjaxResult.error("获取电表功率失败:" + throwable.getMessage());
}
@Override
public AjaxResult getElectricQuantity(Map<String, String> paramMap) {
return AjaxResult.error("获取电表电量失败:" + throwable.getMessage());
}
@Override
public AjaxResult getFrozenElectricity(Map<String, String> paramMap) {
return AjaxResult.error("获取电表冻结电量失败:" + throwable.getMessage());
}
@Override
public AjaxResult getAttRecord(Map<String, String> paramMap) {
return AjaxResult.error("获取人员打开记录失败:" + throwable.getMessage());
}
};
}
}

@ -261,4 +261,20 @@ public class DeviceInterfaceController {
}
}
/**
* 线
* @param equOperation
* @return
*/
@GetMapping("/getFaultRateList")
public AjaxResult getFaultRateList(EquOperation equOperation) {
DynamicDataSourceContextHolder.push(equOperation.getPoolName());
try {
return deviceInterfaceService.getFaultRateList();
}finally {
DynamicDataSourceContextHolder.poll();
}
}
}

@ -74,6 +74,12 @@ public class EquOrder extends BaseEntity {
@Excel(name = "循环周期类型")
private String planLoopType;
/**
*
* **/
@Excel(name = "点检结果")
private String checkResult;
/**
*
*/
@ -848,6 +854,14 @@ public class EquOrder extends BaseEntity {
public String getTimeDimension() { return timeDimension; }
public void setTimeDimension(String timeDimension) { this.timeDimension = timeDimension; }
public String getCheckResult() {
return checkResult;
}
public void setCheckResult(String checkResult) {
this.checkResult = checkResult;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

@ -0,0 +1,62 @@
package com.op.device.domain.vo;
import java.math.BigDecimal;
/**
* remark
*
* @author 019117
* @date
*/
public class EquFaultRateVO {
private String lineCode;
private String lineName;
private BigDecimal workTime;
private BigDecimal fixTime;
private BigDecimal faultRate;
public String getLineCode() {
return lineCode;
}
public void setLineCode(String lineCode) {
this.lineCode = lineCode;
}
public String getLineName() {
return lineName;
}
public void setLineName(String lineName) {
this.lineName = lineName;
}
public BigDecimal getWorkTime() {
return workTime;
}
public void setWorkTime(BigDecimal workTime) {
this.workTime = workTime;
}
public BigDecimal getFixTime() {
return fixTime;
}
public void setFixTime(BigDecimal fixTime) {
this.fixTime = fixTime;
}
public BigDecimal getFaultRate() {
return faultRate;
}
public void setFaultRate(BigDecimal faultRate) {
this.faultRate = faultRate;
}
}

@ -92,4 +92,7 @@ public interface DeviceInterfaceMapper {
Map getWave();
List<Map> getRepairWorkOrderCostTime();
List<EquFaultRateVO> getFaultRateList();
}

@ -110,4 +110,10 @@ public interface EquOrderStandardMapper {
//更新标准
void updateActualValues(EquOrderStandard standardList);
/**
*
* **/
int selectUnqualifiedCount(String orderCode);
}

@ -75,6 +75,8 @@ public interface IDeviceInterfaceService {
AjaxResult getWave();
AjaxResult getRepairWorkOrderCostTime();
AjaxResult getFaultRateList();
//
// AjaxResult getInspectionWorkOrder(EquOrder equOrder);
//

@ -2,7 +2,6 @@ package com.op.device.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.common.core.utils.DateUtils;
import com.op.common.core.utils.StringUtils;
import com.op.common.core.web.domain.AjaxResult;
import com.op.device.domain.*;
import com.op.device.domain.vo.*;
@ -312,4 +311,10 @@ public class DeviceInterfaceServiceImpl implements IDeviceInterfaceService {
List<Map> resultMap = deviceInterfaceMapper.getRepairWorkOrderCostTime();
return success(resultMap);
}
@Override
public AjaxResult getFaultRateList() {
//获取当天在生产的产线的故障率
return AjaxResult.success(deviceInterfaceMapper.getFaultRateList());
}
}

@ -1137,15 +1137,12 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
} else if (list.getFaultStartTime() != null) {
downStartTime = list.getFaultStartTime();
}
LocalDateTime downStart = LocalDateTime.ofInstant(downStartTime.toInstant(), zoneId);
LocalDateTime downEnd = LocalDateTime.ofInstant(equRepairWorkOrder.getWorkEndTime().toInstant(), zoneId);
LocalDateTime downDateTime = LocalDateTime.from(downStart);
double downHours = downDateTime.until(downEnd, ChronoUnit.HOURS);
double downMinutes = ((downDateTime.until(downEnd, ChronoUnit.MINUTES) * 1.0) % 60) / 60;
double downSeconds = ((downDateTime.until(downEnd, ChronoUnit.SECONDS) * 1.0) % 3600) / 3600;
double downHour = BigDecimal.valueOf(downHours + downMinutes + downSeconds).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
equRepairWorkOrder.setFaultDownTime(String.valueOf(downHour) + "小时");
Date workEndTime = equRepairWorkOrder.getWorkEndTime();
double diff = BigDecimal.valueOf((workEndTime.getTime() - downStartTime.getTime()))
.divide(BigDecimal.valueOf(3600000), 2, RoundingMode.HALF_UP)
.doubleValue();
equRepairWorkOrder.setFaultDownTime(diff + "小时");
}
//代码注释掉了 改了流程 之前是维修完成后,更改设备状态 和 设备运行报表 现在是审核通过之后,才会扣除

@ -188,6 +188,21 @@ public class EquOrderServiceImpl implements IEquOrderService {
// 获取工单列表
List<EquOrder> orderList = equOrderMapper.selectEquOrderList(equOrder);
for (EquOrder order : orderList) {
//获取点检结果
if ("0".equals(order.getOrderStatus())){
//未完成不获取结果
continue;
}
//获取不合格记录大于0则不合格
int unqualifiedCount = equOrderStandardMapper.selectUnqualifiedCount(order.getOrderCode());
if (unqualifiedCount > 0) {
order.setCheckResult("未达标");
} else {
order.setCheckResult("达标");
}
}
// 获取工作中心
List<WorkCenter> workCenters = getWorkCenterCommon();

@ -537,4 +537,64 @@
ORDER BY erwo.work_cost_time DESC;
</select>
<select id="getFaultRateList" resultType="com.op.device.domain.vo.EquFaultRateVO">
SELECT
lineCode,
lineName,
work_time,
fixTime,
faultRate
FROM
(
SELECT
a.lineCode,
a.lineName,
a.work_time,
b.fixTime,
CASE WHEN COALESCE ( a.work_time, 0 ) = 0 THEN NULL ELSE COALESCE ( b.fixTime, 0 ) / ( COALESCE ( a.work_time, 0 ) * 60.0 ) END AS faultRate
FROM
(
SELECT
a.workorder_name AS lineCode,
e.equipment_name AS lineName,
SUM ( b.work_time ) AS work_time
FROM pro_order_workorder a
LEFT JOIN mes_report_work b ON a.workorder_code = b.workorder_code AND a.workorder_name= b.machine_code
LEFT JOIN base_equipment e ON e.equipment_code = a.workorder_name
WHERE
b.work_time IS NOT NULL
AND b.parent_order = '0'
AND CONVERT ( VARCHAR ( 7 ), a.product_date, 23 ) = CONVERT ( VARCHAR ( 7 ), GETDATE( ), 23 )
AND a.status IN ( 'w2', 'w3' )
AND a.parent_order = '0'
AND b.del_flag= '0'
GROUP BY
a.workorder_name,
e.equipment_name
) a
LEFT JOIN (
SELECT
ae.equipment_code AS lineCode,
ae.equipment_name AS line_name,
SUM ( DATEDIFF( MINUTE, o.order_time, w.work_end_time ) ) AS fixTime
FROM
equ_repair_order o
LEFT JOIN equ_repair_work_order w ON w.order_id = o.order_id
LEFT JOIN base_equipment e ON e.equipment_code = o.equipment_code
LEFT JOIN equ_bind_auxiliary_equipment ae ON ae.auxiliary_equipment_code = e.equipment_code
WHERE
o.del_flag = 0
AND w.del_flag = 0
AND CONVERT ( VARCHAR ( 7 ), o.order_time, 23 ) = CONVERT ( VARCHAR ( 7 ), GETDATE( ), 23 )
GROUP BY
ae.equipment_code,
ae.equipment_name
) b ON a.lineCode = b.lineCode
) t
ORDER BY
faultRate ASC
</select>
</mapper>

@ -304,4 +304,15 @@
and del_flag = '0'
</update>
<select id="selectUnqualifiedCount" resultType="java.lang.Integer" parameterType="java.lang.String">
SELECT COUNT
( 0 )
FROM
equ_order_standard a
WHERE
a.order_code = #{orderCode}
AND a.del_flag = '0'
AND a.detail_reach = '0'
</select>
</mapper>

@ -183,6 +183,8 @@ public class BaseMonitorInfo extends BaseEntity {
private String businessName;
private String addressCode;
/**
*
*/
@ -461,6 +463,14 @@ public class BaseMonitorInfo extends BaseEntity {
this.publicShareType = publicShareType;
}
public String getAddressCode() {
return addressCode;
}
public void setAddressCode(String addressCode) {
this.addressCode = addressCode;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

@ -1,5 +1,6 @@
package com.op.energy.base.service.impl;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.common.core.exception.ServiceException;
import com.op.common.core.utils.DateUtils;
@ -93,6 +94,14 @@ public class BaseMonitorInfo1ServiceImpl implements IBaseMonitorInfo1Service {
System.out.println("新增计量设备信息异常:" + e.getMessage());
}
//判断该通信地址是否已绑定设备
BaseMonitorInfo temp = new BaseMonitorInfo();
temp.setAddressCode(baseMonitorInfo.getAddressCode());
List<BaseMonitorInfo> list = baseMonitorInfoMapper.selectBaseMonitorInfoList(temp);
if (!CollectionUtils.isEmpty(list)){
throw new ServiceException("通信地址重复:" + baseMonitorInfo.getAddressCode());
}
baseMonitorInfo.setCreateTime(DateUtils.getNowDate());
baseMonitorInfo.setCreateBy(SecurityUtils.getUsername());
return baseMonitorInfoMapper.insertBaseMonitorInfo(baseMonitorInfo);

@ -188,4 +188,26 @@ public class RecordDnbInstantController extends BaseController {
return AjaxResult.success(recordDnbInstantService.voltageCurrentCurve(baseDnbInstant));
}
/**
*
* **/
@PostMapping("/getNhEnergyDetail")
@ResponseBody
public AjaxResult getNhEnergyDetail() {
recordDnbInstantService.getNhEnergyDetail();
return AjaxResult.success();
}
/**
*
* **/
@PostMapping("/getNhEnergy")
@ResponseBody
public AjaxResult getNhEnergy() {
recordDnbInstantService.getNhEnergy();
return AjaxResult.success();
}
}

@ -85,4 +85,8 @@ public interface IRecordDnbInstantService {
RecordDnbInstant tablewareDetailsInfo(RecordDnbInstant dnbInstant);
List<RecordDnbInstant> voltageCurrentCurve(RecordDnbInstant baseDnbInstant);
void getNhEnergyDetail();
void getNhEnergy();
}

@ -1,24 +1,30 @@
package com.op.energy.record.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.op.common.core.text.Convert;
import com.op.common.core.utils.DateUtils;
import com.op.common.core.utils.StringUtils;
import com.op.common.core.web.domain.AjaxResult;
import com.op.energy.base.domain.BaseMonitorInfo;
import com.op.energy.base.mapper.BaseMonitorInfo1Mapper;
import com.op.energy.base.service.IBaseMonitorInfoService;
import com.op.energy.record.domain.RecordDnbInstant;
import com.op.energy.record.mapper.RecordDnbInstantMapper;
import com.op.energy.record.service.IRecordDnbInstantService;
import com.op.energy.report.domain.ReportPointDnb;
import com.op.energy.report.mapper.ReportPointDnbMapper;
import com.op.system.api.RemoteOpenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -35,6 +41,15 @@ public class RecordDnbInstantServiceImpl implements IRecordDnbInstantService {
@Autowired
private IBaseMonitorInfoService baseMonitorInfoService;
@Autowired
private RemoteOpenService remoteOpenService;
@Autowired
private ReportPointDnbMapper reportPointDnbMapper;
@Autowired
private BaseMonitorInfo1Mapper baseMonitorInfoMapper;
/**
*
*
@ -232,5 +247,212 @@ public class RecordDnbInstantServiceImpl implements IRecordDnbInstantService {
return recordDnbInstantMapper.selectRecordDnbInstantList(dnbInstant);
}
@Override
public void getNhEnergyDetail() {
Map<String,String> params = new HashMap<>();
params.put("dateType","mi15");
//获取当前时间的前后5分钟
Date nowTime = DateUtils.getNowDate();
String startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,DateUtils.addMinutes(nowTime,-20));
String endTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,DateUtils.addMinutes(nowTime,-10));
params.put("startTime",startTime);
params.put("endTime",endTime);
// params.put("startTime","2025-07-30 13:40:00");
// params.put("endTime","2025-07-30 13:50:00");
params.put("valueType","SJZ");
/**
* /
* **/
AjaxResult voltageRes = remoteOpenService.getVoltageCurrent(params);
List<RecordDnbInstant> list = new ArrayList<>();
if(voltageRes.isSuccess()){
JSONObject resData = JSONObject.parseObject(JSON.toJSONString(voltageRes.get(AjaxResult.DATA_TAG)));
JSONArray array = JSONArray.parseArray(resData.get("Data").toString());
for (int i = 0; i < array.size(); i++) {
RecordDnbInstant instant = new RecordDnbInstant();
instant.setVA(getSafeBigDecimal(array.getJSONObject(i), "ADY"));
instant.setVB(getSafeBigDecimal(array.getJSONObject(i), "BDY"));
instant.setVC(getSafeBigDecimal(array.getJSONObject(i), "CDY"));
instant.setIA(getSafeBigDecimal(array.getJSONObject(i), "ADL"));
instant.setIB(getSafeBigDecimal(array.getJSONObject(i), "BDL"));
instant.setIC(getSafeBigDecimal(array.getJSONObject(i), "CDL"));
instant.setMonitorId(array.getJSONObject(i).getString("Address"));
instant.setRecordTime(nowTime);
instant.setCollectTime(DateUtils.dateTime("yyyy-MM-dd HH:mm", array.getJSONObject(i).getString("ReadingDate")));
list.add(instant);
}
}
/**
*
* **/
AjaxResult electricPowerRes = remoteOpenService.getElectricPower(params);
if(electricPowerRes.isSuccess()){
JSONObject resData = JSONObject.parseObject(JSON.toJSONString(electricPowerRes.get(AjaxResult.DATA_TAG)));
JSONArray array = JSONArray.parseArray(resData.get("Data").toString());
for (int i = 0; i < array.size(); i++) {
for (RecordDnbInstant item : list) {
String address = array.getJSONObject(i).getString("Address");
if (address.equals(item.getMonitorId())) {
item.setGlys(getSafeBigDecimal(array.getJSONObject(i), "GLYS"));
item.setZxyg(getSafeBigDecimal(array.getJSONObject(i), "YGGL"));
item.setActivePower(getSafeBigDecimal(array.getJSONObject(i), "YGGL"));
item.setReactivePower(getSafeBigDecimal(array.getJSONObject(i), "WGGL"));
}
}
}
}
/**
*
* **/
AjaxResult electricQuantityRes= remoteOpenService.getElectricQuantity(params);
if(electricQuantityRes.isSuccess()){
JSONObject resData = JSONObject.parseObject(JSON.toJSONString(electricQuantityRes.get(AjaxResult.DATA_TAG)));
JSONArray array = JSONArray.parseArray(resData.get("Data").toString());
for (int i = 0; i < array.size(); i++) {
for (RecordDnbInstant item : list) {
String address = array.getJSONObject(i).getString("Address");
if (address.equals(item.getMonitorId())) {
item.setReactivePower(getSafeBigDecimal(array.getJSONObject(i), "ZYGDN"));
}
}
}
}
DynamicDataSourceContextHolder.push("ds_1000");
try {
for (RecordDnbInstant item : list) {
BaseMonitorInfo temp = new BaseMonitorInfo();
temp.setAddressCode(item.getMonitorId());
List<BaseMonitorInfo> BaseList = baseMonitorInfoMapper.selectBaseMonitorInfoList(temp);
for (BaseMonitorInfo base : BaseList) {
item.setMonitorId(base.getMonitorId());
recordDnbInstantMapper.insertRecordDnbInstant(item);
}
}
}finally {
DynamicDataSourceContextHolder.poll();
}
}
@Override
public void getNhEnergy() {
Map<String,String> params = new HashMap<>();
params.put("dateType","mi15");
//获取当前时间的前后5分钟
Date nowDate = DateUtils.getNowDate();
//取整点数据
String nowDateStr = DateUtils.parseDateToStr("yyyy-MM-dd HH",nowDate)+":00:00";
String startTime = DateUtils.parseDateToStr("yyyy-MM-dd HH",DateUtils.addHours(nowDate,-1))+":00:00";
params.put("startTime",startTime);
params.put("endTime",nowDateStr);
params.put("valueType","SJZ");
/**
*
* **/
List<ReportPointDnb> list = new ArrayList<>();
AjaxResult electricQuantityRes= remoteOpenService.getElectricQuantity(params);
if(electricQuantityRes.isSuccess()){
JSONObject resData = JSONObject.parseObject(JSON.toJSONString(electricQuantityRes.get(AjaxResult.DATA_TAG)));
JSONArray array = JSONArray.parseArray(resData.get("Data").toString());
//根据Address分类
List<String> addressList = new ArrayList<>();
for (int i = 0; i < array.size(); i++) {
addressList.add(array.getJSONObject(i).getString("Address"));
}
//addressList去重
addressList = addressList.stream().distinct().collect(Collectors.toList());
DynamicDataSourceContextHolder.push("ds_1000");
try {
for (String address : addressList) {
ReportPointDnb dnb = new ReportPointDnb();
BigDecimal electricQuantity = BigDecimal.ZERO;
for (int i = 0; i < array.size(); i++) {
if (address.equals(array.getJSONObject(i).getString("Address"))) {
electricQuantity = electricQuantity.add(getSafeBigDecimal(array.getJSONObject(i), "ZYGDN"));
}
}
dnb.setMeterValue(array.getJSONObject(0).getBigDecimal("ZYGDNSZ"));
dnb.setExpend(electricQuantity);
dnb.setMonitorId(address);
dnb.setBeginTime(DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,startTime));
dnb.setEndTime(DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,nowDateStr));
dnb.setRecordTime(new Date());
dnb.setPointTime(removeLeadingZeros(DateUtils.parseDateToStr("HH",DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,startTime))));
BaseMonitorInfo temp = new BaseMonitorInfo();
temp.setAddressCode(dnb.getMonitorId());
List<BaseMonitorInfo> BaseList = baseMonitorInfoMapper.selectBaseMonitorInfoList(temp);
for (BaseMonitorInfo base : BaseList) {
dnb.setMonitorId(base.getMonitorId());
reportPointDnbMapper.insertReportPointDnb(dnb);
}
}
}finally {
DynamicDataSourceContextHolder.poll();
}
}
}
/**
* 0
* **/
public static String removeLeadingZeros(String str) {
if (str.isEmpty()){
return "";
}
int index = 0;
while (index < str.length() && str.charAt(index) == '0') {
index++;
}
// 处理全零情况(如"0000"返回"0"
return index == str.length() ? "0" : str.substring(index);
}
private static BigDecimal getSafeBigDecimal(JSONObject jsonObject, String key) {
BigDecimal defaultValue = BigDecimal.ZERO;
// 处理字段不存在的情况
if (!jsonObject.containsKey(key)) {
return defaultValue;
}
Object value = jsonObject.get(key);
// 处理值为null的情况
if (value == null) {
return defaultValue;
}
// 处理各种可能的数值类型
try {
if (value instanceof BigDecimal) {
return (BigDecimal) value;
} else if (value instanceof Number) {
// 处理整数、浮点数等数字类型
return new BigDecimal(value.toString());
} else if (value instanceof String) {
// 处理字符串类型的数字
String strValue = (String) value;
if (strValue.trim().isEmpty()) {
return defaultValue;
}
return new BigDecimal(strValue);
} else {
// 不支持的类型
return defaultValue;
}
} catch (NumberFormatException e) {
// 转换失败时返回默认值
return defaultValue;
}
}
}

@ -37,13 +37,14 @@
<result property="roomCode" column="room_code"/>
<result property="roomName" column="room_name"/>
<result property="physicalCode" column="physical_code"/>
<result property="addressCode" column="address_code"/>
</resultMap>
<sql id="selectBaseMonitorInfoVo">
select objid, parent_id, monitor_id, monitor_name, monitor_addr, monitor_type, monitor_status,
collect_device_id, ancestors, grade, build_id, subentry_id, business_id, meter_type_id,
meter_id, correct_value, pt, ct, is_ammeter, is_key_monitor, is_circuit, dept_id, user_id,
create_by, create_time, update_by, update_time, public_share_type,monitor_hierarchy,room_code,room_name,physical_code from base_monitor_info
create_by, create_time, update_by, update_time, public_share_type,monitor_hierarchy,room_code,room_name,physical_code,address_code from base_monitor_info
</sql>
<select id="selectBaseMonitorInfoList" parameterType="BaseMonitorInfo" resultMap="BaseMonitorInfoResult">
@ -77,6 +78,7 @@
<if test="monitorHierarchy != null ">and monitor_hierarchy = #{monitorHierarchy}</if>
<if test="physicalCode != null ">and physical_code = #{physicalCode}</if>
<if test="roomCode != null ">and room_code = #{roomCode}</if>
<if test="addressCode != null ">and address_code = #{addressCode}</if>
</where>
</select>
@ -143,6 +145,7 @@
<if test="roomCode != null">room_code,</if>
<if test="roomName != null">room_name,</if>
<if test="physicalCode != null">physical_code,</if>
<if test="addressCode != null">address_code,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="parentId != null">#{parentId},</if>
@ -176,6 +179,7 @@
<if test="roomCode != null">#{roomCode},</if>
<if test="roomName != null">#{roomName},</if>
<if test="physicalCode != null">#{physicalCode},</if>
<if test="addressCode != null">#{addressCode},</if>
</trim>
</insert>
@ -213,6 +217,7 @@
<if test="roomCode != null">room_code = #{roomCode},</if>
<if test="roomName != null">room_name = #{roomName},</if>
<if test="physicalCode != null">physical_code = #{physicalCode},</if>
<if test="addressCode != null">address_code = #{addressCode},</if>
</trim>
where objid = #{objid}
</update>

@ -41,6 +41,9 @@ public class RyTask {
@Autowired
private RemoteWmsService remoteWmsService;
@Autowired
private RemoteEnergyService remoteEnergyService;
public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
}
@ -256,5 +259,25 @@ public class RyTask {
logger.info("++更新设备的运行时间+开始++updateEquRunTime+++++");
remoteMesService.updateEquRunTime();
}
/**********同步电整点数据*********/
public void SyncNhEnergy(){
logger.info("++同步电整点数据+开始++getNhEnergy+++++");
remoteEnergyService.SyncNhEnergy();
}
/**********同步电实时数据*********/
public void SyncNhEnergyDetail(){
logger.info("++同步电实时数据+开始++getNhEnergyDetail+++++");
remoteEnergyService.SyncNhEnergyDetail();
}
/**********同步新hr系统的出勤记录*********/
public void syncHrAttendance(){
logger.info("+++开始同步新hr系统的出勤记录++syncHrAttendance+++++");
remoteMesService.syncHrAttendance();
}
}

@ -5,8 +5,10 @@ import javax.servlet.http.HttpServletResponse;
import com.op.common.core.utils.poi.ExcelUtil;
import com.op.common.core.web.controller.BaseController;
import com.op.common.core.web.domain.AjaxResult;
import com.op.common.core.web.page.TableDataInfo;
import com.op.common.security.annotation.RequiresPermissions;
import com.op.mes.domain.MesPostAttendanceRecords;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -96,4 +98,38 @@ public class MesAttendanceRecordsController extends BaseController
// {
// return toAjax(mesAttendanceRecordsService.deleteMesAttendanceRecordsByIds(ids));
// }
/**
* hr
* **/
@PostMapping("/syncHrAttendance")
public AjaxResult syncHrAttendance() {
return mesAttendanceRecordsService.syncHrAttendance();
}
/**
*
* **/
@RequiresPermissions("mes:AttendanceRecords:list")
@GetMapping("/postAttendance/list")
public TableDataInfo getPostAttendanceList(MesPostAttendanceRecords mesAttendanceRecords)
{
startPage();
List<MesPostAttendanceRecords> list = mesAttendanceRecordsService.getPostAttendanceList(mesAttendanceRecords);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("mes:AttendanceRecords:export")
@PostMapping("/postAttendance/export")
public void exportPostAttendance(HttpServletResponse response, MesPostAttendanceRecords mesAttendanceRecords)
{
List<MesPostAttendanceRecords> list = mesAttendanceRecordsService.getPostAttendanceList(mesAttendanceRecords);
ExcelUtil<MesPostAttendanceRecords> util = new ExcelUtil<MesPostAttendanceRecords>(MesPostAttendanceRecords.class);
util.exportExcel(response, list, "岗位出勤数据");
}
}

@ -0,0 +1,98 @@
package com.op.mes.domain;
import com.op.common.core.annotation.Excel;
/**
* remark
*
* @author 019117
* @date
*/
public class MesPostAttendanceRecords {
@Excel(name = "排序")
private String sort;
@Excel(name = "岗位")
private String post;
@Excel(name = "总人数")
private String allNum;
@Excel(name = "出勤人数")
private String attendNum;
@Excel(name = "缺勤人数")
private String diffNum;
private String beginDate;
private String endDate;
private String deptId;
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public String getAllNum() {
return allNum;
}
public void setAllNum(String allNum) {
this.allNum = allNum;
}
public String getAttendNum() {
return attendNum;
}
public void setAttendNum(String attendNum) {
this.attendNum = attendNum;
}
public String getDiffNum() {
return diffNum;
}
public void setDiffNum(String diffNum) {
this.diffNum = diffNum;
}
public String getBeginDate() {
return beginDate;
}
public void setBeginDate(String beginDate) {
this.beginDate = beginDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
}

@ -2,6 +2,7 @@ package com.op.mes.mapper;
import java.util.List;
import com.op.mes.domain.MesAttendanceRecords;
import com.op.mes.domain.MesPostAttendanceRecords;
/**
* MESMapper
@ -61,4 +62,11 @@ public interface MesAttendanceRecordsMapper
List<MesAttendanceRecords> selectMesClockRecord(MesAttendanceRecords mesAttendanceRecords);
List<MesAttendanceRecords> selectMesPersonList(String deptId);
int batchAttendanceRecords(List<MesAttendanceRecords> list);
List<MesPostAttendanceRecords> getPostAttendanceList(MesPostAttendanceRecords params);
}

@ -1,7 +1,9 @@
package com.op.mes.service;
import java.util.List;
import com.op.common.core.web.domain.AjaxResult;
import com.op.mes.domain.MesAttendanceRecords;
import com.op.mes.domain.MesPostAttendanceRecords;
/**
* MESService
@ -58,4 +60,11 @@ public interface IMesAttendanceRecordsService
* @return
*/
public int deleteMesAttendanceRecordsById(String id);
AjaxResult syncHrAttendance();
List<MesPostAttendanceRecords> getPostAttendanceList(MesPostAttendanceRecords params);
}

@ -1,15 +1,32 @@
package com.op.mes.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.op.common.core.domain.R;
import com.op.common.core.utils.DateUtils;
import com.op.common.core.utils.uuid.IdUtils;
import com.op.common.core.web.domain.AjaxResult;
import com.op.mes.domain.MesPostAttendanceRecords;
import com.op.system.api.RemoteOpenService;
import com.op.system.api.RemoteUserService;
import com.op.system.api.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.op.mes.mapper.MesAttendanceRecordsMapper;
import com.op.mes.domain.MesAttendanceRecords;
import com.op.mes.service.IMesAttendanceRecordsService;
import org.springframework.util.CollectionUtils;
import static com.op.common.core.web.domain.AjaxResult.error;
import static com.op.common.core.web.domain.AjaxResult.success;
/**
* MESService
@ -23,6 +40,14 @@ public class MesAttendanceRecordsServiceImpl implements IMesAttendanceRecordsSer
@Autowired
private MesAttendanceRecordsMapper mesAttendanceRecordsMapper;
@Autowired
private RemoteOpenService remoteOpenService;
@Autowired
private RemoteUserService remoteUserService;
/**
* MES
*
@ -96,4 +121,119 @@ public class MesAttendanceRecordsServiceImpl implements IMesAttendanceRecordsSer
{
return mesAttendanceRecordsMapper.deleteMesAttendanceRecordsById(id);
}
@Override
public AjaxResult syncHrAttendance() {
// 加载sf-cloud库的sys_datasource
SysUser sysUser = new SysUser();
sysUser.setUserId(1L);
DynamicDataSourceContextHolder.push("master");
R<List<Map<String, String>>> dateSources0 = new R<>();
try {
dateSources0 = remoteUserService.getPoolNameList(sysUser);
}finally {
DynamicDataSourceContextHolder.poll();
}
List<Map<String, String>> dateSources = dateSources0.getData();
ExecutorService executorService = new ThreadPoolExecutor(
dateSources.size(),
dateSources.size(),
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
try {
dateSources.forEach(dateSource -> {
if("ds_1000".equals(dateSource.get("poolName"))){
Runnable run = () -> {
DynamicDataSourceContextHolder.push(dateSource.get("poolName"));
//不同工厂使用不同的deptId
String deptId = "10000152";
//查询当前生效的车间人员信息
List<MesAttendanceRecords> personList = mesAttendanceRecordsMapper.selectMesPersonList(deptId);
//查询当天人员打开记录
Map<String,String> paramMap = new HashMap<>();
paramMap.put("bd", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.getNowDate()));
paramMap.put("ed", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.getNowDate()));
AjaxResult result = remoteOpenService.getAttRecord(paramMap);
List<MesAttendanceRecords> attendanceRecords = new ArrayList<>();
if (result.isSuccess()){
List<Map<String,String>> attList = (List<Map<String, String>>) result.get("data");
//循环遍历出车间人员打开记录
for (Map<String,String> map : attList){
for (MesAttendanceRecords person : personList)
if (person.getUserId().equals(map.get("empcode"))){
MesAttendanceRecords attendanceRecord = new MesAttendanceRecords();
attendanceRecord.setId(IdUtils.fastSimpleUUID());
attendanceRecord.setUserId(person.getUserId());
attendanceRecord.setUserName(person.getUserName());
attendanceRecord.setAttendanceStatus("正常");
attendanceRecord.setSex(person.getSex());
Date attendTime = extractAttendTime(map.get("strdata"));
attendanceRecord.setStartTime(attendTime);
attendanceRecord.setAttendanceTime("07:30-19:30");
attendanceRecord.setAttendanceDate(attendTime);
attendanceRecord.setWorkHours(0L);
attendanceRecord.setCreateTime(new Date());
attendanceRecord.setPost(person.getPost());
attendanceRecords.add(attendanceRecord);
}
}
//插入人员打卡记录
if (!CollectionUtils.isEmpty(attendanceRecords)){
mesAttendanceRecordsMapper.batchAttendanceRecords(attendanceRecords);
}
}
};
executorService.execute(run);
}
});
} catch (Exception e) {
return error("service == createCPBatchTask == exception");
} finally {
executorService.shutdown();
}
return success();
}
@Override
@DS("#header.poolName")
public List<MesPostAttendanceRecords> getPostAttendanceList(MesPostAttendanceRecords params) {
//目前只有小榄工厂黑蚊香车间
params.setDeptId("10000152");
return mesAttendanceRecordsMapper.getPostAttendanceList(params);
}
private static Date extractAttendTime(String data) {
// 校验输入是否为空
if (data == null || data.trim().isEmpty()) {
System.out.println("输入字符串不能为空");
return null;
}
// 按照空格分割字符串
String[] parts = data.split(" ");
// 校验分割后的数组长度是否符合预期
if (parts.length < 6) {
System.out.println("输入字符串格式不正确,无法提取时间");
return null;
}
// 拼接日期和时间部分
String datetimeStr = parts[4] + " " + parts[5];
// 定义日期格式并进行转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d HH:mm:ss");
try {
return sdf.parse(datetimeStr);
} catch (ParseException e) {
System.out.println("时间格式解析错误: " + e.getMessage());
return null;
}
}
}

@ -169,4 +169,111 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectMesPersonList" resultType="com.op.mes.domain.MesAttendanceRecords" parameterType="java.lang.String">
SELECT
user_name userId,
nick_name userName,
sex,
b.post_name post
FROM
lanju_op_cloud.dbo.sys_user a
LEFT JOIN lanju_op_cloud.dbo.sys_post b ON a.post = b.post_id
WHERE
a.dept_id = #{deptId}
AND a.status = '0'
</select>
<insert id="batchAttendanceRecords">
INSERT INTO mes_attendance_records (
id,
user_id,
user_name,
attendance_status,
sex,
start_time,
attendance_time,
attendance_date,
work_hours,
create_time,
post
)
SELECT
temp.id,
temp.userId,
temp.userName,
temp.attendanceStatus,
temp.sex,
temp.startTime,
temp.attendanceTime,
temp.attendanceDate,
temp.workHours,
temp.createTime,
temp.post
FROM (
<foreach collection="list" item="item" separator="UNION ALL">
SELECT
#{item.id, jdbcType=VARCHAR} AS id,
#{item.userId, jdbcType=VARCHAR} AS userId,
#{item.userName, jdbcType=VARCHAR} AS userName,
#{item.attendanceStatus, jdbcType=VARCHAR} AS attendanceStatus,
#{item.sex, jdbcType=VARCHAR} AS sex,
#{item.startTime, jdbcType=TIMESTAMP} AS startTime,
#{item.attendanceTime, jdbcType=VARCHAR} AS attendanceTime,
#{item.attendanceDate, jdbcType=TIMESTAMP} AS attendanceDate,
#{item.workHours, jdbcType=DECIMAL} AS workHours,
#{item.createTime, jdbcType=TIMESTAMP} AS createTime,
#{item.post, jdbcType=VARCHAR} AS post
</foreach>
) AS temp
WHERE NOT EXISTS (
SELECT 1
FROM mes_attendance_records target
WHERE target.user_id = temp.userId
AND target.start_time = temp.startTime
)
</insert>
<select id="getPostAttendanceList" resultType="com.op.mes.domain.MesPostAttendanceRecords" parameterType="com.op.mes.domain.MesPostAttendanceRecords">
SELECT
ROW_NUMBER() OVER (ORDER BY a.post) AS sort,
a.post,
a.allNum,
COALESCE(d.attendNum, 0) AS attendNum,
(a.allNum - COALESCE(d.attendNum, 0)) AS diffNum
FROM (
SELECT
b.post_name AS post,
COUNT(DISTINCT a.user_id) AS allNum
FROM
lanju_op_cloud.dbo.sys_user a
LEFT JOIN lanju_op_cloud.dbo.sys_post b ON a.post = b.post_id
WHERE
a.dept_id = #{deptId}
AND a.status = '0'
GROUP BY
b.post_name
) a
LEFT JOIN (
SELECT
c.post,
COUNT(DISTINCT c.user_id) AS attendNum
FROM
dbo.mes_attendance_records c
WHERE
CONVERT(VARCHAR(10), c.attendance_date, 23) >= #{beginDate}
AND #{endDate} >= CONVERT(VARCHAR(10), c.attendance_date, 23)
GROUP BY
c.post
) d ON a.post = d.post
<where>
<if test="post != null and post != ''">
a.post LIKE CONCAT('%',#{post},'%')
</if>
</where>
</select>
</mapper>

@ -203,7 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sf1.factory_name carName,
sf.equipment_code machineCode,
sf.equipment_name machineName,
mrw.workorder_code workorderCode,
RIGHT(wo.workorder_code_sap, 9) workorderCode,
mrw.batch batch,
mrw.product_code productCode,
mrw.product_name productName,
@ -215,6 +215,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join base_equipment sf on sf.equipment_code = mrw.machine_code <!---线体-->
left join sys_factory sf1 on sf.workshop_code = sf1.factory_code <!--车间-->
left join sys_factory sf2 on sf1.parent_id = sf2.factory_id <!--工厂-->
LEFT JOIN pro_order_workorder wo ON wo.workorder_code = mrw.workorder_code
where mrw.parent_order = '0' and mrw.del_flag = '0'
<if test="machineName != null and machineName != ''">and sf.equipment_name like concat('%', #{machineName}, '%')</if>
<if test="carName != null and carName != ''">and sf1.factory_name like concat('%', #{carName}, '%')</if>

@ -0,0 +1,49 @@
package com.op.open.common;
import feign.Logger;
import feign.Request;
import feign.Response;
import feign.Util;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
/**
* @author 018301
*/
@Component
public class CustomFeignLogger extends Logger {
private static final String KEY_OUTSIDE_TRACE_ID = "outsideTraceId";
@Override
protected void log(String configKey, String format, Object... args) {
}
@Override
protected void logRequest(String configKey, Level logLevel, Request request) {
}
@Override
protected Response logAndRebufferResponse(String configKey, Level logLevel, Response response, long elapsedTime) throws IOException {
int status = response.status();
if (response.body() != null && !(status == 204 || status == 205)) {
byte[] bodyData = Util.toByteArray(response.body().asInputStream());
MDC.remove(KEY_OUTSIDE_TRACE_ID);
return response.toBuilder().body(bodyData).build();
}
return response;
}
}

@ -0,0 +1,26 @@
package com.op.open.common;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.util.ArrayList;
import java.util.List;
/**
* Description: Feign
*
* @author : huangjinxian
* @version : 1.0
* @since : 2024/9/13
*/
@SuppressWarnings({"unused"})
public class FeignHttpMessageConverter extends MappingJackson2HttpMessageConverter {
public FeignHttpMessageConverter() {
List<MediaType> mediaTypes = new ArrayList<>();
String utf8Suf = ";charset=UTF-8";
mediaTypes.add(MediaType.valueOf(MediaType.TEXT_EVENT_STREAM_VALUE + utf8Suf));
mediaTypes.add(MediaType.valueOf(MediaType.TEXT_PLAIN_VALUE + utf8Suf));
mediaTypes.add(MediaType.valueOf(MediaType.TEXT_HTML_VALUE + utf8Suf));
setSupportedMediaTypes(mediaTypes);
}
}

@ -0,0 +1,20 @@
package com.op.open.common;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
/**
* Description: Feign
*
* @author : huangjinxian
* @version : 1.0
* @since : 2024/9/13
*/
@SuppressWarnings({"unused"})
public class FeignHttpMessageConvertersFactory implements ObjectFactory<HttpMessageConverters> {
@Override
public HttpMessageConverters getObject() throws BeansException {
return new HttpMessageConverters(new FeignHttpMessageConverter());
}
}

@ -0,0 +1,78 @@
package com.op.open.config;
import com.op.open.common.CustomFeignLogger;
import com.op.open.common.FeignHttpMessageConvertersFactory;
import com.op.open.hr.HrClient;
import com.op.open.hr.HrRequestInterceptor;
import com.op.open.nhApi.NhApiClient;
import com.op.open.nhApi.NhApiRequestInterceptor;
import feign.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
import static java.util.concurrent.TimeUnit.SECONDS;
/**
* Description:
*
* @author : huangjinxian
* @version : 1.0
* @since : 2024/9/23
*/
@Configuration
public class OutsideApiConfig {
@Value("${nhApi.domain}")
private String nhAipDomain;
@Value("${nhApi.key}")
private String nhAipKey;
@Value("${newHr.domain}")
private String hrDomain;
private final CustomFeignLogger customFeignLogger;
public OutsideApiConfig(CustomFeignLogger customFeignLogger) {
this.customFeignLogger = customFeignLogger;
}
private Feign.Builder getDefaultFeignClient() {
return Feign.builder()
.decoder(new ResponseEntityDecoder(new SpringDecoder(new FeignHttpMessageConvertersFactory())))
.options(new Request.Options(60, TimeUnit.SECONDS, 60, TimeUnit.SECONDS, true))
.contract(new Contract.Default())
.logLevel(Logger.Level.FULL)
.logger(customFeignLogger)
.dismiss404();
}
@Bean
public NhApiClient nhApiClient() {
return getDefaultFeignClient()
.encoder(new SpringEncoder(new FeignHttpMessageConvertersFactory()))
.retryer(new Retryer.Default(100, SECONDS.toMillis(1), 3))
.requestInterceptor(new NhApiRequestInterceptor(nhAipKey))
.target(NhApiClient.class, nhAipDomain);
}
@Bean
public HrClient hrClient() {
return getDefaultFeignClient()
.encoder(new SpringEncoder(new FeignHttpMessageConvertersFactory()))
.retryer(new Retryer.Default(100, SECONDS.toMillis(1), 3))
.requestInterceptor(new HrRequestInterceptor())
.target(HrClient.class, hrDomain);
}
}

@ -0,0 +1,150 @@
package com.op.open.config;
import com.google.common.collect.Lists;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* spring
*
* @author huangjinxian
* @version 1.0
* @date 2024/9/8
*/
@Component
public class SpringContext implements ApplicationContextAware {
//上下文
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContext.init(applicationContext);
}
public static void init(ApplicationContext context) throws BeansException {
if (applicationContext == null) {
applicationContext = context;
}
}
/**
* Spring
*
* @return: org.springframework.core.env.Environment
* @auther huangjinxian
* @see Environment
*/
public static Environment getEnvironment() {
return applicationContext.getEnvironment();
}
/**
*
*
* @return: org.springframework.context.ApplicationContext
* @auther huangjinxian
* @see ApplicationContext
*/
public static ApplicationContext self() {
return applicationContext;
}
/**
*
*
* @param event
*/
public static void publishEvent(Object event) {
applicationContext.publishEvent(event);
}
/**
* java bean
*
* @param name: bean
* @return: java.lang.Object
* @auther huangjinxian
* @see Object
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
/**
* java bean
*
* @param clazz: bean
* @return: T
* @auther huangjinxian
* @see T
*/
public static <T> T getBean(Class<T> clazz) throws BeansException {
return applicationContext.getBean(clazz);
}
/**
* java bean
*
* @param name: bean
* @param clazz: bean
* @return: T
* @auther huangjinxian
* @see T
*/
public static <T> T getBean(String name, Class<T> clazz) throws BeansException {
return applicationContext.getBean(name, clazz);
}
/**
* BeanMap
*
* @param clazz: bean
* @return: java.util.Map<java.lang.String, T>
* @auther huangjinxian
* @see Map < String,T>
*/
public static <T> Map<String, T> getBeanMapOfType(Class<T> clazz) {
return applicationContext.getBeansOfType(clazz);
}
/**
* BeanList
*
* @param clazz: bean
* @return: java.util.Map<java.lang.String, T>
* @auther huangjinxian
* @see Map< String,T>
*/
public static <T> List<T> getBeanListOfType(Class<T> clazz) {
return Lists.newArrayList(applicationContext.getBeansOfType(clazz).values());
}
/**
*
*
* @param t:
* @return: void
* @auther huangjinxian
*/
public static <T> void autowireBean(T t) {
applicationContext.getAutowireCapableBeanFactory().autowireBean(t);
}
/**
* IOCnamebean
*
* @param name: bean
* @return: boolean
* @auther huangjinxian
* @see boolean
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
}

@ -8,6 +8,8 @@ import com.op.common.core.utils.StringUtils;
import com.op.common.core.web.controller.BaseController;
import com.op.common.core.web.domain.AjaxResult;
import com.op.common.datasource.creator.DynamicDatasourceCreator;
import com.op.open.hr.domain.HrQuery;
import com.op.open.nhApi.domain.NhQuery;
import com.op.open.service.OpenService;
import com.op.system.api.domain.DataSourcePropertyDTO;
import com.op.system.api.domain.device.EquEquipmentDTO;
@ -270,4 +272,45 @@ public class OpenController extends BaseController {
return openService.addEquSapInfo(dto);
}
/**
* /
* **/
@PostMapping("/getVoltageCurrent")
public AjaxResult getVoltageCurrent(@RequestBody NhQuery params) {
return openService.getVoltageCurrent(params);
}
/**
*
* **/
@PostMapping("/getElectricPower")
public AjaxResult getElectricPower(@RequestBody NhQuery params) {
return openService.getElectricPower(params);
}
/**
*
* **/
@PostMapping("/getElectricQuantity")
public AjaxResult getElectricQuantity(@RequestBody NhQuery params) {
return openService.getElectricQuantity(params);
}
/**
*
* **/
@PostMapping("/getFrozenElectricity")
public AjaxResult getFrozenElectricity(@RequestBody NhQuery params) {
return openService.getFrozenElectricity(params);
}
/**
* hr
* **/
@PostMapping("/getAttRecord")
public AjaxResult getAttRecord(@RequestBody HrQuery params){
return openService.getAttRecord(params);
}
}

@ -0,0 +1,75 @@
package com.op.open.hr;
import com.op.open.hr.domain.HrQuery;
import com.op.open.hr.domain.UserSign;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* remark
*
* @author 019117
* @date
*/
@Component
public class HrApi {
private final HrClient hrClient;
private static final ObjectMapper objectMapper = new ObjectMapper();
public HrApi(HrClient hrClient) {
this.hrClient = hrClient;
}
/**
*
*/
private int reloadValue = 0;
public List<UserSign> getAttRecord( HrQuery params ) {
try {
String httpResult = hrClient.getAttRecord(params);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(httpResult);
String code = jsonNode.get("iserror").asText();
if (!"0".equals(code)) {
if ("无效的v8apitoken".equals(jsonNode.get("errormsg").asText())){
if (reloadValue < 3) {
reloadValue++;
return getAttRecord(params);
}
}
throw new RuntimeException();
}
reloadValue = 0;
return convert(jsonNode.get("data"), UserSign.class);
}catch (Exception e){
throw new RuntimeException();
}
}
public static <T> List<T> convert(JsonNode jsonNode, Class<T> elementType) throws Exception {
// 如果是数组节点,直接转换
if (jsonNode.isArray()) {
// 使用TypeReference来指定泛型类型
return objectMapper.readValue(
objectMapper.writeValueAsString(jsonNode),
new TypeReference<List<T>>() {}
);
}
throw new IllegalArgumentException("JsonNode is not an array");
}
}

@ -0,0 +1,28 @@
package com.op.open.hr;
import com.fasterxml.jackson.databind.JsonNode;
import com.op.open.hr.domain.HrQuery;
import feign.Headers;
import feign.QueryMap;
import feign.RequestLine;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
/**
* remark
*
* @author 019117
* @date
*/
public interface HrClient {
@RequestLine("GET /v8api/api/login/getDynV8ApiToken")
@Headers({"Content-Type: application/json"})
String getToken();
@RequestLine("GET /v8api/v8api/att/getAttRecord")
@Headers({"Content-Type: application/json"})
String getAttRecord(@QueryMap HrQuery params);
}

@ -0,0 +1,37 @@
package com.op.open.hr;
import com.fasterxml.jackson.databind.JsonNode;
import com.op.open.config.SpringContext;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.HashMap;
import java.util.Map;
/**
* remark
*
* @author 019117
* @date
*/
public class HrRequestInterceptor implements RequestInterceptor {
private String getToken() {
HrClient hrClient = SpringContext.getBean(HrClient.class);
return hrClient.getToken();
}
@Override
public void apply(RequestTemplate template) {
if ("/v8api/api/login/getDynV8ApiToken".equals(template.url())) {
return;
}
String token = getToken();
template.header("v8apitoken", token);
}
}

@ -0,0 +1,40 @@
package com.op.open.hr.domain;
/**
* remark
*
* @author 019117
* @date
*/
public class HrQuery {
private String bd;
private String ed;
private String empcode;
public String getBd() {
return bd;
}
public void setBd(String bd) {
this.bd = bd;
}
public String getEd() {
return ed;
}
public void setEd(String ed) {
this.ed = ed;
}
public String getEmpcode() {
return empcode;
}
public void setEmpcode(String empcode) {
this.empcode = empcode;
}
}

@ -0,0 +1,48 @@
package com.op.open.hr.domain;
/**
* remark
*
* @author 019117
* @date
*/
public class UserSign {
private String empname;
private String empcode;
private String strdata;
private String kqdate;
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public String getEmpcode() {
return empcode;
}
public void setEmpcode(String empcode) {
this.empcode = empcode;
}
public String getStrdata() {
return strdata;
}
public void setStrdata(String strdata) {
this.strdata = strdata;
}
public String getKqdate() {
return kqdate;
}
public void setKqdate(String kqdate) {
this.kqdate = kqdate;
}
}

@ -0,0 +1,35 @@
package com.op.open.nhApi;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
import com.op.open.nhApi.domain.NhQuery;
import feign.Headers;
import feign.RequestLine;
import org.springframework.web.bind.annotation.RequestBody;
/**
* remark
*
* @author 019117
* @date
*/
public interface NhApiClient {
@RequestLine("POST /WebApi/NH2/VoltageCurrent")
@Headers({"Content-Type: application/json"})
JSONObject getVoltageCurrent(@RequestBody NhQuery params);
@RequestLine("POST /WebApi/NH2/ElectricPower")
@Headers({"Content-Type: application/json"})
JSONObject getElectricPower(@RequestBody NhQuery params);
@RequestLine("POST /WebApi/NH2/ElectricQuantity")
@Headers({"Content-Type: application/json"})
JSONObject getElectricQuantity(@RequestBody NhQuery params);
@RequestLine("POST /WebApi/NH2/FrozenElectricity")
@Headers({"Content-Type: application/json"})
JSONObject getFrozenElectricity(@RequestBody NhQuery params);
}

@ -0,0 +1,27 @@
package com.op.open.nhApi;
import feign.RequestInterceptor;
import feign.RequestTemplate;
/**
* remark
*
* @author 019117
* @date
*/
public class NhApiRequestInterceptor implements RequestInterceptor {
private final String token;
/**
*
* **/
public NhApiRequestInterceptor(String token) {
this.token = token;
}
@Override
public void apply(RequestTemplate template) {
template.header("API_KEY", token);
}
}

@ -0,0 +1,50 @@
package com.op.open.nhApi.domain;
/**
* remark
*
* @author 019117
* @date
*/
public class NhQuery {
private String dateType;
private String startTime;
private String endTime;
private String valueType;
public String getDateType() {
return dateType;
}
public void setDateType(String dateType) {
this.dateType = dateType;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String getValueType() {
return valueType;
}
public void setValueType(String valueType) {
this.valueType = valueType;
}
}

@ -1,6 +1,8 @@
package com.op.open.service;
import com.op.common.core.web.domain.AjaxResult;
import com.op.open.hr.domain.HrQuery;
import com.op.open.nhApi.domain.NhQuery;
import com.op.system.api.domain.device.EquEquipmentDTO;
import com.op.system.api.domain.device.EquRepairOrderDTO;
import com.op.system.api.domain.dto.WCSDTO;
@ -46,4 +48,15 @@ public interface OpenService {
AjaxResult sendProductCheckNo(List<BaseProductDTO> dots);
AjaxResult addEquSapInfo(EquEquipmentDTO dto);
AjaxResult getVoltageCurrent(NhQuery paramMap);
AjaxResult getElectricPower(NhQuery paramMap);
AjaxResult getElectricQuantity(NhQuery paramMap);
AjaxResult getFrozenElectricity(NhQuery paramMap);
AjaxResult getAttRecord(HrQuery paramMap);
}

@ -1,10 +1,8 @@
package com.op.open.service.impl;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.op.common.core.constant.Constants;
import com.op.common.core.utils.DateUtils;
@ -18,7 +16,11 @@ import com.op.common.security.utils.SecurityUtils;
import com.op.open.domain.EquEquipmentBo;
import com.op.open.domain.EquRepairWorkOrderBo;
import com.op.open.hr.HrApi;
import com.op.open.hr.domain.HrQuery;
import com.op.open.mapper.OpenMapper;
import com.op.open.nhApi.NhApiClient;
import com.op.open.nhApi.domain.NhQuery;
import com.op.open.service.OpenService;
import com.op.system.api.RemoteOpenService;
import com.op.system.api.domain.SysNoticeGroup;
@ -95,8 +97,18 @@ public class OpenServiceImpl implements OpenService {
@Autowired
private RemoteOpenService remoteOpenService;
private final HrApi hrApi;
@Autowired
private NhApiClient nhApiClient;
private static Pattern p2= Pattern.compile("<[^>]+>");
public OpenServiceImpl(HrApi hrApi) {
this.hrApi = hrApi;
}
/**
*
* JSON
@ -988,4 +1000,60 @@ public class OpenServiceImpl implements OpenService {
return error(e.getMessage());
}
}
/**
*
* **/
@Override
public AjaxResult getVoltageCurrent(NhQuery paramMap) {
try {
JSONObject jsonObject= nhApiClient.getVoltageCurrent(paramMap);;
return AjaxResult.success(jsonObject);
} catch (Exception e) {
e.printStackTrace();
return error(e.getMessage());
}
}
/**
*
* **/
@Override
public AjaxResult getElectricPower(NhQuery paramMap) {
try {
JSONObject jsonObject= nhApiClient.getElectricPower(paramMap);
return AjaxResult.success(jsonObject);
} catch (Exception e) {
e.printStackTrace();
return error(e.getMessage());
}
}
@Override
public AjaxResult getElectricQuantity(NhQuery paramMap) {
try {
JSONObject jsonObject= nhApiClient.getElectricQuantity(paramMap);
return AjaxResult.success(jsonObject);
} catch (Exception e) {
e.printStackTrace();
return error(e.getMessage());
}
}
@Override
public AjaxResult getFrozenElectricity(NhQuery paramMap) {
try {
JSONObject jsonObject= nhApiClient.getFrozenElectricity(paramMap);
return AjaxResult.success(jsonObject);
} catch (Exception e) {
e.printStackTrace();
return error(e.getMessage());
}
}
@Override
public AjaxResult getAttRecord(HrQuery paramMap) {
return AjaxResult.success(hrApi.getAttRecord(paramMap));
}
}

@ -91,6 +91,16 @@ public class QcCheckSampleTask extends BaseEntity {
@Excel(name = "第三次检验时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private String thirdCheckTime;
/** 留样人工号 **/
@Excel(name = "留样人工号")
private String sampleUserCode;
/** 留样人姓名 **/
@Excel(name = "留样人姓名")
private String sampleUserName;
/** 订单号 **/
private String orderNo;
@ -253,4 +263,20 @@ public class QcCheckSampleTask extends BaseEntity {
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getSampleUserCode() {
return sampleUserCode;
}
public void setSampleUserCode(String sampleUserCode) {
this.sampleUserCode = sampleUserCode;
}
public String getSampleUserName() {
return sampleUserName;
}
public void setSampleUserName(String sampleUserName) {
this.sampleUserName = sampleUserName;
}
}

@ -1193,7 +1193,7 @@ public class QcCheckTaskIncomeServiceImpl<QcCheckUnqualifiedService> implements
if (StringUtils.isNotBlank(incomeBatchNo)) {
if (incomeBatchNo.length() == 24){
//国内物料去掉前面时间
incomeBatchNo = incomeBatchNo.substring(9,24);
incomeBatchNo = incomeBatchNo.substring(8,24);
} else if (incomeBatchNo.length() < 24){
//海外物料取创建时间
incomeBatchNo = DateUtils.parseDateToStr(DateUtils.YYYYMMDD,qcCheckTaskIncome.getCreateTime());
@ -1201,8 +1201,9 @@ public class QcCheckTaskIncomeServiceImpl<QcCheckUnqualifiedService> implements
}
sampleTask.setIncomeBatchNo(incomeBatchNo);
sampleTask.setOrderNo(qcCheckTaskIncome.getOrderNo());
sampleTask.setCreateTime(qcCheckTaskIncome.getCreateTime());
sampleTask.setWorkOrderCodeSap(qcCheckTaskIncome.getWorkorderCodeSap());
sampleTask.setCreateTime(new Date());
sampleTask.setOrderNo(qcCheckTaskIncome.getOrderCode());
//查询该物料是否留样
QcCheckSampleTask temp = qcCheckSampleTaskMapper.selectQcCheckSampleTask(sampleTask);
//未留样则进行留样

@ -23,6 +23,8 @@
<result property="thirdCheckUserName" column="third_check_user_name"/>
<result property="thirdCheckResult" column="third_check_result"/>
<result property="thirdCheckTime" column="third_check_time"/>
<result property="sampleUserCode" column="sample_user_code"/>
<result property="sampleUserName" column="sample_user_name"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
@ -35,7 +37,7 @@
id,
material_name,
income_batch_no,
SUBSTRING ( pow.workorder_code_sap, 4, 12 ) AS work_order_code_sap,
work_order_code_sap,
sample_time,
sample_num,
sample_address,
@ -50,9 +52,10 @@
third_check_user_code,
third_check_user_name,
third_check_result,
third_check_time
third_check_time,
sample_user_code,
sample_user_name
from qc_check_sample_task task
left join pro_order_workorder pow ON pow.workorder_code = task.order_no
<where>
<if test="queryDate != null and queryDate != ''">
and CONVERT(VARCHAR(10), task.create_time ,23) <![CDATA[ = ]]> #{queryDate}
@ -67,7 +70,7 @@
and task.material_name like concat('%', #{materialName}, '%')
</if>
<if test="workOrderCodeSap != null and workOrderCodeSap != ''">
and SUBSTRING ( pow.workorder_code_sap, 4, 12 ) <![CDATA[ = ]]> #{workOrderCodeSap}
and task.work_order_code_sap = #{workOrderCodeSap}
</if>
</where>
order by task.sample_time desc,task.create_time desc
@ -166,6 +169,12 @@
<if test="thirdCheckTime != null and thirdCheckTime != ''">
third_check_time = #{thirdCheckTime},
</if>
<if test="sampleUserCode != null and sampleUserCode != ''">
sample_user_code = #{sampleUserCode},
</if>
<if test="sampleUserName != null and sampleUserName != ''">
sample_user_name = #{sampleUserName},
</if>
update_time = getDate()
</set>
where id = #{id}
@ -238,6 +247,7 @@
material_name,
income_batch_no,
order_no,
work_order_code_sap,
create_time
)
VALUES
@ -246,6 +256,7 @@
#{materialName},
#{incomeBatchNo},
#{orderNo},
#{workOrderCodeSap},
#{createTime}
)
</insert>
@ -253,7 +264,7 @@
<select id="selectQcCheckSampleTask" parameterType="com.op.quality.domain.QcCheckSampleTask" resultType="com.op.quality.domain.QcCheckSampleTask">
SELECT id
FROM qc_check_sample_task
WHERE material_name = #{materialName} AND income_batch_no = #{incomeBatchNo} AND order_no = #{orderNo}
WHERE material_name = #{materialName} AND work_order_code_sap = #{workOrderCodeSap}
</select>

@ -1096,8 +1096,6 @@ public class SapItemSyncImpl implements SapItemSyncService {
String bprme = new String(); // 订单价格单位(采购)
String RETCODE= new String();
String MESSAGE= new String();
String MATERIALDOCUMENT = new String();
String MATDOCUMENTYEAR= new String();
String tem="0";
for (int i = 0; i < maraTable.getNumRows(); i++) {
maraTable.setRow(i);
@ -1136,37 +1134,31 @@ public class SapItemSyncImpl implements SapItemSyncService {
}else {
continue;
}
JCoFunction func2 = repository.getFunction("ZMES_106_MIGO");//105冲销--冲销
JCoFunction func2 = repository.getFunction("ZMES_MBST");//105冲销--冲销
if (func2 == null) {
throw new RuntimeException("Function does not exist in SAP");
}
log.info("106参数-------" + mapList.toString());
JCoTable L_ITEM = func2.getTableParameterList().getTable("L_ITEM");
L_ITEM.appendRow();
L_ITEM.setValue("LFBJA",map.get("LFBJA"));//参考凭证会计年度
L_ITEM.setValue("LFBNR",map.get("LFBNR"));//参考凭证的凭证号
L_ITEM.setValue("LFPOS",zeile);//参考凭证项目
L_ITEM.setValue("EBELN", ebeln);//采购订单编号 采购凭证号
L_ITEM.setValue("EBELP",map.get("ebelp") );//采购凭证的项目编号
L_ITEM.setValue("MATNR", matnr);//物料号
L_ITEM.setValue("WERKS", werks);//工厂
L_ITEM.setValue("LGORT", "0001");//库存地点
L_ITEM.setValue("QUANTITY",menge);//数量
System.out.println(L_ITEM);
//凭证
func2.getImportParameterList().setValue("P_BELNR", map.get("LFBNR"));
//会计年度
func2.getImportParameterList().setValue("P_GJAHR", mjahr);
//冲销日期
func2.getImportParameterList().setValue("P_BUDAT", DateUtils.parseDateToStr("yyyyMMdd", new Date()));
func2.execute(dest);//执行调用函数
RETCODE = func2.getExportParameterList().getString("RETCODE");
MESSAGE = func2.getExportParameterList().getString("L_MSG");
MATERIALDOCUMENT = func2.getExportParameterList().getString("MATERIALDOCUMENT");
MATDOCUMENTYEAR = func2.getExportParameterList().getString("MATDOCUMENTYEAR");
log.info("106冲销结果结果-----" + RETCODE+"/" +MESSAGE+"/" +MATERIALDOCUMENT+"/" +MATDOCUMENTYEAR);
MESSAGE = func2.getExportParameterList().getString("RETMSG");
log.info("106冲销结果结果-----" + RETCODE+"/" +MESSAGE+"/" );
}
if((Constants.FAIL).equals(Integer.parseInt(RETCODE))){
return R.fail(MESSAGE);
}
Map Resmap = new HashMap();
Resmap.put("MATERIALDOCUMENT", MATERIALDOCUMENT);
Resmap.put("MATDOCUMENTYEAR", MATDOCUMENTYEAR);
Resmap.put("code106", MESSAGE);
return R.ok(Resmap, MESSAGE);
} else {
// 表为空的处理

@ -198,4 +198,16 @@ public class OdsProcureOutOrderController extends BaseController {
odsProcureOrderService.OutboundPostingzcSAPTH(orderList);
return success();
}
/**
* 退
*
* @param orderList
* @return
*/
@PostMapping("/batchSapTl")
public AjaxResult batchSapTl(@RequestBody List<String> orderList) {
odsProcureOrderService.batchSapTl(orderList);
return success();
}
}

@ -361,6 +361,9 @@ public class BaseProduct extends BaseEntity {
private String mvgr5;
private String palletNum;
private String warehouseCycle;
@Excel (name = "垛型" , readConverterExp = "1=垛形1-424,2=垛形2-224,3=垛形3-2222")
private String packType;
private String waCode;

@ -389,6 +389,11 @@ public class WmsRawOrderIn extends BaseEntity {
* **/
private String deliveryTimeEnd;
/**
* 106105
* **/
private String oldCode105;
public String getCheckNo() {
return checkNo;
}
@ -917,6 +922,14 @@ public class WmsRawOrderIn extends BaseEntity {
return activeFlag;
}
public String getOldCode105() {
return oldCode105;
}
public void setOldCode105(String oldCode105) {
this.oldCode105 = oldCode105;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

@ -183,4 +183,6 @@ public interface OdsProcureOutOrderMapper {
String getWmsOdsProcureOutOrder(OdsProcureOutOrder order);
int removeReturn(String[] IDs);
List<OdsProcureOutOrder> selectWmsOdsProcureReturnOrderByProduceCode(String order);
}

@ -162,4 +162,6 @@ public interface IOdsProcureOrderService {
List<OdsProcureOrder> PurchaseOrderPdaT(OdsProcureOrder odsProcureOrder);
List<OdsProcureOrder> selectOrderCardTLTWO(OdsProcureOrder odsProcureOrder);
void batchSapTl(List<String> orderList);
}

@ -1787,6 +1787,7 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
order.setUserDefined9("");
order.setUserDefined10("3");//失败
odsProcureOutOrderMapper.updateWMSOdsProcureReturnOrderByids(order, orderList2);
throw new RuntimeException("过账失败:"+msg);
}
}
}
@ -3315,6 +3316,7 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
}
/**
* 105
* (106)
* @param odsProcureOrders
* @return
*/
@ -3342,8 +3344,7 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
if (result2.getCode()==200){
Map map = new HashMap();
map = (Map) result2.getData();
String MATERIALDOCUMENT = (String) map.get("MATERIALDOCUMENT");
String MATDOCUMENTYEAR = (String) map.get("MATDOCUMENTYEAR");
String code106 = (String) map.get("code106");
//成功了--成功了,根据
WmsRawOrderInSn wmsRawOrderInSn=new WmsRawOrderInSn();
wmsRawOrderInSn.setUserDefined5(wmsRawOrderIn.getDnNo());
@ -3359,8 +3360,10 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
wmsRawOrderInNewsSn.setWhCode(wmsRawOrderInSn1.getWhCode());
wmsRawOrderInNewsSn.setWlCode(wmsRawOrderInSn1.getWlCode());
wmsRawOrderInNewsSn.setUserDefined3("0");
//更新包材库存明细,变为暂收
wmsOdsMateStorageNewsSnMapper.updateWmsOdsMateStorageNewsSnTWM(wmsRawOrderInNewsSn);
wmsRawOrderInSn1.setUserDefined1("1");
//更新收货明细状态,变为暂收
wmsRawOrderInSnMapper.updateWmsRawOrderInSn(wmsRawOrderInSn1);
WmsOdsMateStorageNews wmsOdsMateStorageNews=new WmsOdsMateStorageNews();
wmsOdsMateStorageNews.setMaterialCode(wmsRawOrderInSn1.getMaterialCode());
@ -3368,15 +3371,28 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
wmsOdsMateStorageNews.setWlCode(wmsRawOrderInSn1.getWlCode());
wmsOdsMateStorageNews.setWhCode(wmsRawOrderInSn1.getWhCode());
wmsOdsMateStorageNews.setStorageAmount(wmsRawOrderInSn1.getAmount());
//更新库存数量
wmsOdsMateStorageNewsMapper.updateWmsOdsMateStorageNewsUpdateStorageAmountFC(wmsOdsMateStorageNews);
}
wmsRawOrderIn.setOrderStatus("0");
wmsRawOrderIn.setAccountingTime(new Date());
wmsRawOrderIn.setUserDefined10(result2.getMsg());
// wmsRawOrderIn.setUserDefined4(MATERIALDOCUMENT);
// wmsRawOrderIn.setUserDefined5(MATDOCUMENTYEAR);
//106冲销凭证
wmsRawOrderIn.setUserDefined10(code106);
//记录旧的105凭证
if (StringUtils.isNotEmpty(wmsRawOrderIn.getOldCode105())){
wmsRawOrderIn.setOldCode105(wmsRawOrderIn.getOldCode105() + ',' + wmsRawOrderIn.getUserDefined4());
}else {
wmsRawOrderIn.setOldCode105(wmsRawOrderIn.getUserDefined4());
}
//去除物料凭证
wmsRawOrderIn.setUserDefined4("");
wmsRawOrderIn.setUserDefined5("");
//更新库存凭证
wmsRawOrderInMapper.updateWmsRawOrderIn(wmsRawOrderIn);
//
}else {
//失败了
wmsRawOrderIn.setAccountingTime(new Date());
@ -3971,6 +3987,7 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
order.setUserDefined9("");
order.setUserDefined10("3");//失败
odsProcureOutOrderMapper.updateWMSOdsProcureReturnOrderByids(order, orderList2);
throw new RuntimeException("过账失败:"+msg);
}
}
}
@ -4033,4 +4050,17 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService {
return null;
}
/**
* params 退
* **/
@Override
@DS("#header.poolName")
public void batchSapTl(List<String> orderList) {
//根据退料单查询出对应的物料
for (String order : orderList){
List<OdsProcureOutOrder> orderList1 = odsProcureOutOrderMapper.selectWmsOdsProcureReturnOrderByProduceCode(order);
OutboundPostingzcSAPTH(orderList1);
}
}
}

@ -2129,4 +2129,16 @@
#{ID}
</foreach>
</delete>
<select id="selectWmsOdsProcureReturnOrderByProduceCode" resultMap="OdsProcureOutOrderResult">
SELECT DISTINCT
wms_ods_procure_return_order.ID
FROM
wms_ods_procure_return_order
LEFT JOIN wms_raw_order_in_sn ON wms_raw_order_in_sn.user_defined5 = wms_ods_procure_return_order.Produce_Code
AND wms_raw_order_in_sn.material_code = wms_ods_procure_return_order.Material_Code
where wms_ods_procure_return_order.Produce_Code = #{order}
and wms_ods_procure_return_order.User_Defined10!='2'
and Order_Status='3'
</select>
</mapper>

@ -68,6 +68,7 @@
<result property="checkManName" column="checkManName"/>
<result property="accountingtime" column="accountingtime"/>
<result property="checkNo" column="checkNo"/>
<result property="oldCode105" column="old_code105"/>
</resultMap>
<sql id="selectWmsRawOrderInVo">
@ -322,7 +323,8 @@
wms_raw_order_in.gmt_modified,
wms_raw_order_in_sn.user_defined2 incomeBatchNo,
ods_procure_order.ID kem,
wms_raw_order_in.active_flag
wms_raw_order_in.active_flag,
wms_raw_order_in.old_code105
FROM
wms_raw_order_in
LEFT JOIN wms_raw_order_in_sn ON wms_raw_order_in.dn_no=wms_raw_order_in_sn.user_defined5 AND wms_raw_order_in_sn.po_no=wms_raw_order_in.po_no
@ -497,6 +499,7 @@
<if test="lastModifiedBy != null">last_modified_by = #{lastModifiedBy},</if>
<if test="gmtModified != null">gmt_modified = #{gmtModified},</if>
<if test="activeFlag != null">active_flag = #{activeFlag},</if>
<if test="oldCode105 != null">old_code105 = #{oldCode105},</if>
</trim>
where raw_order_in_id = #{rawOrderInId}
</update>

Loading…
Cancel
Save