diff --git a/app/build.gradle b/app/build.gradle index 112d07c..cc6ab07 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { applicationId "com.example.beijing_daxing" minSdk 24 targetSdk 33 - versionCode 5 + versionCode 7 versionName "1.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 4549c92..1294217 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,7 +11,7 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 5, + "versionCode": 7, "versionName": "1.5", "outputFile": "app-release.apk" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 35213d1..34bec28 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,14 +53,14 @@ android:name=".CheckListActivity" android:exported="false" /> - - - - - + + + + + + + + > list2; private OptionsPickerView opv; private List list; - + private ObservableBoolean state = new ObservableBoolean(false); private PmRecordPenalty recordPenalty; + private TipsDialog tipsDialog; + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + private PersonPenaltyDialog personPenaltyDialog; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_select_person_info); + tipsDialog = new TipsDialog(this); + initSan(); pictureDialog = new LookPictureDialog(this); - opv= new OptionsPickerBuilder(this, this).build(); + opv = new OptionsPickerBuilder(this, this).build(); initCheckList(); - recordPenalty=new PmRecordPenalty(); - recordPenalty.setCreateBy(SharedPreferencesUtils.getstring("user","")); + recordPenalty = new PmRecordPenalty(); + recordPenalty.setCreateBy(SharedPreferencesUtils.getstring("user", "")); + binding.setState(state); + binding.checkState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + state.set(position == 1); + recordPenalty.setCheckState(position + ""); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + personPenaltyDialog = new PersonPenaltyDialog(this); } private void initCheckList() { @@ -61,8 +87,9 @@ public class SelectPersonInfoActivity extends BaseActivity implements OnOptionsS super.onSuccess(response); MyResult body = response.body(); if (body.getCode() == 0) { - list = gson.fromJson(body.getJson(), new TypeToken>() { - }.getType()); + list = + gson.fromJson(body.getJson(), new TypeToken>() { + }.getType()); list1 = new ArrayList<>(); list2 = new ArrayList<>(); Map map = new HashMap<>(); @@ -80,7 +107,7 @@ public class SelectPersonInfoActivity extends BaseActivity implements OnOptionsS String tag = map.get(parentId); int i = list1.indexOf(tag); String penaltyTypeCode = penaltyType.getPenaltyTypeCode(); - list2.get(i).add(penaltyTypeCode+"-"+penaltyInfo); + list2.get(i).add(penaltyTypeCode + "-" + penaltyInfo); } }); opv.setPicker(list1, list2, null); @@ -104,14 +131,42 @@ public class SelectPersonInfoActivity extends BaseActivity implements OnOptionsS super.onSuccess(response); MyResult body = response.body(); if (body.getCode() == 0) { - personInfo = gson.fromJson(body.getJson(), PmBasePersonInfo.class); + String joinDate = personInfo.getJoinDate(); + if (joinDate != null) { + Date currentDate = new Date(); + String nowDate = sdf.format(currentDate); + + Date date = null; + try { + date = sdf.parse(joinDate); + } catch (ParseException e) { + throw new RuntimeException(e); + } + + // 优化后的日期判断逻辑 + if (currentDate.after(date) && !nowDate.equals(joinDate)) { + tipsDialog.showImage(false, "人员已过期"); + } else { + tipsDialog.showImage(true, "人员有效"); + } + + } recordPenalty.setBasePersonId(personInfo.getBasePersonId()); + recordPenalty.setEpc(bytes2HexString); binding.setPersonInfo(personInfo); Glide.with(SelectPersonInfoActivity.this).load(url.replace("/api", "") + personInfo.getPhotoPath()).into(binding.selectInfoPhoto); - return; + + personPenaltyDialog.setList(personInfo.getPmRecordPenalties()); + } else { + tipsDialog.showImage(false, "后台管理员未录入信息"); + if (personInfo != null) { + personInfo.clearUi(); + } + recordPenalty.setBasePersonId(null); + personInfo = null; } - Toast.makeText(SelectPersonInfoActivity.this, body.getMsg(), Toast.LENGTH_SHORT).show(); + } }); } @@ -134,6 +189,10 @@ public class SelectPersonInfoActivity extends BaseActivity implements OnOptionsS } public void selectInfoSubmit(View view) { + if (recordPenalty.getBasePersonId() ==null){ + Toast.makeText(this, "请先查询人员信息", Toast.LENGTH_SHORT).show(); + return; + } OkGo.post(url + "/insertRrecordPenalty") .upRequestBody(RequestBody.create(JSON, gson.toJson(recordPenalty))) .execute(new MyRecultCall(dialog, this) { @@ -155,7 +214,7 @@ public class SelectPersonInfoActivity extends BaseActivity implements OnOptionsS String type = list1.get(options1); String s = list2.get(options1).get(options2); binding.selectPenalty.setText(s); - s = s.substring(s.indexOf("-")+1,s.length()); + s = s.substring(s.indexOf("-") + 1, s.length()); Log.e("TAG", "onOptionsSelect:" + type + ", " + s); PmBasePenaltyType penaltyType = new PmBasePenaltyType(); penaltyType.setPenaltyInfo(s); @@ -168,4 +227,16 @@ public class SelectPersonInfoActivity extends BaseActivity implements OnOptionsS recordPenalty.setPenaltyAmount(penaltyType1.getPenaltyAmount()); } + + public void checkPenalty(View view) { + if (personInfo == null) { + Toast.makeText(this, "请先查询人员信息", Toast.LENGTH_SHORT).show(); + return; + } + if (personInfo.getPenaltyCount() == 0){ + Toast.makeText(this, "该人员暂无处罚记录", Toast.LENGTH_SHORT).show(); + return; + } + personPenaltyDialog.show(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/adapter/PersonPenaltyAdapter.java b/app/src/main/java/com/example/beijing_daxing/adapter/PersonPenaltyAdapter.java new file mode 100644 index 0000000..54536c8 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/adapter/PersonPenaltyAdapter.java @@ -0,0 +1,69 @@ +package com.example.beijing_daxing.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.beijing_daxing.BR; +import com.example.beijing_daxing.R; +import com.example.beijing_daxing.base.AdapterClickCall; +import com.example.beijing_daxing.been.PmRecordPenalty; +import com.example.beijing_daxing.been.Stock; +import com.example.beijing_daxing.databinding.ItemCheckBinding; +import com.example.beijing_daxing.databinding.ItemPPBinding; + +import java.util.List; + +/** + * @author wanghao + * @date 2024/1/19 14:32 + */ +public class PersonPenaltyAdapter extends RecyclerView.Adapter { + private Context context; + private List list; + private LayoutInflater inflater; + + public PersonPenaltyAdapter(Context context, AdapterClickCall call) { + this.context = context; + inflater = LayoutInflater.from(context); + + } + + public void setList(List list) { + this.list = list; + } + + @Override + public MyViewHoder onCreateViewHolder(ViewGroup parent, int viewType) { + ItemPPBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_p_p, parent, false); + return new MyViewHoder(binding); + } + + @Override + public void onBindViewHolder(MyViewHoder holder, int position) { + var binding = holder.getBinding(); + binding.setVariable(BR.item,list.get(position)); + + } + + @Override + public int getItemCount() { + return list==null?0:list.size(); + } + + public class MyViewHoder extends RecyclerView.ViewHolder { + private ItemPPBinding binding; + + public MyViewHoder( ItemPPBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + public ItemPPBinding getBinding() { + return binding; + } + } +} diff --git a/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java b/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java index 39abc94..c66e9d9 100644 --- a/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java @@ -28,6 +28,7 @@ import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import com.example.beijing_daxing.R; +import com.example.beijing_daxing.uitls.SharedPreferencesUtils; import com.google.gson.Gson; import com.handheld.uhfr.UHFRManager; import com.uhf.api.cls.Reader; @@ -76,13 +77,15 @@ public class BaseActivity extends AppCompatActivity { super.onCreate(savedInstanceState); gson = new Gson(); initDialog(); - initSan(); + broadcastIntent = new Intent("android.rfid.FUN_KEY"); broadcastIntent.putExtra("keydown", false); } - private void initSan() { + public void initSan() { uhfLongerManager = MyApplication.getApplication().getUhfrManager(); + int powerIn = SharedPreferencesUtils.getInt("powerIn", 33); + uhfLongerManager.setPower(powerIn, powerIn); myReceiver = new MyReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.rfid.FUN_KEY"); @@ -92,7 +95,6 @@ public class BaseActivity extends AppCompatActivity { } - // 1- 读取EPC public void readEPC(int lenth) { byte[] rdata = new byte[lenth]; @@ -143,7 +145,10 @@ public class BaseActivity extends AppCompatActivity { @Override protected void onDestroy() { super.onDestroy(); - unregisterReceiver(myReceiver); + if (myReceiver != null) { + unregisterReceiver(myReceiver); + } + } public void sanRfid(List epcs) { @@ -243,7 +248,7 @@ public class BaseActivity extends AppCompatActivity { var keydown = intent.getBooleanExtra("keydown", false); Log.e("TAG", "接收到广播:" + keydown); if (!keydown) { - readEPC(6); + readEPC(12); } } } diff --git a/app/src/main/java/com/example/beijing_daxing/been/PmBasePersonInfo.java b/app/src/main/java/com/example/beijing_daxing/been/PmBasePersonInfo.java index ca7130b..35cb533 100644 --- a/app/src/main/java/com/example/beijing_daxing/been/PmBasePersonInfo.java +++ b/app/src/main/java/com/example/beijing_daxing/been/PmBasePersonInfo.java @@ -1,12 +1,16 @@ package com.example.beijing_daxing.been; +import androidx.databinding.BaseObservable; + +import java.util.List; + /** * 人员信息对象 pm_base_person_info * * @author ruoyi * @date 2025-11-26 */ -public class PmBasePersonInfo { +public class PmBasePersonInfo extends BaseObservable { /** * 人员表主键 @@ -62,6 +66,18 @@ public class PmBasePersonInfo { */ private String academicQualification; + private List pmRecordPenalties; + private int penaltyCount; + + public int getPenaltyCount() { + penaltyCount = pmRecordPenalties==null || pmRecordPenalties.isEmpty() ? 0 : pmRecordPenalties.size(); + return penaltyCount; + } + + // public void setPenaltyCount(int penaltyCount) { + // this.penaltyCount = penaltyCount; + // } + public Long getBasePersonId() { return basePersonId; } @@ -141,5 +157,21 @@ public class PmBasePersonInfo { public void setAcademicQualification(String academicQualification) { this.academicQualification = academicQualification; } + public List getPmRecordPenalties() { + return pmRecordPenalties; + } + public void setPmRecordPenalties(List pmRecordPenalties) { + this.pmRecordPenalties = pmRecordPenalties; + notifyChange(); + } + + public void clearUi() { + setEmployeeId(null); + setPeopleName(null); + setDriverCode(null); + setJoinDate(null); + setPhotoPath(null); + notifyChange(); + } } diff --git a/app/src/main/java/com/example/beijing_daxing/been/PmRecordPenalty.java b/app/src/main/java/com/example/beijing_daxing/been/PmRecordPenalty.java index b9328f3..88a411d 100644 --- a/app/src/main/java/com/example/beijing_daxing/been/PmRecordPenalty.java +++ b/app/src/main/java/com/example/beijing_daxing/been/PmRecordPenalty.java @@ -51,6 +51,30 @@ public class PmRecordPenalty { private String processState; private String createBy; + private String createTime; + + private String checkState; + private String epc; + + public String getCreateTime() { + return createTime; + } + + public String getEpc() { + return epc; + } + + public void setEpc(String epc) { + this.epc = epc; + } + + public String getCheckState() { + return checkState; + } + + public void setCheckState(String checkState) { + this.checkState = checkState; + } public String getCreateBy() { return createBy; diff --git a/app/src/main/java/com/example/beijing_daxing/dialog/PersonPenaltyDialog.java b/app/src/main/java/com/example/beijing_daxing/dialog/PersonPenaltyDialog.java new file mode 100644 index 0000000..ab5ac72 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/dialog/PersonPenaltyDialog.java @@ -0,0 +1,45 @@ +package com.example.beijing_daxing.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.databinding.DataBindingUtil; + +import com.example.beijing_daxing.R; +import com.example.beijing_daxing.adapter.PersonPenaltyAdapter; +import com.example.beijing_daxing.been.PmRecordPenalty; +import com.example.beijing_daxing.databinding.DialogPersonPenaltyBinding; + +import java.util.List; + +public class PersonPenaltyDialog extends Dialog { + private Context context; + private DialogPersonPenaltyBinding binding; + private PersonPenaltyAdapter adapter; + private List list; + + public void setList(List list) { + this.list = list; + adapter.setList(list); + adapter.notifyDataSetChanged(); + + } + + public PersonPenaltyDialog(Context context) { + super(context, R.style.dialog); + this.context = context; + adapter = new PersonPenaltyAdapter(context, null); + binding = + DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.dialog_person_penalty, null, false); + setContentView(binding.getRoot()); + + binding.setAdapter(adapter); + binding.dialogDismiss.setOnClickListener(v -> dismiss()); + } + + + +} diff --git a/app/src/main/java/com/example/beijing_daxing/dialog/TipsDialog.java b/app/src/main/java/com/example/beijing_daxing/dialog/TipsDialog.java new file mode 100644 index 0000000..3724c66 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/dialog/TipsDialog.java @@ -0,0 +1,48 @@ +package com.example.beijing_daxing.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.example.beijing_daxing.R; + + +/** + * Created by wangh on 2020/10/10-14:57。 + */ +public class TipsDialog extends Dialog { + public TextView textView, button; + private ImageView imageView; + + public TipsDialog(@NonNull Context context) { + super(context, R.style.dialog); + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_tip); + imageView = findViewById(R.id.tip_image); + textView = findViewById(R.id.tip_tip); + findViewById(R.id.dialog_no).setOnClickListener(v -> dismiss()); + + } + + + public void showImage(boolean imageState, String tip) { + show(); + if (imageState) { + imageView.setImageResource(R.mipmap.dialog_success); + } else { + imageView.setImageResource(R.mipmap.dialog_failure); + } + textView.setText(tip); + + } + +} diff --git a/app/src/main/java/com/example/beijing_daxing/vm/LoginVm.java b/app/src/main/java/com/example/beijing_daxing/vm/LoginVm.java index 6799fef..4b31f94 100644 --- a/app/src/main/java/com/example/beijing_daxing/vm/LoginVm.java +++ b/app/src/main/java/com/example/beijing_daxing/vm/LoginVm.java @@ -10,8 +10,7 @@ public class LoginVm extends BaseObservable { private String name; private String pass; private boolean remember; - - private String ipConfig; + private String ipConfig ; private String epcConfig; public String getIpConfig() { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4d2b224..6988388 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,7 +104,7 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center" - android:hint="输入RFID 8位前缀" + android:hint="输入RFID过滤前缀" android:imeOptions="actionDone" android:text="@={user.epcConfig}" /> diff --git a/app/src/main/res/layout/activity_select_person_info.xml b/app/src/main/res/layout/activity_select_person_info.xml index 828846a..f26c08c 100644 --- a/app/src/main/res/layout/activity_select_person_info.xml +++ b/app/src/main/res/layout/activity_select_person_info.xml @@ -7,6 +7,10 @@ + + + + + + + + + + android:paddingEnd="16dp" /> -